2出租车计价器.docx
摘要本设计采纳STC89C52单片机为主控器,并用霍尔传感器检测电机转盘转动模拟车速,实现对出租车的多功能的计价设计,输出采纳8段数码显示管。本电路设计的计价器可以实现要单程,来回和中途等待来调整计费,并且能够记录等待时间。出租车计价是依据车所行驶的路程以及乘客乘车的方式综合确定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。运用霍尔传感器便利地计量车轮旋转的圈数。输出的脉冲信号被接入到STC89C52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度,在速度低于5公里每小时是进入等待计费。于此同时,依据不同的收费标准,通过选择相应的起步价、单价等收费标准进行计算。通过键盘能够实现来回设置,启动、暂停、停止计价器以及切换显示当前的行驶里程和需支付的车费。本设计硬件电路总体可以分为五个单元:单片机最小系统单元,指示灯电路单元,按键电路单元,路程时间与金额显示单元,转速信号接收单元。软件系统可以大致分为五个大的模块为:总初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块。其中,键盘扫描和数码管显示采纳查询方式,转速信号接收与等待记时采纳中断方式。这些软硬件系统构成了最终的设计。关键字:多功能计价器STC89C52霍尔传感器显示切换书目1概述11.l功能要求11.2 设计参数11.3 系统原理12系统总体方案及硬件设计22.1 系统总体方案22.2 单片机最小系统单元22.3 转动信号采集单元42.4 显示单元52.5 键盘与指示单元53软件设计73.1 总体流程73.2 计算模块73.3 键盘扫描83.4 显示程序84Proteus软件仿真95课程设计体会10参考文献10附1源程序代码12附2系统原理图191.1功能要求(1)能显示里程,单位为公里,最终一位为小数位。(2)能显示金额数,单位为元,最终一位为小数位。(3)可设定单程价格和来回价格,单程价格为2元/公里,来回价格为1.5元/公里。(4)车速5公里/小时的时间累积为总等待时间,每5分钟等待时间相当于里程数增加1公里。(5)起步公里数为3公里,价格为5元,若实际距离大于3公里,按规则3计算价格。(6)按暂停键,计价器可暂停计价,按查询键,可显示总等待时间。1.2 设计参数由于要求没有给出车轮的相关参数,所以这里进行一些基本参数的查询。据调查统计,现行出租车轮胎直径大致有四种,直径分别为52Omm、540mm、560mm和580mm.本作品针对56Omm的出租车进行设计。它的周长为:1.7584m,57圈行驶100m.1.3 系统原理出租车计价是依据车所行驶的路程以及乘客乘车的方式综合确定的。出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。即可计算得到车轮旋转几周出租车能行驶一公里的路程。运用霍尔传感器便利地计量车轮旋转的圈数。输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程,并且可以计算实时的速度,在速度低于5公里每小时是进入等待计费。于此同时,依据不同的收费标准,通过选择相应的起步价、单价等收费标准进行计算。通过键盘能够实现来回设置,启动、暂停、停止计价器以及切换显示当前的行驶里程和需支付的车费。本设计硬件电路分为五个单元:单片机最小系统单元,指示灯电路单元,按键电路单元,路程时间与金额显示单元,转速信号接收单元。软件系统分为五个大的模块为:总初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块。其中,键盘扫描和数码管显示采纳查询方式,转速信号接收与等待记时采纳中断方式。这些软硬件系统构成了最终的设计。2系统总体方案及硬件设计2.1 系统总体方案本设计可以分为五个单元,单片机最小系统单元,指示灯电路单元,按键电路单元,路程时间与金额显示单元,转速信号接收单元,如下图:指示灯电路|i/K/1YAT89S52/单片机f/1)路程/等待时间显示)计费金额显示)转速信号接收电路2.2 单片机最小系统单元主控机系统采纳了Atmel公司生产的AT89S52单片机,它含有256字节数据存储器,内置8K的电可擦除F1.ASHROM,可重复编程,大小满意主控机软件系统设计。AT89S51芯片的40个引脚功能为:VCC电源电压。GND接地。RST复位输入。当RST变为高电平并保持2个机器周期时,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFRAUXR的DlSRTO位(地址8EH)可打开或关闭该功能。DISKRTO位缺省为RESET输出高电平打开状态。XTA1.l反向振荡放大器的输入及内部时钟工作电路的输入。XTA1.2来自反向振荡放大器的输出。PO一组8位漏极开路型双向I/O口。也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TT1.逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FlaSh编程时,PO接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。Pl口一个带内部上拉电阻的8位双向I/O11,P1的输出缓冲级可驱动(汲取或输出电流)4个H1.逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口运用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。FIaSh编程和程序校验期间,Pl接收低8位地址。P2口一个带内部上拉电阻的8位双向I/OoPl的输出缓冲级可驱动(汲取或输出电流)4个TT1.逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口运用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不变更。FlaSh编程和程序校验期间,P2亦接收低8位地址。P3口一个带内部上拉电阻的8位双向I/O口0P3的输出缓冲级可驱动(汲取或输出电流)4个TT1.逻辑门电路。对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。作输入端口运用时,被外部拉低的P3口将用上拉电阻输出电流。P3除了作为一般的I/O口线外,还作特别功能口。原理图如下:2.3 转动信号采集单元转动信号采集是利用霍尔传感器来实现的,转轮每转动一周,霍尔传感器发出一个脉冲,然后发给单片机的外部中断O端口P3.2,通过中断来接受传感器的P3.2AT89S52霍尔传感器信号。2.4 显示单元采纳两个四个一组的八位数码管来显示,组显示金额,另一组显示路程与等待时间协作按键来切换。数据端都用单片机PI口,片选端分别接在P2口的高四位和低四位。它们的连线如下:-时间潞程金额HHHCJJ23456J9*"12J<56J0.0.0.0.0.0.0.0.ZZZZZZZZ)p)p)p)p)p)p)p)p)p)p)p)p)p)p)p)pM1234567CoSol23452.5键盘与指不单元本设计依据功能要求设置了四个按键和四个1.ED灯。(1)按键说明如下:key系统清零,用来将整个计费系统的显示清零;keyl显示切换,用来切换路程与等待时间的显示;key2单程双程,用来设置是单程还是来回计费;key3系统暂停,用来将整个计费系统暂停;(2)指示灯说明如下:Iedl指示单程还是双程,当选择双程计费时亮;led2指示系统暂停与否,当选择暂停时亮;led3指示是否进入等待计费,计入等待计费时亮;led4指示显示的是路程还是等待时间,显示等待时间时亮。3软件设计3.1 总体流程软件系统可以大致分为五个大的模块为:总初始化模块,按键扫描模块,中断与定时模块,数据计算模块,数码管显示模块。其中,键盘扫描和数码管显示采纳查询方式,转速信号接收与等待记时采纳中断方式。3.2 计算模块计算程序依据里程数分别进入不同的计算公式。假如里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价。对于里程数采纳外部中断零来记录,车轮没转一周,霍尔传感器发一个脉冲然后进入中断子程序,对相应的变量进行更新。对于速度的推断及等待时间的记录采纳定时器零中断,设定IOms一个中断,然后推断车速,小于5公里/小时时,则起先记录等待时间。3.3 键盘扫描键盘扫描才用查询方式,当有按键按下时就对相应的标记进行取反,或调用其他子函数,在消抖过程中,这里将数码管显示程序潜入以保证显示的稳定。3.4 显示程序显示程序利用主函数内的循环,实现动态扫描显示,同时依据数码管余辉和人眼暂留现象,即可实现显示。本设计采纳两个四个一组的八位数码管来显示,一组显示金额,另一组显示路程与等待时间协作按键来切换。数据端都用单片机Pl口,片选端分别接在P2口的高四位和低四位。4Proteus软件仿真将整个系统原理图在Proteus连接好后,下载如编写好的程序仿真如下:RP2U1XTA1.2TESPACM8Iq-*XTA1.1ATB9C51NET-D5po.q,aPO.VADlP0.ZAD2P0.3,AP0AD4P0.5/AD5P0.G'AD6P07/AD739PSENA1.EEAP2.G,A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.aRXDP3.1/7XDP3-2.iINTP3.31NTP3.4/TOP3.S>T1P3.6-WRP3.7/RD"15U1(P3.2lNf)161700H5况。如图显示的状态设置为:单程,车速大于5kmh,当路程等于4.5km时的显示状5课程设计体会经过这些天有关于出租车计价器的课程设计,使我对单片机的应用有了更深的了解。在课程设计的过程中,还是遇到了很多的问题。比如,对于数码管动态扫描显示和键盘的延时防抖的综合编程不能较好地解决;对于代码的前后依次及调用驾驭得还不够好;对于一些相关的应用软件没能娴熟驾驭。通过这几天晚上的苦想和反复调试,以及参考网上的程序,最终还是把问题解决了。通过这次课程设计我们最大的收获就是自己的动手实力和独立解决问题的实力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多学问光靠趴在书本上学是学不到其中的精髓的,必需亲自去试着实践,亲自去经验才能对它们真正的驾驭,凡事都要自己去动下手,去实践一下,遇到困难,恒久不要懊丧气馁。在动手的过程中,不仅能增加实践实力,而且在理论上可以有更深的相识;这次设计给了我们极大的鼓舞和信念,信任在以后的学习中可以通过不断的摸索和实践来提高其他方面的学问。参考文献:1谭浩强著.C程序设计M北京:清华高校出版社,20052张友德、赵志英、涂时亮著.单片微型机原理、应用与试验M.上海:复旦高校出版社,2006.101.3吴戈、李玉峰编著.案例学单片机C语言开发M.北京:人民邮电出版社,2008.104孙余凯.传感器应用电路300例M.北京:电子工业出版社,2008.5田立.51单片机C语言程序设计快速入门M.北京:人民邮电出版社,2007附1源程序代码:include<reg52.h>defineucharunsignedchardefineuintunsignedintucharqianwei,baiwei,shiwei,gewei;显示数据各个位置数字的临时变量charled_seg_code10=0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/段码表示0-9uinttt,aa,round,distance,cost,price,wait;定义路程、价钱、等待时间及一些全局的变量等;uchardengdai,second,minute;unsignedlongwait_ten_ms;记录等待时间多少个IOms按键的定义,全部按键按下去为低电平sbitkeyO=PlO;sbitkeyl=Pll;sbitkey2=Pl2;sbitkey3=Pl3;指示灯的定义sbitledl=Pl4;sbitled2=Pl5;sbitled3=Pl6;sbitled4=Pl7;清零切换路程与等待时间单程还是来回设置/暂停按钮/双程/暂停/堵车切换标记位定义bitkeyl_flag;bitkey2_flag;bitkey3_flag;bitflag;由于按键会自动复位,这个为标记位初始化函数voidinitialization(void)(distance=O;cost=0;second=0;minute=O;wait_ten_ms=O;keyl_flag=l;key2_flag=0;key3-flag=1;flag=O;round=0;dengdai=O;Iedl=O;led2=0;/路程Or等待时间单程Or来回,接指示灯暂停,接指示灯led3=0;led4=0;双程指示暂停指示堵车指示/等待时间切换标记暂停程序voidzanting(void)(if(key3_flag)(EXO=O;关闭中断和定时器TRO=O;)else(EXO=I;TRO=I;)key3_flag=!key3_flag;)计算数据处理voidjisuan()(distance=round/57+wait_ten_ms/3000;车轮转57圈为100m,等待时间30s为100mif(distance<=30)cost=50;rice=20;单程价格if(key2_flag)price=15;来回价格if(distance>3O)cost=price*(distance-30)/10+50;Wait=minute*100+second;显示的协助程序,分别一个数的各个数字voidfenli(uinttemp)数据的分别处理if(tem>9999)temp=9999;qianwei=tem/1000;摘要baiwei=templ00%10;shiwei=temp%100/10;gewei=tem%10;出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志?琴W设中能蕈配县。它关系着交易双方的利益。具有良好性能的计价畿黑湾羯还是乘客来说都是很必要的。因此,汽车计价器voiddiplay_delay(void)的”究也是书分有一个应用价值的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用翻(根弊唉?9桃就用关时间久了会造成接触不良,功能不易实现。而采用单片在进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可%最翳螂现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功%i御械对附的切换,通过软件编程就可以轻易而举的实现。避免了机械开羌带来的不磐因素。另外在本方色中那个使用了点阵的液晶,可以实现更加友好如用酶瞥翩道睾将映喙H即使是成品也可以方便的修改使用界面,更魂斛!雌魏明脚的局面。elsetm(wat);【关键词】出租车计价器单片机控制P2=0xfe;PO=led_seg_codegewei;dilay_delay();P2=0xfd;if(keyl_flag)P0=led_seg_codeshiwei|0x80;假如是路程,点亮小数点儿elsePO=led_seg_codeshiwei;假如是时间,不须要点亮小数点儿diplay_delay();P2=0xfb;if(keyl_flag)PO=led_seg_codebaiwei;elsePO=led_seg_codebaiwei0x80;diplay_delay();P2=0xf7;PO=led_seg_codeqianwei;diplay_delay();/显示价格-fenli(cost);P2=0xef;PO=led_seg_codegewei;dilay_delay();P2=0xdf;P0=led_seg_codeshiwei|0x80;diplay_delay();P2=0xbf;PO=led_seg_codebaiwei;diplay_delay();P2=0x7f;PO=led_seg_codeqianwei;diplay_delay();P2=0xff;/延时时间为ImSvoiddelay(uintx)inti,j;for(i=x;i>0;i)for(j=340>0-);键盘的扫描voidkeyscan()if(keyl=0)/显示切换delay(5);if(keyl=O)key1.fIag=!keyl_flag;while(!key1)led_show();delay(5);while(!key1)led_show();)if(keyO=O)/清零delay(5);if(keyO=O)initial_data();if(key3=O)/暂停delay(5);if(key3=O)zanting();while(!key3)led_show();delay;while(!key3)led_show();if(key2=0)/单程还是来回delay(5);if(key2=0)key2-flag=!key2_flag;while(!key2)led_show();delay(5);while(!key2)led_show();指示等扫描来回亮;ledl=!key2_flag;/指示,单程还是来回,灯低电平点亮;Ied2=key3_flag;/指示,暂停时亮;led3=flag;/指示是否等待;led4=keyl_flag;切换指示,显示路程还是等待时间;diplay_delay();中断及定时器初始化voidinitial_time()TMOD=OxOI;工作在模式1TH0=(65536-10000)/256;T1.0=(65536-10000)%256;IE=0x83;ITO=I;/外部边沿触发方式TRO=I;)/中断记录脉冲数voidzd()interrupt0中断0(aa÷+;if(flag)round+;*定时器*voidtime()interrupt1定时0(TH0=(65536-l0000)/256;/10msT1.0=(65536-10000)%256;tt+;由于发的电机转速较高不宜调,为便利演示,设置每秒转动少于25周进入等待计费,/Is采样实际则可以另外设置if(tt>=100)flag=O;11ag=l;tt=O;if(aa<=25)elseaa=0;if(!11ag)(wait_ten_ms+;dengdai+;if(dengdai=100)dengdai=O;second+;if(second=60)(minute+;second=0;)主程序voidmain(void)/初始化数据初始化定时器(initial_data();initial_time();while(l)(keyscan();jisuan();led_show();附2系统原理图