出租车计价器 代码
出租车计价器代码VHDL
SIGNAL I:INTEGER RANGE 0 TO 5 :=0; --当状态从go/wait转到idle时,希望将价格等持续显示5秒。
ELSIF (SA='1' AND SB='0') THEN STATE<=GO;
W2<="0000"; W1<="0000"; W0<="0000"; K2<="0000"; K1<="0000"; K0<="0000"; I<=0; FIN<='1'; CLK3S<='0';COUNT3S<=0; --此刻进入go状态已经一秒。
ELSE
STATE<=GO;
W2<=W2; W1<=W1; W0<=W0; K2<=K2; K1<=K1; K0<=K0;I<=I+1;
END IF;
ELSIF (SA='1' AND SB='0') THEN STATE<= GO;
END IF;
END IF;
END PROCESS U1;
U2:PROCESS(CLK1HZ) --有限状态机设计模块
BEGIN
IF RST='1' THEN W2<="0000"; W1<="0000"; W0<="0000"; K2<="0000"; K1<="0000"; K0<="0000"; I<=0; FIN<='0';
出租车计价器专业课程设计报告(含代码)
摘要随着社会的发展,出租车是人们生活中非常方便且较普遍的交通工具,出租车计价器的使用日益完善,现在我们引用单片机技术,使用编码和解码信息传递这种方式来完成计价器计数脉冲的形成;单片机可以很精确地检测到传感器信号。
用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能,本课程设计采用89C51的定时器T0产生的时钟,通过HD8255键盘显示电路用来显示行驶路程和价格及对计价的控制等从而实现了一个小型计价器系统。
关键字:计价器、单片机、89C51、HD8255目录一、设计要求 (1)1.1、基本要求: (3)1.2、要求分析: (3)二、系统组成及工作原理 (3)2.1系统的硬件构成及功能 (3)2.2 AT89S51单片机及其引脚说明 (4)2.3 AT24C01存储单元 (5)2.4系统工作原理 (5)三、方案设计对比 (6)3.1方案一: (6)3.2方案二: (6)3.3方案选择 (7)四、软件设计 (7)4.1系统主程序分析 (7)4.2计算程序 (8)4.3中途等待中断程序 (8)五、实验调试分析与结果 (9)5.1 实验调试 (9)5.2实验结果 (9)六、结论 (10)参考文献 (11)附录一: (12)一、设计要求1.1、基本要求:里程显示为:***.**公里;能预置起步价及单价:如起步3公里6.00元;1.60/公里;1.2、要求分析:1)起步价:乘客上车,显示起步价(6元),行车距离在3公里以内。
2)里程计价:(计价单位为元,并进行四舍五入)a.行车里程 < 3公里时,计价为6元;b.3公里≤行车里程时,计价为:6元+(里程-3)*1.6元/公里二、系统组成及工作原理2.1系统的硬件构成及功能本次设计主要有四个部分模块电组成,脉冲源产生脉冲提供给单片机,用来计算行驶路程,变换电路用来对产生的脉冲进行整形放大,单片机电路则控制整个系统的运行,8255键盘显示电路用来显示行驶路程和价格及对计价的控制。
出租车计价器故障代码---5p
出租车计价器故障代码---5p
最近,出租车司机朋友们正在经历着混乱和困惑。
原因是出租车计价器突然出现5p故障代码。
这意味着,出租车司机们在完成一次行程后,收到的费用会受到一定的影响。
首先,在解决5p故障的过程中,出租车司机们很多情况下需要进行重置。
尤其是在抵达乘客目的地之后,大多数故障代码都要求出租车司机们进行重置操作。
然而,在某些情况下,当乘客要求司机们读取费用信息时,计价器仍然会出现5p故障代码。
此外,在出现5p故障后,还可以通过更换计价器来解决问题。
当司机们检查到计价器不能正常工作时,他们可以从许多供应商处购买新的计价器。
购买新的计价器可以解决司机们出现的5p故障问题,但同时要花费相当多的金钱才能重新购买。
最后,出租车司机们可以通过向专业的出租车计价器维修商寻求帮助来解决5p故障的问题。
在5p故障出现时,司机们可以直接联系出租车计价器维修商,专业的技术人员可以根据故障的具体原因,对出租车计价器进行必要的维护和修复,尽快恢复计价器的正常工作状态。
以上就是关于出租车计价器出现5p故障代码出现时,司机可以采取的措施。
司机们应该根据计价器的实际情况,选择最合适的解决方案,以尽可能地降低费用,为乘客提供更安全和便利的服务。
出租车计价器说明
出租车计价器1功能描述出租车计价器是有液晶显示,按键控制,进行价格的设定,实现模拟出租车计价器的控制。
2产品模块配置1. EDM606-12864点阵液晶2. EDM001-MCS51单片机主板3. EDM403-8位独立按键4. EDM502直流电机5. EDM405 PNP三极管驱动6. EDM314+-5V,+-12V直流电源模块3 单元模块电路及功能1. EDM314+-5V,+-12V主流电源模块为各模块提供电源。
4产品模块连线各模块都连接电源 5V,GND。
EDM001-MCS51主机:P00~P07 连EDM606-12864点阵液晶: DB0~DB7EDM001-MCS51主机:P10~P17 连EDM606-12864点阵液晶: RST~NCEDM001-MCS51主机:P20~P27 连 EDM403-8位独立按键: F2~左EDM001-MCS51主机:P30 连 EDM405 PNP三极管驱动: INEDM001-MCS51主机:P32 连 EDM502直流电机:PULSEEDM405 PNP三极管驱动:OUT 连 EDM502直流电机:M-EDM502直流电机:M+ 连 VCC产品原理图:6 实验步骤及调试F2为开机键F1为菜单设置保存键SET为启动键0K按一次为暂停键按二次为完成键上为菜单设置键下为菜单设置键左为菜单设置键右为菜单设置键功能使用说明:连线完成上电按F2开机过五秒后进入出租车计价器菜单按F1 设置菜单此时设置的菜单会变黑,按左右键进行加减(只有价格可以修改)当要修改其他的参数的时候会提示不能操作,(因为路程等其他参数是不能进行修改的不符合实际)价格设置完成后按F1保存按SET启动电机转动当遇到堵车或其他原因要暂时停车可按OK键在此行驶时按SET键即可继续启动,停止时按OK键,按F1键查看菜单行驶》单价》总价》时间》总路程》载人次数》工作时间》累计金额。
再按OK,清零。
出租车计价器(单片机c语言)
P1.1:接功能键。
P1.3:接清零键。
P0口接数码管段选端,P2口接驱动芯片。
P3.4(T0):接模拟开关按键,替代了出租车计价器中的霍尔传感器。
P3.1、P3.0口接掉电保护电路。
2.3
按下计价按键时,显示起步价和起步里程范围,这些在程序中设置;当等于或超过两公里后,按计算总价的公式为:总价=起步价+单价*(总里程-起步里程)+1进行计价。本设计中,起步价为4元,起步里程为2公里,当然这些数据可以在程序中改写,以满足不同时期价格调整的需要。下图是通过在Keil C中编译通过,并生成Hex文件,在PROTEUS中仿真通过的整体硬件原理图:
图2.11时钟电路
2.4.6
按键控制电路中,单片机的P1.0管脚接启动/停止按键,通过软件编程,当按下按键计数器开始工作,开始计价;当弹起按键时,计数器停止工作,停止计价,启动/停止按键带自锁功能。按下启动按键,开关处于导通状态,这时给P1.0送低电平信号,这时TR0=1,计数器开始工作,调用计价子程序开始计价。清零按键接单片机的P1.3管脚,按下清零按键,P1.3为低电平,调用清零子程序,用于将显示数据清零,在程序中给各位赋0代码(0x3f),以达到清零的目的,方便下次计价。另外为功能键,控制价格调整,这个按键是在没有按下启动/停止按键时有作用,计价过程中无效。
能够保证系统可靠的复位,在初始化程序中应安排一定的复位延迟时间。
图2.8复位电路
2.4.4
掉电保护电路中采用了存储芯片AT24C02。
AT24C02是一个CMOS标准的EEPROM存储器,是AT24CXX系列(AT24C01/02/04/08/16)成员之一,这些EEPROM存储器的特点是功耗小、成本低、电源范围宽,静态电源电流约30uA~110uA,具有标准的I2C总线接口,是应用广泛的小容量存储器之一。
单片机课程设计 出租车计价器
摘要出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。
而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。
本设计的是一个基于单片机AT89S52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。
复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。
时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
在上电时LED数码管显示最初的起步价,里程收费,等待时间收费三种收费。
按暂停键,计价器可暂停计价,按查询键,在LED数码管上可以显示运行时等待的时间。
通过计算可以得出总共的费用和总的路程。
在这里主要是以AT89S52单片机为核心控制器,P0口、P2 口接两片四合一数码管,P1口接按键,通过按键输入。
关键词:单片机 AT89S52;LED数码管;出租车计费器;目录1 概述 (1)1.1 课题简介 (1)1.2 功能要求 (1)2 系统总体方案及硬件设计 (2)2.1 系统工作原理及总体方案 (2)2.2 单片机最小系统单元 (3)2.3 霍尔传感器检测单元 (3)2.4 键盘调整单元 (5)2.5 显示单元 (5)3 软件设计 (7)3.1系统主程序 (7)3.2 按键扫描程序 (8)3.3 中断程序 (9)3.4 计算程序 (10)3.5 显示程序 (10)4 实验仿真 (12)4.1 Proteus介绍 (12)4.2 调试与测试 (12)4.3 里程计价测试 (12)5 课程设计体会 (14)参考文献 (15)附1:系统原理图 (16)附2:源程序代码 (16)1 概述1.1 课题简介出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
出租车计价器
出租车计价器课程设计一.设计任务设计并制作一台出租车计价器。
调试时采用10赫兹脉冲信号模拟,每个脉冲代表汽车行进10米。
基本要求:(1) 不同情况具有不同的收费标准白天 1元/公里 晚上 2元/公里 途中等待(>30秒开始收费) 1元/30秒(2) 数据输出(6位LED数码管显示)单价(元)输出2 位 路程(公里)输出2 位 总金额(元)输出2 位(3) 按键(4个)启动计价开关 数据复位(清零) 白天/晚上转换 途中等待转换二、硬件电路设计及描述1.硬件电路原理图(如图1所示)图1硬件电路原理图如图1所示6个数码管显示分别显示单位(元),里程,总金额。
采用动态显示方式,由P0口接6个数码管的八段,P2口分别接6个数码管的公共端,P0口输出数码管的字段码,P2口输出数码管的字位码。
接于P3.0,P3.1,P3.2的三个按键S1—S3为调整按键,S1为启动计价键,S2为白天晚上转换键,S3为数据复位(清零)键,SW1为途中等待转换键。
三、软件设计流程及描述1.出租车计价器的程序设计P3.0为启动按键(通过键盘扫描形式)P3.1为白天黑夜转换按键(通过键盘扫描形式)P3.2 为复位清零按键(以外部中断0的形式实现)定时器0 用于等待时间的定时,工作在方式1定时器1 用于计数用于计数,工作在方式2(1) 存储单元分配71H单元:脉冲计数单元;72H单元:总金额十位显示单元;73H单元:总金额个位显示单元;74H单元:里程十位显示单元;75H单元:里程个位显示单元;76H单元:单价个位显示单元;77单元:单价十位显示单元。
55H:50ms计数单元。
(2) 主程序设计主程序流程图如图2所示,由于用到了外部中断0,所以,按中断系统的编程结构在0000H处放置一条长跳转指令LJMP START跳转到主程序入口,在外部中断0的中断入口地址0003H处放置一条长跳转指令LJMP EXT0跳转到外部中断0服务程序处。
出租车计价器程序
#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar qianwei,baiwei,shiwei,gewei; //显示数据各个位置数字的临时变量char led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码表示0-9//按键的定义,所有按键按下去为低电平sbit key0=P1^0; //清零sbit key1=P1^1; //切换路程与等待时间sbit key2=P1^2; //单程还是往返设置sbit key3=P1^3; //暂停按钮bit key1_flag; //由于按键会自动复位,这个为标志位bit key2_flag;bit key3_flag;bit flag;//初始化函数void initial_data(void){distance=0;cost=0;second=0;minute=0;way=0;key1_flag=1; //key2_flag=0; //单程or往返,接指示灯;key3_flag=1; //暂停,接指示灯;flag=0;pulse=0;dengdai=0;}//暂停程序void zanting(void){if(key3_flag){EX0=0; //关闭中断定时器TR0=0;}key3_flag=!key3_flag;}//计算数据处理void jisuan(){if(pulse<=210){distance=pulse/7+way/10000;cost=80; }danjia=10; //单程价格if(key2_flag) danjia=30; //往返价格if(pulse>180){distance=pulse/7+way/10000;cost=danjia*(distance-30)/10+80;}wait=minute*100+second;}//显示的辅助程序,分离一个数的各个数字void fenli(uint temp) //数据的分离处理{if(temp>9999) temp=9999;qianwei=temp/1000;baiwei=temp/100%10;shiwei=temp%100/10;gewei=temp%10;}void diplay_delay(void){uchar i;for(i=0;i<240;i++);}//显示程序;void led_show(){if(key1_flag) fenli(distance);else fenli(wait);P2=0xfe;P0=led_seg_code[gewei];P2=0xfd;if(key1_flag) P0=led_seg_code[shiwei]|0x80;else P0=led_seg_code[shiwei];diplay_delay();P2=0xfb;if(key1_flag) P0=led_seg_code[baiwei];else P0=led_seg_code[baiwei]|0x80;diplay_delay();P2=0xfb7;P0=led_seg_code[qianwei];diplay_delay();//-----显示价格----fenli(cost);P2=0xef;diplay_delay();P2=0xdf;diplay_delay();P2=0xbf;diplay_delay();P2=0x7f;diplay_delay();}//延时时基为1msvoid delay(uint x){int i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}//键盘的扫描void keyscan(){ if(key1==0) // 按键消抖并判断按下去的次数为基数还是偶数{ delay(2);if(key1==0)key1_flag=!key1_flag;}if(key0==0) // 清零if(key0==0)initial_data();}if(key3==0) // 暂停{ delay(2);if(key3==0)zanting();}if(key2==0) // 单程还是往返{ delay(2);if(key2==0)key2_flag=!key2_flag;}}//定时器初始化void initial_time(){TMOD=0x01;TH0=(65536-25000)/256;TL0=(65536-25000)%256;IE=0x83;IT0=1; //外部边沿触发方式TR0=1;}// 中断记录脉冲数void zd() interrupt 0 //中断0{aa++;if() pulse++; //进入中途等待计价}//********* 定时器********void time0() interrupt 1 //定时0{TH0=(65536-25000)/256; //10msTL0=(65536-25000)%256;tt++;if(tt>=40) //1s采样{tt=0;aa=aa/5;if(aa<=5) flag=0;else flag=1;aa=0;}if(!flag){way++;dengdai++;if(dengdai==40){ dengdai=0;second++;if(second==60){minute++;second=0;}}}}//主程序void main(void){initial_data(); //初始化数据initial_time(); //初始化定时器while(1){keyscan();jisuan();}}。
ZFJ-2000 型出租汽车税控计价器
ZFJ-2000 型出租汽车税控计价器技术说明书江苏阿波罗电子科技有限公司目录一、概述 (2)二、主要技术指标 (2)三、主要功能 (2)四、结构原理及安装简图 (3)五、操作说明 (4)六、数据查询 (4)七、计量管理 (7)八、公司管理 (9)九、传感器安装要点 (10)十、简单故障排除 (10)十一、打印机的使用及维护注意事项 (11)十二、保修规则 (11)十三、随机配件 (11)十四、售后服务承诺 (11)附录一、传感器与车型配置对照表 (12)附录二、计价器调试仪使用说明 (13)一、概述ZFJ-2000型出租汽车税控计价器是国内最新技术产品,具有自动计费、票据打印、数据存储等多种功能。
是出租车行业加强管理的理想工具,也是国家强制推行的计量器具之一。
执行标准: Q/321088LQC001-2007 《电子式出租汽车税控计价器》二、主要技术指标1.租金显示范围:0~999.9元租金分辨力:0.01元2.计程显示范围:0~999.99km计程显示分辨力:0.1km计程误差:-1.0%~+0.5%3.计时显示范围:59min59s(<1h)99h59min(>1h)计时误差:-1.0%~+0.5%计时显示分辨力:1s(<1h)4.永久时钟误差:±5min/30d5.切换速度误差:12km/h±0.5km/h6.工作电压:直流(9~16)V7.工作环境温度:-15℃~+50℃8.工作环境相对湿度:20%RH~90%RH(50℃)9.功耗:不大于6W(不包括打印、空车灯)10.主机体积:(160×138×51)mm11.主机重量:≤1.2kg三、主要功能1.存储功能:能记录存储400次营业的起始日期、时间,结束时间,营业里程,等候时间,最终单价,营业金额;能记录存储当班总营运数据和12个月总营运数据;能累计总行驶里程,总营业里程,总计时时间,总营业金额,总营业次数。
出租车计价器(单片机c语言)
分类号编号毕业设计题目:基于单片机的出租车计价器的设计——电子设计系别信息工程学院专业电子信息工程姓名学号2010年6月1 日学院毕业设计任务书设计题目:基于单片机的出租车计价器的设计——硬件部分专业:电子信息工程班级学号:姓名:指导教师:设计期限:2011年3月1日开始2011年6月1日结束院、系:北京信息工程学院2011年3 月1 日一、设计目的通过毕业设计使学生了解和掌握单片机应用技术;了解和掌握C语言的程序设计同硬件电路的结合;熟练运用proteus,keilC等软件的操作;了解和掌握单片机硬件电路的焊接和调试;了解和掌握掉电存储芯片AT24C02、霍尔传感器A44E、数码管、驱动芯片74LS245等外部接口芯片器件的应用。
二、主要设计内容实现出租车行驶里程和总金额的显示,预设起步价和起步公里数;实现清零、复位和掉电保护功能;实现对单价的调整。
三、重点研究问题(1)按下启动按键,显示起步里程与起步价。
(2)按模拟传感器信号的按键,显示行驶里程与总金额。
(3)按键控制清零、复位、掉电保护、调整预设单价。
(4)在软件中实现起步价,单价。
四、主要技术指标(1)数码管显示起步里程、单价,总里程、总金额。
(2)用按键控制清零、复位、掉电保护、调整预设单价。
五、设计成果要求(1)源程序通过编译、运行(2)软件烧录单片机硬件进行调试,运行(3)实现所述功能(4)电路板焊接、检测(5)最终提交软硬件、设计说明书、外文翻译、毕业设计说明书等六、其它参考文献:[1] 谭浩强.C程序设计(第二版).清华大学出版社.2003[2]潘永雄.新编单片机原理与应用.西安电子科技大学出版社.2003设计开题报告2011年3 月15日摘要现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。
而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
计价器的设置
MD3000设置数据的方法一、新计价器完整的设置1、取下铅封盖,在空车状态下进行如下调整。
2、按单程键进入查询状态,按单程或暂停键查询“CH—03”项,按一次检查键显示原年检日期和K值,记录下原年检日期和K值(设置新数据时要重新输入),按一次检查键返回空车状态。
3、按一次设置开关,金额屏显示“AA”,将设置卡插入,金额屏显示起步价“6.00”,单价屏显示“1.40”或“1.20”,与计时屏显示的“1—4”等组成四种组合,按单程键或暂停键可改变组合。
“1.20”与“1—4”表示单价1.20元和单脉冲传感器,“1.40”与“2—4”表示单价1.40元和单脉冲传感器,“1.20”与“3—4”表示单价1.20元和双脉冲传感器,“1.40”与“4—4”表示单价1.40元和双脉冲传感器,美达计价器应选择双脉冲传感器组合。
如插卡后显示“E”或“EE”,就重插几次卡,或在断电的情况下,先用一相当于设置卡大小的金属片代替设置卡挺拔几次,以清除插卡器触点的脏污,重新插卡试验,必要时检查插卡器及其相关电路。
4、再按一次检查键,金额屏显示“CLEAR”(清除),单价屏显示“YES ”表示清除计价器原来存贮的数据,如不清除就按单程键或暂停键设置成“NO”。
按一次检查键确认,并进入下一项。
5、金额屏显示“GPS”,单价屏显示“YES”(用GPS),按一次检查键确认,并进入下一项。
6、金额屏显示“SET 1”,单价屏显示当前年,计程屏显示当前月日,计时屏显示时分,按一次检查键开始设置。
按单程键或暂停键设定数值,按检查键移位。
当本项所有数值设置完成,最后按一次检查键确认,并进入下一项。
7、金额屏显示“SET 2”,单价屏显示下一次检定年,计程屏显示下一次检定月和日,计时屏显示K值,按一次检查键开始设置。
按单程键或暂停键设定数值,按检查键移位。
当本项所有数值设置完成,最后按一次检查键确认,并进入下一项。
8、金额屏显示“SET 3”,计时屏显示公司代码,按一次检查键开始设置。
MD6000计价器限制条件的查询和设置
MD6000型出租汽车税控计价器限制条件的查询和设置一、限制条件的查询1、在空车状态下,连续按上键至金额屏显示“CH-04”,按下键进入刷卡时间限制查询:金额屏前两位显示“G1”,后两位显示“- -”或“ON ”,(其中“- -”表示刷卡时间限制无效,“ON ”表示刷卡时间限制有效);单价屏、计程屏和计时屏显示刷卡限制时间。
如图1:表示刷卡时间限制有效,刷卡限制时间是2009年8月20日14点0分。
2、在刷卡时间限制查询状态下按上键,可以进入运营次数限制查询:金额屏前两位显示“G2”,后两位显示“- -”或“ON ”,(其中“- -”表示运营次数限制无效,“ON ”表示运营次数限制有效);计时屏显示运营限制次数,单价屏显示计价器内已有运营次数。
如图2:表示运营次数限制有效,运营限制次数为999条,计价器内已有运营次数为120条。
3、在运营次数限制查询状态下按上键,可以进入工作时间限制查询:金额屏前两位显示“G3”,后两位显示“- -”或“ON ”,(其中“- -”表示工作时间限制无效,“ON ”表示工作时间限制有效);计时屏显示运营限制的工作时间,单价屏显示司机目前的工作时间。
如图3:表示工作时间限制无效,运营限制工作时间为10小时0分,司机目前的工作时间为2小时15分。
4、在工作时间限制查询状态下按上键,可以进入里程限制查询:金额屏前两位显示“G4”,后两位显示“- -”或“ON ”,(其中“- -”表示里程限制无效,“ON ”表示里程限制有效);单价屏显示限制里程,计程屏显示提示里程,计时屏显示剩余里程。
如图4:表示里程限制有效,限制里程为5500公里,提示里程为1000公里,剩余里程为3400公里。
图1 图2 图3 图4二、限制条件的设置1、刷卡时间限制、运营次数限制和工作时间限制是通过一卡通管理软件设置,在公司例会刷卡时由司机卡自动下载至计价器。
2、里程限制是用专用的里程限制卡来设置,同一张里程限制卡可以设置同公司所有计价器,具体操作方法如下:在以上4种限制条件查询状态下,将里程限制卡插入计价器,可以显示卡上里程限制条件:金额屏前两位显示“G4”,后两位闪烁显示“- -”或“ON ”,(其中“- -”表示里程限制无效,“ON ”表示里程限制有效);单价屏闪烁显示限制里程,计程屏闪烁显示提示里程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 4:P3=0xdf;P0=table[licheng%10];break;
case 5:P3=0xbf;P0=table[danjia/10]+0x80;break;
case 6:P3=0x7f;P0=table[danjia%10];break;
zongjine=400;
licheng=0;
danjia=qibu;
}
if(key3num==5) //退出功能键
{
key3num=0;
}
if(key3==0)
{
delay(5);
}
if(key3num==2) //调夜晚单价
{
if(key1==0)
{
delay(5);
if(key1==0)
{
danjia2++;
if(danjia2==100)
danjia2=0;
while(!key1);
delay(5);
sbit key0=P1^0; //清零
sbit key1=P1^1; //切换/+
sbit key2=P1^2; //-
sbit key3=P1^3; //功能键
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
danjia1--;
if(danjia1==-1)
danjia1=99;
while(!key2);
delay(5);
while(!key2);
}
}
zongjine=100;
licheng=0;
danjia=danjia1;
{
key3num++;
if(key3num==5) key3num=0;
while(!key3);
delay(5);
while(!key3);
while(key3num)
{
if(key3num==1) //调白天单价
{
if(key1==0)
void main()
{
init();
qiehuantemp=1;
key3num=0;
while(1)
{
if(key3num==0){zongjine=zongjine1,danjia=danjia,EX1=1;}
else EX1=0;
qiehuan(); //切换白天夜晚单价
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
danjia2--;
if(danjia2==-1)
danjia2=99;
while(!key2);
delay(5);
while(!k
jisuan(); //计算总金额
keyscan();
if(key0==0) //清零键
init();
}
numwei++;
if(numwei==7)
numwei=0;
}
void keyscan() //键盘扫描
{
if(key3==0) //功能键调节
{
delay(5);
if(key3==0)
inter=0;
EA=1; //开总中断
EX1=1; //开外部中断1
IT1=1; //触发方式下降沿
TMOD=0xΒιβλιοθήκη 1; TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
ET0=1; //开定时
sbit SCL=P2^2;
uint inter,aa,bb,temp,temp1,numwei;
uint zongjine,licheng,dengdai;
uint zongjine1,licheng1;
uint key3num,qiehuantemp,delaytemp;
uchar danjia1,danjia2,danjia3,danjia,qibu;
if(key3==0)
{
key3num++;
while(!key3);
delay(5);
while(!key3);
}
}
}
}
}
}
void init()
{
zongjine=0;
licheng=0;
danjia=0;
bb=0; //判断是否等待的时基个数
器T0中断
TR0=1; //开定时器T0
P3=0x08;
P0=table[0];
}
void jisuan()
{
if(licheng>3)
zongjine1=qibu+(licheng-3)*danjia+dengdai*danjia3; //金额计算
{
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
display();
bb++;
temp1=licheng; //测试是否进入等待
if(bb==10000) //10s无反应进入等待计费
{
if(key1==0)
{
delay(5);
if(key1==0)
{
qibu++;
if(qibu==
100)
qibu=0;
while(!key1);
delay(5);
while(!key1);
void delay(uint x) //延时时基为1ms
{
int i,j;
for(i=x;i>0;i--)
for(j=340;j>0;j--);
}
void display() //数码管显示
{
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();_nop_();};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit exter=P3^3; //外部中断
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//数码管动态显示
switch(numwei)
{
case 0:P3=0xfe;P0=table[zongjine/100];break;
case 1:P3=0xfd;P0=table[zongjine%100/10]+0x80;break;
case 2:P3=0xfb;P0=table[zongjine%100%10];break;
else
zongjine1=qibu+dengdai*danjia3; //起步公里内金额计算
}
void qiehuan()
{
if(key1==0) //白天夜晚切换
{
delay(5); //键盘防抖
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
qibu--;
if(qibu==-1)
qibu=99;
while(!key2);
delay(5);
while(!key2);
}
}
danjia3=99;
while(!key2);
delay(5);
while(!key2);
}
}
zongjine=300;
licheng=0;
danjia=danjia3;
}
if(key3num==4) //调起步价
if(key1==0)
{
danjia3++;
if(danjia3==100)
danjia3=0;
while(!key1);
delay(5);
while(!key1);
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
danjia3--;
if(danjia3==-1)
{
bb=0;
if(temp&&temp1)
dengdai++;
temp=licheng;
}
}
}
}
void inter1() interrupt 2 //脉冲中断
{
inter++;
if(inter==50)
{
inter=0;
licheng++;