设计功能:
(1): 显示器显示当前单价,当前里程,当前费用
(2): 分时计费( 白天,晚上标准不同,等待时间计费 )
(3): 定时器编程产生脉冲用于模拟车辆行走,一个脉冲代表两米
(4): 使用按键控制计费开始和计费结束( 计费结束保持显示车费等信息 )
小白不知道怎么发送图片,但本人亲测可用!
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
2个单片机实现 一个芯片发脉冲 一个芯片统计
单片机源程序如下:
- //--- 头文件 ---//
- #include "LCD1602.H"
- #include "Single_Key.h"
- #include "INT.H"
- #include "T0.H"
- //--- 引脚声明 ---//
- sbit Wait = P2^3; //等待时间引脚
- //--- 变量定义 ---//
- uchar Price = 0; //汽车单公里价格
- //--- 声明 ---//
- void main()
- {
- /************************ 程序初始化 *****************************/
- LcdInit(); //LCD显示屏初始化
- Inint_T0; //定时器初始化
- INT0_Falling;
- EX0 = 0; //关闭外部计数中断
- /************************ 主程序循环 *****************************/
- while(1)
- {
- KeyTest_1();KeyTest_2(); //检测是白天还是夜晚
- KeyTest_3();KeyTest_4(); //是否开始计数
- FirstLine_ClearOFF_Char(Price:,0 );
- LcdIDisplay_Num ( First_Line , Clear_OFF,6,Price); //单价
- if( Price == 5 )
- LcdIDisplay_Char ( First_Line , Clear_OFF, 7, " " ); //防止显示溢出
- FirstLine_ClearOFF_Char( km:,10 ); //公里
- LcdIDisplay_Num ( First_Line , Clear_OFF,13, KM );
- SecondLine_ClearOFF_Char(NOW Price:,0 );
- LcdIDisplay_Num ( Second_Line , Clear_OFF,10, Price * KM + Wait_Count ); //总价
- if( Single_KEY_Flag_1 == 1 )
- {
- Single_KEY_Flag_1 = 0;
- Price = 5;
- }
- if( Single_KEY_Flag_2 == 1 )
- {
- Single_KEY_Flag_2 = 0;
- Price = 10;
- }
- if( Single_KEY_Flag_3 == 1 )
- {
- Single_KEY_Flag_3 = 0;
- EX0 = 1; //开启外部计数中断
- KM_COUNT = 0; KM = 0;
- Price = 5;
- }
- if( Single_KEY_Flag_4 == 1 )
- {
- Single_KEY_Flag_4 = 0;
- EX0 = 0; //关闭外部计数中断
- Price = 5;
- }
- if( Wait == 0 )
- {
- Enable_T0; //开启定时器
- }
- else
- {
- DisEnable_T0; //关闭定时器
- Inint_T0; //初始化定时器
- }
- }
- }
复制代码
仿真代码51hei附件下载:
出租车计价器仿真.7z
(95.35 KB, 下载次数: 77)
|