《基于51单片机的出租车计价器设计毕业设计.doc》由会员分享,可在线阅读,更多相关《基于51单片机的出租车计价器设计毕业设计.doc(24页珍藏版)》请在三一办公上搜索。
1、华夏学院单片机原理与接口技术毕业课程设计题 目: 基于51单片机的出租车计价器 学院(系): 信 息 工 程 系 课程设计任务书题 目: 基于51单片机的出租车计价器的设计 初始条件:1. 运用所学的单片机原理与接口技术知识和数字电路知识;2. 51单片机应用开发系统一套;3. PC机及相关应用软件;要求完成的主要任务:以目前生活中正在使用的出租车计价器为原型进行设计,要求具有按时间和里程综合计算车价的功能,能显示时间、里程、单价、总车价等相关信息。1. 完成出租车计价器的设计和调试。 2. 撰写课程设计说明书,说明书使用A4打印纸计算机打印,用Protel等绘图软件绘制电子线路图纸。时间安排
2、:第1周 下达课程设计任务书和日程安排,调研和查找资料,明确设计任务要求;第2周 完成方案论证、总体设计和硬件设计;第3周 完成软件设计和程序的编写; 第4周 调试硬件系统和软件程序,完成整个系统的设计和调试; 结果分析整理、撰写课程设计报告,验收和答辩。 指导教师签名: 2011 年 11 月 28 日系主任(或责任教师)签名: 2011 年 11 月 28 日基于51单片机原理出租车计价器的设计 摘要 现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所
3、以未来汽车计价器的市场还是十分有潜力的。本设计以 89S51 单片机为中心,利用信号发生器模拟代替霍尔传感器测距,实现对出租车计价统计,输出采用1602液晶显示屏。本电路设计的计价器不但能实现基本的计价,而且还能根据里程或手动来调节单价。通过单片机上的键盘上的按键来执行开始、暂停、复位等功能。步骤如下:首先,程序开始做一些必要的初始化工作,等待键盘输入。然后,启动键S1按下后单片机开始计数传感器传来的计数脉冲,1602液晶显示器显示路程和总费用。最后,当需要停止是可按相应的键S4对路程计数器进行停止。而且还可以按下S2进行等待计时收费和按下S3键进行起步价的调整。关键词:89S51单片机 16
4、02液晶显示屏 计价器目录前 言1第一章 出租车计价系统的设计要求与设计方案21.1出租车计价器设计要求21.2系统主要功能21.3方案论证与比较2第二章 出租车计价系统的硬件设计42.1 振荡电路42.2 复位电路设计42.3 键盘接口电路42.4 显示电路52.5 路程测量部分52.6 单片机各引脚功能说明62.7 1602液晶的简介7第三章 出租车计价系统的软件设计103.1系统主程序103.2里程计数子程序103.3等待计时子程序113.4单价设置子程序11第四章 设计体会与小结12参考文献13附 录14源程序14硬件电路图19前 言单片机课程设计是单片机技术学习中非常重要的一个环节,
5、是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。出租车能保证乘客快速,轻松的到达目的地。 这些优点受到人们的欢迎。随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。本设计采用AT89C52单片机,辅以按键,实现对出租车的多功能的
6、计价设计,输出采用1062液晶显示屏。本电路设计的计价器不但能实现基本的计价,而且还能根据里程或手动来调节单价。要将出租车计价系统产品化,应该根据客户不同的需求进行不同的设计,应该在程序中增加一些可以人为改变的参数,以便客户根据不同的需要随时调节单价以及计价方式。因此,研究出租车计价器及扩大其应用,有着非常现实的意义。第一章 出租车计价系统的设计要求与设计方案1.1 出租车计价器设计要求设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用1602液晶 显示总金额,运行时间,暂停时间,最大值为999元,起步价为6元,3Km之内起步价计费,超过3Km,每一公里增加1元(即
7、1KM增加1元),等待时间单价为每分钟1元,用液晶显示总里程,同时用液晶显示等待时间。、 计费功能费用的计算是按行驶里程收费。设起步价为6元。1、当里程3km时,每公里按1元计费3、等待累计时间1min时,按1元/min计费4、S1为启动按钮、S2等待按钮、S3调整计费按钮、S4停止按钮、显示功能1、显示行驶里程:用三位数字显示,显示方式为“XX.X”,单位为km。计程范围0-99.9km,精确到0.1km。2、显示等候时间:用两位数字显示,显示方式为“XX”,单位为min。计时范围0-59min,精确到1min。3、显示总费用:用三位数字显示,显示方式为“XXX”,单位为元。计价范围0-99
8、9元,精确到1元。1.2 系统主要功能本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价。同时具有运行,暂停,停止等状态,可以显示暂停的时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。出租车停止后能够显示行驶的总费用。1.3 方案论证与比较方案一:采用数字电子技术,利用555定时芯片构成多谐振荡器,或采用外围的晶振电路作为时钟脉冲信号,采用计数芯片对脉冲尽心脉冲的计数和分频,最后通过译码电路对数据进行译码,将译码所得的数据送给数码管显示,一下是该方案的流程框图,方案一如图1-1所示:图1-1方案一案二:采用EDA技术
9、,根据层次化设计理论,该设计问题自顶向下可分为分频模块,控制模块 计量模块、译码和动态扫描显示模块,其系统框图如图1-2所示:图1-2方案二方案三:采用MCU技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1-3所示:图1-3方案三方案总结:通过各个方案的比较,本次采用方案三,不但控制简单,而且成本低廉,设计电路简单。第二章 出租车计价系统的硬件设计2.1振荡电路单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTA
10、L2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。 振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2-1所示:图2-1振荡电路2.2复位电路设计复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RE
11、RST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图2-2所示。图2-2 AT89C51引脚配置2.3键盘接口电路独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。键盘接口电路如图2-3所示:图2-3键盘接口电路2.4显示电路对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶又分字符型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的
12、,不需要查找代码。英文字符就可。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的点位器,改变液晶的亮度。显示电路如图2-4所示:图2-4 数码管封装图及数据线与数码管管脚关系2.5路程测量部分出租车中需要一个能准确获得车轮转动即路量信号的装置,以得到标准的脉冲信号送入单片机的定时/ 计数器T1 即P3. 5 引脚,利用单片机的T1 的计数功能完成100次的计数后产生一中断来完成路程的测量。(设车轮周长为1 m ,则霍尔传感器每产生100 个脉冲便表示车已行程0. 1 km ,根据际情况在程序中进行设置) 。汽车联轴器按圆周间隔嵌入磁钢,用霍传感器集成芯片A44E 测并输出脉冲,其工作原理如图
13、4 所示,霍尔传感器集成芯片A44E 有信号转换、电压放大、等功能,为增加其抗干扰的能力,经过74L S14 对信号整形后再通过光偶送入P3. 5 引脚。图2-5路程测量电路2.6单片机各引脚功能说明AT89S52电路图如图2-6所示: VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行。校验时,P0输出原码,此时P0外部必须被拉高。图2-6 AT89S52P1口:P1口是
14、一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。 P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉
15、优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址
16、的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP
17、:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.7 1602液晶的简介字符型液晶1602主要技术参数如表2-1所示:显示容量:16*2个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95*4.35(W*H)mm表2-1 字符型液晶160
18、2主要技术参数接口信号说明如表2-2所示:编号符号引脚说明编号符号引脚说明1Vss电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4Rs数据/命令选择端(H/L)12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极表2-2 1602接口信号说明控制器接口说明(HD44780及兼容芯片)1、 基本操作时序a 读状态:输入:Rs=L, Rw=H, E=H 输出:D0D7=状态字b 写指令:输入:Rs=L,
19、 Rw=L, D0D7=指令码 输出:无 E=高脉冲C 读数据:输入:Rs=H, Rw=L, E=H 输出:D0D7=数据d 写数据:输入:Rs=H, Rw=L, D0D7=数据 输出:无 E=高脉冲状态字说明如表2-3所示:STA7D7STA6D6STA5 D5STA4 D4STA3 D3STA2 D2STA1 D1STA0 D0表2-3状态字说明(a)STA0-6当前数据地址指针的数值STA7读写操作使能1:禁止 0:允许表2-4 状态字说明(b)注:对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0RAM地址映射图控制器内部带有80*8位的RAM缓冲区,对应关系如下图2-5所
20、示:表2-5 RAM地址映射图LCD16字*2行000102030405060708090A0B0C0D0E0F1027404142434445464748494A4B4C4D4E4F5067显示模式设置如表2-6所示:指令码功能00111000设置16*2显示,5*7点阵,8位数据接口表2-6 显示模式设置指令码功能00001DCBD=1 开显示; D=0 关显示C=1 显示光标; C=0 不显示光标B=1 光标闪烁; B=0 光标不显示000001NSN=1 当读或写一个字符后地址指针加一,且光标加一N=0 当读或写一个字后地址指针减一,且光标减一S=1 当写一个字符后,整屏显示左移(N=
21、1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0 当写一个字符,整屏显示不移动表2-7 显示开关及光标设置数据控制控制器内部没有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM。第三章 出租车计价系统的软件设计3.1 系统主程序在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化等工作。另外,在主程序模块中还需要设置修改单价的程序。然后将总金额、里程和单价送数码管显示出来。程序流程如图所示。NNYY开始程序初始化显示S1按下?S3按下?里程计数子程序单价设置子程序3.2 里程计数子程序当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行
22、驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果输出在显示屏上。启动等待计时子程序停止计数加0.1总计费加一元S2按下?S4按下?满0.1km?路程=3km?重置路程为1kmNNYYNYYN3.3 等待计时子程序中途等待时,产生计时,当时间超过等待设定值时,开始进行计价,并把等待价格加到总金额里。YNYN等待计时时间满1min?时间计数加一时间计数加一S1按下?运行里程计价3.4 单价设置子程序设置单价时,按下S3键,此时按下S2起步价加一元,按下S4起步价减一元。按下S1键程序跳回等待运行阶段。YYYNNN设置S2按下?S2按下?S
23、2按下?起步价加一元起步价减一元运行 第四章 设计体会与小结 经过这些天有关于出租车计价器的课程设计,使我对单片机的应用有了更深的了解。在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示、数码管的闪烁和键盘的延时防抖的综合编程不能较好地解决;对于一些相关的应用软件没能熟练掌握。通过这几天晚上的苦想和反复调试,最终还是把问题解决了。通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历
24、才能对它们真正的掌握。最大的收获是更清晰了如何有条理的编程。第一个就是流程图,原来不以为然的事现在觉得非常的有必要。第二就是编程顺序,要写一个功能很复杂的程序首先写那些自己可以很快完成的较简单的内容,比如调单价时的闪烁,那么就可以开始只写调一位单价,然后再加入程序可以调两位单价,再然后加入闪烁功能,这样既可以使编程变得更有条理,而且对心态也是很有帮助的。一步一步的完成相应的要求会使自己的心情倍感舒爽而不是一直未能达到要求时的迷茫。凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在
25、以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。参考文献1. 李群芳、张士军、黄建.单片微型计算机与接口技术(第三版).电子工业出版社,2008.2. 张鑫、华臻、陈书谦单片机原理及应用M电子工业出版社,2005 3. 丁元杰、吴大伟单片微机实题集与实验指导书M机械工业出版社, 20044. 李群芳,肖看.单片机原理接口与应用.北京:清华大学出版社,2005.5. 张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1999.6. 高峰.单片微型应用系统设计及实用技术.北京:机械工业出版社,2004.附 录 源程序 ORG 0000H AJMP MAIN ORG 000
26、BH AJMP IP0 ORG 0030HCMD EQU 20HDAT EQU 21HBIT_RSEQU P2.0BIT_RW EQU P2.1BIT_E EQU P2.2MAIN: MOV R0,#30H ;初始化 MOV R2,#1EH MOV R3,#00H MOV R4,#00H MOV R1,#06H LCALL SHOWMAIN1: JNB P1.0,RUN ;扫描按键 JNB P1.2,SEZHI AJMP MAIN1RUN: LCALL SHOW ;行驶里程计数 MOV TMOD,#60H MOV TH1,#64H MOV TL1,#64H SETB TR1AGAI: JNB
27、P1.1,WAIT JNB P1.3,STOP JBC TF1,LU1 SJMP AGAILU1: LCALL LU2 DJNZ R2,RUN LCALL LU3 AJMP RUNLU2: INC R3 RETLU3: INC R1 MOV R2,#0AH RETWAIT: MOV TMOD,#01H ;等待时间计数 MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV R5,#28H MOV R6,#1EH SETB TR0 SJMP $IP0: DJNZ R5,RET0 MOV R5,#28H DJNZ R6,IP0 MOV R6,#1EH INC
28、 R4 INC R1 LCALL SHOWRET0: MOV TH0,#3CH MOV TL0,#0B0H JNB P1.0,RUN SETB TR0 RETISEZHI: JNB P1.1,SEZHI1 ;单价设置 JNB P1.3,SEZHI2 JNB P1.0,RUN AJMP SEZHISEZHI1: LCALL DELAY1 JB P1.1,SEZHI INC R1 LCALL SHOW AJMP SEZHISEZHI2: LCALL DELAY1 JB P1.3,SEZHI DEC R1 LCALL SHOW AJMP SEZHISTOP: LJMP MAINSHOW: MOV A
29、,R3 ;显示 MOV B,#64H DIV AB MOV R0,A ;里程显示 INC R0 MOV A,#0AH XCH A,B DIV AB MOV R0,A INC R0 MOV R0,#0AH INC R0 MOV A,B MOV R0,A INC R0 MOV R0,#0BH INC R0 MOV R0,#01H ;里程单价显示 INC R0 MOV R0,#0BH INC R0 MOV A,R4 ;等待时长显示 MOV B,#0AH DIV AB MOV R0,A INC R0 MOV A,B MOV R0,A INC R0 MOV R0,#0BH INC R0 MOV R0,#
30、01H ;等待1min单价显示 INC R0 MOV R0,#0BH INC R0 MOV A,R1 ;总价显示 MOV B,#64H DIV AB MOV R0,A INC R0 MOV A,#0AH XCH A,B DIV AB MOV R0,A INC R0 MOV A,B MOV R0,AMOV R0,#30H LCALL MAIN2 RETMAIN2: LCALL INI ;液晶显示 MOV CMD,#80HLCALL WR_CMDMOV DPTR,#TABMOV R5,#15 WRIN:MOV A,R0 MOVC A,A+DPTRMOV DAT,ALCALL WR_DATALCAL
31、L DELAYINC R0DJNZ R5,WRINMOV CMD,#80HLCALL WR_CMDLCALL RD_DATAMOV CMD,#0C0HLCALL WR_CMDLCALL WR_DATAMOV R0,#30HRETINI: MOV CMD,#38H ;液晶屏初始化 LCALL WR_CMDMOV CMD,#38HLCALL WR_CMDMOV CMD,#38HLCALL WR_CMDMOV CMD,#38HLCALL WR_CMDMOV CMD,#01HLCALL WR_CMDMOV CMD,#06HLCALL WR_CMDMOV CMD,#0FHLCALL WR_CMDRETW
32、R_CMD: PUSH ACC ;液晶屏写指令程序BUSY1: SETB BIT_RW CLR BIT_RSSETB BIT_ELCALL DELAYMOV P0,#0FFHMOV A,P0CLR BIT_EJB ACC.7,BUSY1CLR BIT_RWCLR BIT_RSMOV A,CMDMOV P0,ASETB BIT_ELCALL DELAYCLR BIT_EPOP ACCRETWR_DATA: PUSH ACC ;液晶屏写数据程序BUSY2: SETB BIT_RW CLR BIT_RSSETB BIT_ELCALL DELAYMOV P0,#0FFHMOV A,P0CLR BIT_
33、EJB ACC.7,BUSY2CLR BIT_RWSETB BIT_RSMOV A,DATMOV P0,ASETB BIT_ELCALL DELAYCLR BIT_EPOP ACCRETRD_DATA: PUSH ACC ;液晶屏读显示数据程序 SETB BIT_RW CLR BIT_RSSETB BIT_ELCALL DELAYMOV P0,#0FFHMOV A,P0MOV DAT,ACLR BIT_E POP ACC RETDELAY: MOV R7,#0 ;延时程序LOP: NOP NOPDJNZ R7,LOPRETDELAY1: MOV R5,#200 ;延时去抖动程序 MOV R6,
34、#200LOP1: DJNZ R5,LOP1LOP2:DJNZ R6,LOP1RETTAB: DB 30H,31H,32H,33H,34H,35H ;0,1,2,3,4,5 DB 36H,37H,38H,39H,2EH,20H ;6,7,8,9,小数点,空格END硬件电路图本科生课程设计成绩评定表姓 名郑兵性 别男专业、班级自动化1081课程设计题目:基于51单片机的出租车计价器的设计课程设计答辩或质疑记录:成绩评定依据:设计方案与内容(20分)制作与调试(30分)说明书内容与规范程度(20分)答 辩(20分)学习态度与考勤(10分)总 分(100分)最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日