1、 毕业论文设计课题名称: 基于单片机出租车的计价器30 / 31毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作与取得的研究成果。据我所知,除文中已经注明引用的容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示意。 作者签名: 日期:毕业论文(设计)授权使用说明本论文(设计)作者完全了解红河学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图
2、书馆被查阅。学校可以公布论文(设计)的全部或部分容。的论文(设计)在解密后适用本规定。 作者签名: 指导教师签名:日期: 日期:目 录1 绪论32 系统设计要求与功能42.1 设计要求42.2 系统主要功能43 系统方案选择与论证53.1 总体方案设计53.1.1 总体方案选择与论证53.1.2 总体设计框图53.2 部分芯片选择与论证53.2.1 单片机选择与论证53.2.2 显示部分方案选择与论证64 硬件电路设计74.1 系统芯片概述74.1.1 单片机概述74.1.2 数码管概述84.1.3 74LS373芯片概述104.1.4 74HC245概述104.2 系统电路设计124.2.1
3、 主控电路设计124.2.2 驱动电路设计124.2.3 显示部分电路设计135 软件设计146 系统调试与结果分析156.1 系统调试156.2 性能分析15总结16参考文献17致18附件19出租车计价器的设计与制作摘要:该设计的是一个基于单片机STC89C52的出租车自动计费系统,附有复位电路,时钟电路,键盘电路等。复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。在上电时四位数码管显示最初的起步价,通过按键可以调整起步价,总收费由起步价、里程收费和等待时间收费组成。通过按键模拟出租车的
4、运行,停止。在数码管上可以显示运行的时间,运行时暂停的时间,通过计算可以得出总共的费用和总的路程。设计中是以STC89C52单片机为核心控制器,配以简单的按键显示电路,最终实现了模拟出租车计价器的设计。关键词:单片机STC89C52,数码管,出租车计价器Abstract:This design is a based on microcontroller STC89C52 cab design, automatic billing with reset circuit, clock circuit, keyboard circuit, etc. Is reset circuit of singl
5、e chip microcomputer initialization operation, in addition to the normal initial non-greeks, for out of the woods, by reset circuit can start again. The clock circuit adopts 12 MHZ crystal vibration, as the system clock source, has higher accuracy. When the electricity four digital tube display the
6、original fare, mileage charge two, through the button can adjust the fare, mileage charge, waiting time charge. Through button simulation run of the taxi, stop. On the digital tube can display the running time, suspended at runtime, through calculation can be concluded that the total cost and the to
7、tal distance. Here mainly STC89C52 single-chip microcomputer as the core controller, P0 mouth by digital tube display, P1 mouth pick up keys, through the pressed key input, the P2 mouth by digital tube display how much charge.Keywords:STC89C52 LED The taximeter system 1 绪论汽车计价器是乘客与司机双方的交易准则,它是出租车行业发
8、展的重要标志,是出租车中最重要的工具。它关系着交易双方的利益。具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。因此,汽车计价器的研究也是十分有一个应用价值的。出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。国出租车计价器已经经历了4 个阶段的发展。从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;再从集成电路式到目前的单片机系统设计的出租车计价器。出租车计价器计费是否准确、出租车司机是否作弊才是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。因此怎样
9、设计出一种既能有效防止司机作弊又能方便司机的计价器尤为重要。因此, 本文以单片机STC89C52为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。本次设计的目的在于现在各大中城市出租车行业都已普与自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普与,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普与也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。2 系统设计要求与功能2.1 设计要求设计一个出
10、租车自动计费器,计费包括起步价、行车里程计费和等待时间计费三部分部分,用一个四位数码管显示总金额,运行时间,暂停时间,最大值为999.9元,起步价为8.00元,3Km之起步价计费,超过3Km,设速度为100m/s,1KM增加1.3元,等待时间单价为每分钟1.5元,用四位数码管显示总里程,同时用另一个四位数码管显示计费总额。计费功能费用的计算是按行驶里程收费。设起步价为8.00元。1、当里程3km时,每公里按1.3元计费3、等待累计时间2min时,按1.5元/min计费显示功能1、显示行驶里程:用四位数字显示,显示方式为“XXXX”,单位为km。计程围0-999km,精确到1km。2、显示等候时
11、间:用两位数字显示,显示方式为“XX”,单位为min。计时围0-59min,精确到1min。3、显示总费用:用四位数字显示,显示方式为“XXX.X”,单位为元。计价围0-999.9元,精确到0.1元。2.2 系统主要功能本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价,等待时间计费单价。同时具有运行,停止等状态,可以显示运行的时间,同时可以显示暂停的时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。出租车停止后能够显示行驶的总费用。3 系统方案选择与论证3.1 总体方案设计3.1.1 总体方案选择与论证方案一:采用单
12、片机控制,利用单片机丰富的IO端口,与其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。方案二:采用数字电路控制。采用传感器件,输出脉冲信号过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不稳定,而且不能调节单价,电路不够实用。通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用第一种方案。3.1.2 总体设计框图图1 总体框图3.2 部分芯片选择与论证3.2.1 单片机选择与论证方案一:采用STC89C52单片机作为控制芯片,此芯片使用最普遍,其最大的优点是相
13、对其它单片机价格便宜,很容易买到,此系列的资料非常丰富,并且我们对此单片机的掌握比较好,平常训练经常使用,了解较多。此系列单片机具有以下特点:MCS-52具有一个8位CPU,一个片振荡器与时钟电路,4KB的ROM程序存储器,128字节RAM数据存储器,可寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路,32条可编程的IO线,两个16位的定时/计数器。方案二:采用新华公司的C8051F020,C8051F020不仅处理速度快,容量大而且自带功能齐全。但是其价格比较贵,而且操作复杂。为了节约成本,操作简便,我们采用方案一。3.2.2 显示部分方案选择与论证方案一:采用数码管作为显示部
14、分,数码管显示操作起来简便,价格便宜,适合用来显示数字。方案二:采用液晶显示屏LCD1602显示,液晶显示清晰方便。在本次设计中,我选用数码管作为显示器件。4 硬件电路设计4.1 系统芯片概述4.1.1 单片机概述STC89C52单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。主要特性如下:1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统80512.工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机)3.工作频率围:040MHz
15、,相当于普通8051的080MHz,实际工作频率可达48MHz4.用户应用程序空间为8K字节5.片上集成512字节RAM6.通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8.具有EEPROM功能9.具有看门狗功能10.共3个16位定时器/计数器。即定时器T0、T1、T211.外部中断4路,下降沿中断或低电平触发电路
16、,Power Down模式可由外部中断低电平触发中断方式唤醒12.通用异步串行口(UART),还可用定时器软件实现多个UART13.工作温度围:-40+85(工业级)/075(商业级)14.PDIP封装STC89C52主要功能如下所示:表1 STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能图2 单片机引脚图4.1.2 数码管概述本设
17、计采用两个四位8段数码管,一个LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示09等10个数字和小数点,使用非常广泛。四位数码管可以显示0到9999之间的数字。它的外观如下:图3 四位数码管这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g与dp(小数点);共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g与dp(小数点)。本次设计中采用的是共阳极数码管,如下图所示。图中的8个LED分别与上面那个图中的ADP各段相
18、对应,通过控制各个LED的亮灭来显示数字。图4 共阳极二极管4.1.3 74LS373芯片概述74ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。引脚图如下图5所示:图5 74LS373引脚图1D8D为8个输入端。1Q8Q为8个输出端。G是数据锁存控制端;当G=1时,锁存器输出端同输入端;当G由“1”变为“0”时,数据输入锁存器中。OE为输出允许端;当OE=“0”时,三态门打开;当OE=“1”时,三态门关闭,输出呈高阻状态。当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端C为高电平时
19、,输出Q0Q7 状态与输入端D1D7状态一样;当C发生负的跳变时,输入端D0D7 数据锁入Q0Q7。51单片机的ALE信号可以直接与74LS373的C连接。在MCS-51单片机系统中,常采用74LS373作为地址锁存器使用,其连接方法如上图所示。其中输入端1D8D接至单片机的P0口,输出端提供的是低8位地址,G端接至单片机的地址锁存允许信号ALE。输出允许端OE接地,表示输出三态门一直打开。4.1.4 74HC245概述74HC245是一款高速CMOS器件,74HC245引脚兼容低功耗肖特基TTL(LSTTL)系列。74HC245引脚图如图6所示。74HC245译码器可接受3位二进制加权地址输
20、入(A0, A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。74HC245特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。利用这种复合使能特性,仅需4片74HC245芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC245亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。图6 74HC245引脚图第1脚DIR,为输入输出端口转换用,DIR
21、=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。 第29脚“A”信号输入输出端,A1=B1、A8=B8,A1与B1是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。 第1118脚“B”信号输入输出端,功能与“A”端一样,不再描述。 第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。 第10脚GND,电源地。 第20脚VCC,电源正极。74HC245作用原理于高性能的存贮译码或要求传输延迟时间短的数
22、据传输系统,在高性能存贮器系统中,用这种译码器可以提高译码系统的效率。将快速赋能电路用于高速存贮器时,译码器的延迟时间和存贮器的赋能时间通常小于存贮器的典型存取时间,这就是说由肖特基钳位的系统译码器所引起的有效系统延迟可以忽略不计。74HC245 按照三位二进制输入码和赋能输入条件,从8 个输出端中译出一个 低电平输出。两个低电平有效的赋能输入端和一个高电平有效的赋能输入端减少了扩展所需要的外接门或倒相器,扩展成24 线译码器不需外接门;扩展成32 线译码器,只需要接一个外接倒相器。在解调器应用中,赋能输入端可用作数据输入端。4.2 系统电路设计4.2.1 主控电路设计主控电路主要采用STC8
23、9C52单片机作为主控芯片。主控电路包括复位电路,时钟电路和电源电路。最小应用系统是能维持单片机运行的最简单的配置系统。这种单片机可以提供4个端口,分别是P1、P2、P3、P4,共有40个引脚。由于外部没有存储器扩展,所以EA应接高电平。单片机部存储器容量有限,应用系统开发具有特殊性。单片机在启动运行时需要复位电路,使CPU以与其他功能部件处于一个确定的初始状态,并从这个状态开始工作,另外,在单片机工作过程中,如果出现死机时,也必须对单片机进行按键复位,使其重新开始工作。单片机部虽然有振荡电路,但要形成时钟电路,外部还需附加电路。单片机部时钟电路是利用其部的振荡电路在X1和X2引线上外接定时元
24、件,部振荡电路产生自激振荡。最常用的是在X1和X2之间接晶体振荡器与电路构成稳定的自激振荡器。单片机最常用的晶振可选用振荡频率为12Mz的石英晶体,电容器一般选30pF左右。4.2.2 驱动电路设计由于单片机CPU的数据地址控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。所以单片机P0口接四位数码管接了一个74LS373作为驱动器,单片机的P2口也接了一个74HC245作为驱动器。此部分电路如下图7所示:图7 驱动电路设计4.2.3 显示部分电路设计显示部分采用数码管作为显示器件,整个设计中采用到两个四位数码管,一个显示行车里程,一个显示计费总额。设计此部分电路图如下图
25、8所示:图8 数码管显示部分5 软件设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以与开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的容,分别完成启动、清除、计程和计价等不同的操作。当按下S1时,就启动计价,将根据里程寄存器中的容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来
26、脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。6 系统调试与结果分析6.1 系统调试在进行调试之前,首先要检测电路中各元件是否完整,单片机是否有电。检查完毕后,就可以烧入程序进行调试。在调试中我们可以改变外界的环境,来观察本设计是否符合要求,不断观察结果,再进行改正。在调试中,我也遇到一些问题,通过老师同学的帮助,调试成功。在这次实践中,我自觉自己实力还是不够扎实,今后还要不断努力。6.2 性能分析本作品性能良好,符合本设计要求。出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步
27、和提高。它比市场上的一些计价器使用更方便,功能更全,还具有有效防止司机作弊和系统稳定性好的优点。总结出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能并能够通过数码管显示车费数目。多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。一个月来,经过自己努力,基本上完成了设计要求的容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。经过这一个月的学习,我觉得自己不论是在理论知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。这次设计很好的
28、把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。这在以前的学习过程中是不曾学到的。这次设
29、计是我认真认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设计,是我认识到自己理论知识的应用能力有很大的欠缺,需要在以后的学习中进一步提高。参考文献1 群芳,黄建.单片机微型计算机与接口技术.:电子工业,20012 谭浩强.C程序设计.:清华大学,19913 马淑华,王凤文,美金.单片机原理与接口技术.:邮电大学,20054 迎新.单片微型计算机原理、应用与接口技术.:国防工业,19965 鑫,华臻,书谦.单片机原理与应用.电子工业,2005:110-1366 丁元杰.单片微机实题集与实验指导书.机械工业,2004:124-12
30、57 永昌.单片机外围电路设计.:电子工业,2006致 首先,向本设计的指导老师表示最诚挚的意。在自己紧的工作中,仍然尽量抽出时间对我们进行指导,时刻关心我们的进展状况,督促我们抓紧学习。老师给予的帮助贯串于设计的完全过程,从借阅参考资料到现场的实际操作,他都给予了指导,不仅使我学会运用书本中的知识,更学会了学习操作方法。也懂得了如何把握设计重点,如何合理安排时间和论文的编写,同时在毕业设计过程中,他和我们在一起共同解决了设备出现的各种问题。其次,要向给予此次毕业设计帮助的老师们,以与同学们以诚挚的意,在整个设计过程中,他们也给我很多帮助和无私的关怀,更重要的是为我们提供不少技术方面的资料,在
31、此感他们,没有这些资料就不是一个完整的论文。另外,也向给予我帮助的所有同学表示感。总之,我的设计是老师和同学共同完成的结果,在设计的一个月里,我们合作的非常愉快,教会了我许多道理,是我人生的一笔财富,我再次向给予我帮助的老师和同学表示感。附件附录1:完整原理图附录三:程序#include at89x51.h#include intrins.h#define uchar unsigned charuchar a,b=0,temp=0x01;unsigned char table= 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, / 显示09的
32、代码 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10 /显示0.9.的代码; unsigned char table1= 0x40,0xc0,0xc0,0xc0,0xc0,0x40,0xc0,0xc0; /数码管显示初始化代码int m=0,n=10,ge=0,shi=0,h=0;uchar n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0; / n1、n2n3 表示路程的千米米分米 ;当路程超过10km时,n1 n2 的单位为千米; / n3单位为米;以此类推,当路程超过100km时,n1 n2 n3的单位为千
33、米 / n4 n5 n6 n7 n8 分别表示车费的百十元角分void delay (uchar t) /延时程序 uchar t1,t2;for(t1=0;t110;t1+) for(t2=0;t2t;t2+);void init () /初始化程序P1_3=0;P2=0xff;P0=table10;delay(10);void display () /数码管显示程序 P2_0=1;P0=tablen1+10;delay(1);P2_0=0;P2_1=1;if(h3000) /h的数值要随b变化而变化P0=tablen2;delay(1);P2_1=0;else P0=tablen2+n;d
34、elay(1);P2_1=0; P2_2=1;P0=tablen3;delay(10);P2_2=0; P2_3=1;P0=tablen4;delay(1);P2_3=0;P2_4=1;P0=tablen5;delay(1);P2_4=0; P2_5=1;P0=tablen6;delay(1);P2_5=0; P2_6=1;P0=tablen7;delay(1);P2_6=0; P2_7=1;P0=tablen8;delay(1);P2_7=0;void display1() / 每500米数码管刷新显示程序 n7=n7+8; if(n710) n7=n7; else n7=n7-10; n6
35、+; if(n6=20) / n6=10; n5+; if(n5=10) n5=0;n4+; void main() TMOD=0X01; /定时器初始化 TH0=0X00; TL0=0X00; ET0=1; TR0=1; init();while(1) if( P1_1=0 ) /数据全部清零 EA=0; init();break;if(P1_0=0 ) /开车,计数开始 EA=1; else /停车,显示路程和费用 EA=0; display (); /数码管显示 void int0() interrupt 1 TH0=0X00; TL0=0X00; b+; h+; if(b=3) / h的数值要随b变化而变化,否则程序出错。h=1000b b=0; if(n310) n3+; if(n3=10) n3=0; n2+; if(n2=10)n2=0; n1+; if(n13000 & h3 & n2=0 & n3=0) | (n13 & n2=5 & n3=0)display1();