51单片机--仿真出租车计价器

发布者:数字冒险最新更新时间:2018-05-07 来源: eefocus关键字:51单片机  出租车计价器 手机看文章 扫描二维码
随时随地手机看文章

这汇编的程序,编写的很复杂,实现的功能却还是很简陋。


在硬件方面,显示金额的位数也不足。


做而论道用 C 重新编写了一个程序,如下:


#include 

#include


#define BAITIAN 10   //白天价格/km

#define YEJIAN  14   //夜间价格/km

#define DENGREN  1   //停车等人价格/30s


sbit  QD = P3^4;

sbit  RY = P3^7;


unsigned char  danjia, jvli, n_X0, mode;

unsigned int  jinee, n_50ms;


bit  ye;       //1夜间/0白天


//---------------------------------------

void delay(unsigned int time)

    unsigned int i, j;

    for(i = 0; i < time; i++)  for (j = 0; j < 50; j++);

}

//---------------------------------------

void display(char k)      //k=0时关闭显示

    unsigned char code DIG_SEG[] = {

      0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, //01234567

      0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//89ABCDEF

    unsigned char i, j = 0xfe;

    unsigned char buff[8] = 0;

    buff[0] = DIG_SEG[danjia / 10];

    buff[1] = DIG_SEG[danjia % 10];

    buff[2] = DIG_SEG[jvli / 10];

    buff[3] = DIG_SEG[jvli % 10];

    buff[4] = DIG_SEG[jinee / 1000];

    buff[5] = DIG_SEG[jinee % 1000 / 100];

    buff[6] = DIG_SEG[jinee % 100 / 10];

    buff[7] = DIG_SEG[jinee % 10];

    for(i = 0; i < 8; i++)  {

      P2 = 255;

      if (k > 0) { P0 = buff[i]; P2 = j;}

      delay(1);  j = _crol_(j, 1);

    }

}

//---------------------------------------

void key(void)

{

    if (!QD) {

      display(mode);

      if (!QD) {

        while(!QD)  display(mode);

        mode++;

        if (mode > 2) mode = 0;  //mode=0,1,2

    } }

    if (!RY) {

      display(mode);

      if (!RY) {

        while(!RY)  display(mode);

        ye = ~ye;

        if (ye) danjia = YEJIAN;

        else    danjia = BAITIAN;

    } }

}

//---------------------------------------

main()

{

    TMOD = 0x01;

    TH0 = (65536 - 50000) / 256;

    TL0 = (65536 - 50000) % 256;

    ET0 = 1;


    EX0 = 1;

    IT0 = 1;

    EA = 1;


    TR0 = 0;                  //先不启动


    ye = 1;                   //此时是夜间

    if (ye) danjia = YEJIAN;

    else    danjia = BAITIAN;


    mode = 0;                 //等客状态


    for(;;)  {


      while (mode == 0) {display(mode); key();}//等客


      //开始行驶, 各项初始值皆设为零


      n_50ms = 0;  n_X0 = 0; //时间, 外部中断次数

      jvli = 0;  jinee = 0;  //距离, 金额


      EX0 = 1; TR0 = 1;      //开始统计里程, 计算等车时间


      while (mode == 1) {display(mode); key();}//等待下车


      EX0 = 0; TR0 = 0;      //停止统计


      //数据停止变化, 停车结算

     

      while (mode == 2) {display(mode); key();}//等待清零

   

    }

}

//---------------------------------------

void X0_INT() interrupt 0

{

    n_50ms = 0;             

    n_X0++;

    if(n_X0 == 6) {       //中断6次, 假设就是1km

      n_X0 = 0;

      jvli++;             //里程加一

      jinee += danjia;    //加上单价/km

    }

}

//---------------------------------------

void T0_INT() interrupt 1

{

    TH0 = (65536 - 50000) / 256;

    TL0 = (65536 - 50000) % 256;

    n_50ms++;

    if(n_50ms == 600) { //到了30s

      n_50ms = 0;

      jinee += DENGREN; //加上停车等人的价格/30s

    }

}

//---------------------------------------


仿真后的截图如下:

51单片机--仿真出租车计价器 - 非著名博主 - 电子信息角落


功能说明:


出租车在白天、晚上,每公里的价格是不同的,都要在程序的开始处进行定义。


同时还定义了停车等人的价格,每当等待 30s,即要总金额中,加上“等人价”。


用一个按键 QD 切换等人/行驶/清零三个状态。


用一个按键 RY 切换白天/夜间两个价格。


功能还是很简陋,缺少“起步价”、“打印”等等。


原程序的要求,也没有这许多,做而论道也就不添加这些了。


关键字:51单片机  出租车计价器 引用地址:51单片机--仿真出租车计价器

上一篇:51单片机基于 Proteus 制作 10 以内加减的计算器
下一篇:51单片机--设置数码管的闪烁位置,便于输入数字

推荐阅读最新更新时间:2024-03-16 16:01

基于AT89C51单片机的点滴检测系统设计
一.系统概述 系统使用的模块有AT89C51单片机+8位共阳极数码管+74HC245驱动器+按键+小灯报警 系统使用AT89C51单片机作为主控,通过数码管显示计时时间,通过按键可以对计时时间进行设置,使用按键来模拟点滴的变化,按下按键则代表点滴停止工作。整体的工作模式是:在挂点滴前设置好点滴时间,开始挂点滴并按下开始计时按键,此时在计时过程中如果点滴停止则系统就会报警。 二.仿真概述 1.8位共阳极数码管显示计时时间。 2.按键设置计时时间。 3.按键来模拟点滴的停止。 4.计时过程中点滴停止则小灯报警。 三.程序设计 使用 Keil 51进行程序设计,打开 Proteus 时程序是默认烧录的
[单片机]
基于AT89C<font color='red'>51单片机</font>的点滴检测系统设计
51单片机产生2KHZ方波程序
51单片机如果采用11.0592MHZ的晶振,则一个机器周期等于12的震荡周期(晶振频率的倒数),即每个机器周期约是1.085us,其计算方法分析如下: 由于晶振是11.0592MHz,则一个机器周期等于(1S/11.0592MHZ)*12*106=1.085us 如果采用12MHZ的晶振,则一个机器周期等于(1S/12MHZ)*12*106=1us 以用采用11.0592MHZ的晶振,利用51单片机的定时器0产生2khz程序为例,分析如下: 2kHz是500us产生一个的方波(波峰250us,波谷250us)取半个周期记为t=250us 250us/1.09us需要计数229次,因而初值应装,TH0=(655
[单片机]
基于51单片机的自行车测速系统
一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+霍尔测速模块。 本设计采用51单片机为核心控制,使用LCD1602显示采集到的速度,霍尔测速模块进行测速,测速的原理是通过磁感应原理检测开关变化量,通过检测两个开关量的时间间隔来计算速度。在实际应用中会将霍尔测速模块放置在轮胎上,就能完成自行车速度的检测。 二.仿真概述 1.通过LCD1602显示实时车速。 2.通过霍尔测速模块进行速度检测。 3.通过在霍尔模块处模拟开关量的变化,变化速度越快则显示的车速越快。 三.程序设计 使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状态,如果没有烧录点击AT89C51单片机并将程序
[单片机]
基于<font color='red'>51单片机</font>的自行车测速系统
51单片机汇编语言实验(三)-----定时/计数器实验
一、实验目的:    学习定时/计数器的工作方式,掌握程序设计方法。 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    1. 定时器实验    2. 计数器实验 四、 定时器实验    1、实验原理:    使用T0进行定时,编写程序,使P1.0控制的发光二极管L0每隔2秒交替点亮或熄灭。    2、实验步骤:   ① 将试验箱IO区的P1.0与LED区的L0按图下图连线;   ② 编写程序,经编译、链接无语法错误后装载到实验系统;   ③ 运行程序,观察发光二极管L0,应每隔2秒交替点亮或熄灭;   ④ 实验完毕后,应使用暂停命令中止程序的运行。    3、参考代码: //实验
[单片机]
<font color='red'>51单片机</font>汇编语言实验(三)-----定时/计数器实验
80C51单片机片内与片外程序存储器的选择
大多数51系列单片机内部都配置一定数量的程序存储器ROM。如80C51芯片内有4KB掩模ROM存储单元,AT89C51芯片内部配置了4KB Flash ROM,它们的地址范围均为0000H~0FFFH。 ROM可以用来存放固定的程序或数据,如系统监控程序,常数表格等。 片内与片外程序存储器的选择 80C51的程序计数器PC是16位的计数器,所以能寻址64KB ROM的任何单元。 1.~EA引脚接高电平 ~EA引脚接高电平,对于基本型单片机,首先在片内程序存储器中取指令,当PC的内容超过0FFFH(4K)时,系统会自动转到片外的程序存储器中取指令,外部程序存储器的地址从1000H开始编址。 2.~EA引脚接低电平 ~
[单片机]
80C<font color='red'>51单片机</font>片内与片外程序存储器的选择
关于51单片机外部中断响应
外部中断方式最好设为下降沿方式,特别是中断引脚接按键的情况。 外部下降沿中断:SETB IT0。每个机器周期都由硬件对引脚自动采样,若连续在2个周期采样到电平从高到低,则认定有中断请求,IE0=1。IE0会一直保持到该中断请求被CPU响应,响应前都不会自动清零,只有在响应后硬件才自动将IE0清零IE0=0。 外部低电平中断:CLR IT0。当中断引脚为低电平时,并保持一个机器周期,硬件自动置IE0=1。如果在下一个周期采样到中断引脚为高电平时,硬件自动将IE0清0。中断标志位自动清0条件:下降沿中断只有CPU响应中断同时才会清0,否则一直保持。低电平中断:任何时候当外部中断引脚为低电平时,IE0=1;为高电平时,IE0=0,所以
[单片机]
80c51单片机的基本配置有哪些 80c51单片机各个引脚及功能
  80c51单片机的基本配置有哪些   80C51单片机的基本配置包括:   CPU:80C51单片机的CPU由一个8位的ALU(算术逻辑单元)、一个8位的累加器、一个8位的B寄存器、一个16位的程序计数器和一个8位的状态寄存器组成。   存储器:80C51单片机的存储器包括程序存储器(ROM)、数据存储器(RAM)和特殊功能寄存器(SFR)。   时钟源:80C51单片机支持多种时钟源,包括外部晶体、外部时钟信号、内部振荡器等。   中断系统:80C51单片机支持多种中断源和中断优先级设置,可以灵活处理各种外部事件。   IO端口:80C51单片机的IO端口由多个可编程的输入输出引脚组成,可以连接各种外部设备。   通信接口:
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved