出租车计价器设计
出租车计价器设计任务书
1.设计目的与要求:
设计出一个用于出租车的计价器。准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能: (一)基本功能:
(1)显示: 可以显示 单价、里程、总金额
(2)停车计费功能:中途因故停车超过5分钟后每分钟按当时单价的50%收费 (3)自动分时计费功能:白天和夜间应能自动更换单价 (二)性能:里程误差小于2% (三)扩展功能: (1)可增加时钟功能
(2)可增加数据掉电保护功能 2.设计内容:
(1)画出电路原理图,正确使用逻辑关系; (2)确定元器件及元件参数; (3)进行电路模拟仿真; (4)SCH文件生成与打印输出; (5)PCB文件生成与打印输出; 3.编写设计报告:
写出设计的全过程,附上有关资料和图纸,有心得体会。
目 录
1引言……………………………………………………………………………………1 2 出租车计价器设计要求及设计方案………………………………………………1 2.1 设计思路……………………………………………………………………………1 2.2 系统主要功能…………………………………………………………………………2 2.3 总体设计方案…………………………………………………………………………2 2.4 总体设计框图………………………………………………………………………2 3 出租车计价系统的硬件设计…………………………………………………………3 3.1 振荡电路……………………………………………………………………………3 3.2 复位电路……………………………………………………………………………3 3.3 键盘接口电路………………………………………………………………………3 3.4 显示电路……………………………………………………………………………4 3.5 单片机引脚说明……………………………………………………………………4 3.6 LCD1602液晶显示简介………………………………………………………………6 4 出租车计价系统软件设计……………………………………………………………7 4.1 系统主程序…………………………………………………………………………7 4.2 里程计数子程序………………………………………………………………………7 4.3 单价设置子程序 ……………………………………………………………………8 5 总结与体会……………………………………………………………………………8 参考文献……………………………………………………………………………………9 附录1……………………………………………………………………………………9 附录2………………………………………………………………………………………10 附录3……………………………………………………………………………
基于51单片机原理出租车计价器的设计
摘要:现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场是十分有潜力的。
本设计以AT89S51 单片机为中心,利用信号发生器模拟代替霍尔传感器测距,实现对出租车计价统计,输出采用1602液晶显示屏。本电路设计的计价器不但能实现基本的计价,而且还能根据里程或手动来调节单价。通过单片机上的键盘上的按键来执行开始、暂停、复位等功能。步骤如下:首先,程序开始做一些必要的初始化工作,等待键盘输入。然后,启动键S1按下后单片机开始计数传感器传来的计数脉冲,1602液晶显示器显示路程和总费用。最后,当需要停止是可按相应的键S4对路程计数器进行停止。而且还可以按下S2进行等待计时收费和按下S3键进行起步价的调整。
关键词:89S51单片机 1602液晶显示屏 计价器
1引言:
单片机课程设计是单片机技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。出租车能保证乘客快速,轻松的到达目的地。 这些优点受到人们的欢迎。
随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试。而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易地实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。本设计采用AT89C52单片机,辅以按键,实现对出租车的多功能的计价设计,输出采用1062液晶显示屏。本电路设计的计价器不但能实现基本的计价,而且还能根据里程或手动来调节单价。
要将出租车计价系统产品化,应该根据客户不同的需求进行不同的设计,应该在程序中增加一些可以人为改变的参数,以便客户根据不同的需要随时调节单价以及计价方式。因此,研究出租车计价器及扩大其应用,有着非常现实的意义。
2 出租车计价系统的设计要求与设计方案
2.1 设计思路
设计一个出租车自动计费器,计费包括起步价、行车里程计费、等待时间计费三部分,用1602液晶 显示总金额,运行时间,暂停时间,最大值为999元,起步价为6元,3Km之内起步价计费,超过3Km,每一公里增加1元(即1KM增加1元),等待时间单价
为每分钟1元,用液晶显示总里程,同时用液晶显示等待时间。
①计费功能
费用的计算是按行驶里程收费。设起步价为6元。 1、当里程3km时,每公里按1元计费
3、S1为启动按钮、S2等待按钮、S3调整计费按钮、S4停止按钮 ②显示功能
1、显示行驶里程:用三位数字显示,显示方式为“XX.X”,单位为km。计程范围0-99.9km,精确到0.1km。
2、显示等候时间:用两位数字显示,显示方式为“XX”,单位为min。计时范围0-59min,精确到1min。
3、显示总费用:用三位数字显示,显示方式为“XXX”,单位为元。计价范围0-999元,精确到1元。 2.2 系统主要功能
本出租车自动计费,上电后显示最初的起步价,里程计费单价,等待时间计费单价,通过按键可以调节起步价,里程计费单价。同时具有运行,暂停,停止等状态,可以显示暂停的时间,具有累加功能,暂停和运行时间在暂停和运行前一次的状态上计时。出租车停止后能够显示行驶的总费用。 2.3 总体设计方案
采用MCU技术,通过单片机作为主控器,利用1602字符液晶作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节,以下是方案三的系统流程图,本方案主要是必须对于数字电路比较熟悉,成本又不高。方案图如图1所示。 2.4 总体设计框图
图1 总体设计框图
3 出租车计价系统的硬件设计
3.1 振荡电路
单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振荡器。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图2所示。
图2 振荡电路
3.2 复位电路设计
复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图3所示。
图3 复位电路
3.3 键盘接口电路
独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。I/O口内部有上拉电阻时,外部可不接上拉电阻。键盘接口电路如图4所示。
图4 键盘接口电路
3.4 显示电路
对于现实电路我们可以采用数码管,也可以采用液晶显示,液晶又分字符型和点阵型,我们使用的液晶是字符型液晶,并且带字符库的,不需要查找代码。英文字符就可。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的点位器,改变液晶的亮度。显示电路如图5所示。
图5 数码管封装图及数据线与数码管管脚关系
3.5 单片机各引脚功能说明:
AT89S52电路图如图6所示。
图6 AT89S51引脚图
VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行。校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的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”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89S52的一些特殊功能口,P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字
节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.6 LCD1602液晶显示的简介
字符型液晶1602主要技术参数如表7所示:
表7字符型液晶1602主要技术参数
表8 LCD1602接口信号说明
控制器接口说明(HD44780及兼容芯片) 1、 基本操作时序
a 读状态:输入:RS=L, RW=H, E=H 输出:D0—D7=状态字 b 写指令:输入:RS=L, RW=L, D0—D7=指令码 输出:无 E=高脉冲
C 读数据:输入:RS=H, RW=L, E=H 输出:D0—D7=数据
d 写数据:输入:RS=H, RW=L, D0—D7=数据 输出:无 E=高脉冲
4 出租车计价系统的软件设计
4.1 系统主程序
在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化等工作。另外,在主程序模块中还需要设置修改单价的程序。
然后将总金额、里程和单价送数码管显示出来。程序流程如图9所示。
图9 系统主程序流程图 4.2 里程计数子程序
当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果输出在显示屏上。程序流程图如图10所示。
图10里程计数子程序流程图
4.3 单价设置子程序
设置单价时,按下S3键,此时按下S2起步价加一元,按下S4起步价减一元。按下S1键程序跳回等待运行阶段。程序流程图如图11所示
图11 单价设置子程序流程图
5 设计体会与小结
经过这些天有关于出租车计价器的课程设计,使我对单片机的应用有了更深的了解。在课程设计的过程中,还是碰到了许多的问题。比如,对于数码管动态扫描显示、数码管的闪烁和键盘的延时防抖的综合编程不能较好地解决;对于一些相关的应用软件没能熟练掌握。通过这几天晚上的苦想和反复调试,最终还是把问题解决了。
通过这次课程设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高,也充分体会到了自己设计东西的乐趣、学会查阅资料和对别人的东西融会变通的重要性,也明白了很多知识光靠趴在书本上学是学不到其中的精髓的,必须亲自去试着实践,亲自去经历才能对它们真正的掌握。
最大的收获是更清晰了如何有条理的编程。第一个就是流程图,原来不以为然的事现在觉得非常的有必要。第二就是编程顺序,要写一个功能很复杂的程序首先写那些自己可以很快完成的较简单的内容,比如调单价时的闪烁,那么就可以开始只写调一位单价,然后再加入程序可以调两位单价,再然后加入闪烁功能,这样既可以使编程变得更有条理,而且对心态也是很有帮助的。一步一步的完成相应的要求会使自己的心情倍感舒爽而不是一直未能达到要求时的迷茫。
凡事都要自己去动下手,去实践一下,遇到困难,永远不要沮丧气馁。在动手的过程中,不仅能增强实践能力,而且在理论上可以有更深的认识;这次设计给了我极大的鼓舞和信心,相信在以后的学习中可以通过不断的摸索和实践来提高其他方面的知识。 参考文献:
1. 李群芳、张士军、黄建.《单片微型计算机与接口技术》(第三版).电子工业出版社,2008.
2. 张鑫、华臻、陈书谦.《单片机原理及应用》[M].电子工业出版社,2005.
3. 丁元杰、吴大伟.《单片微机实题集与实验指导书》[M].机械工业出版社, 2004.
4. 李群芳,肖看.单片机原理接口与应用.北京:清华大学出版社,2005.
5. 张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1999.
6. 高峰.单片微型应用系统设计及实用技术.北京:机械工业出版社,2004.
附录一:
图12 出租车计价器PCB图
附录二:
图13 出租车计价器仿真图
附录三:
源程序:
CMD EQU 20H
DAT EQU 21H
BIT_RS EQU P2.0
BIT_RW EQU P2.1
BIT_E EQU P2.2
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP IP0
ORG 0030H
MAIN: MOV R0,#30H ;初始化
MOV R1,#06H
MOV R2,#1EH
MOV R3,#00H
MOV R4,#00H
LCALL SHOW
MAIN1: JNB P1.0,RUN ;扫描按键
JNB P1.2,SEZHI
AJMP MAIN1
RUN: LCALL SHOW ;行驶里程计数
MOV TMOD,#60H
MOV TH1,#64H
MOV TL1,#64H
SETB TR1
AGAI: JNB P1.1,WAIT
JNB P1.3,STOP
JBC TF1,LU1
SJMP AGAI
LU1: LCALL LU2
DJNZ R2,RUN
LCALL LU3
AJMP RUN
LU2: INC R3
RET
LU3: INC R1
MOV R2,#0AH
RET
WAIT: 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 R4
INC R1
LCALL SHOW
RET0: MOV TH0,#3CH
MOV TL0,#0B0H
JNB P1.0,RUN
SETB TR0
RETI
SEZHI: JNB P1.1,SEZHI1 ;单价设置
JNB P1.3,SEZHI2
JNB P1.0,RUN
AJMP SEZHI
SEZHI1: LCALL DELAY1
JB P1.1,SEZHI
INC R1
LCALL SHOW
AJMP SEZHI
SEZHI2: LCALL DELAY1
JB P1.3,SEZHI
DEC R1
LCALL SHOW
AJMP SEZHI
STOP: LJMP MAIN
SHOW: MOV A,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,#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,A
MOV R0,#30H
LCALL MAIN2
RET
MAIN2: LCALL INI ;液晶显示
MOV CMD,#80H
LCALL WR_CMD
MOV DPTR,#TAB
MOV R5,#15
WRIN: MOV A,@R0
MOVC A,@A+DPTR
MOV DAT,A
LCALL WR_DATA
LCALL DELAY
INC R0
DJNZ R5,WRIN
MOV CMD,#80H
LCALL WR_CMD
LCALL RD_DATA
MOV CMD,#0C0H
LCALL WR_CMD
LCALL WR_DATA
MOV R0,#30H
RET
INI: MOV CMD,#38H ;
LCALL WR_CMD
MOV CMD,#38H
LCALL WR_CMD
MOV CMD,#38H
LCALL WR_CMD
MOV CMD,#38H
LCALL WR_CMD
MOV CMD,#01H
LCALL WR_CMD
MOV CMD,#06H
LCALL WR_CMD
MOV CMD,#0FH
LCALL WR_CMD
RET
WR_CMD: PUSH ACC
BUSY1: SETB BIT_RW
CLR BIT_RS
SETB BIT_E
LCALL DELAY
MOV P0,#0FFH
MOV A,P0
CLR BIT_E
JB ACC.7,BUSY1
CLR BIT_RW
CLR BIT_RS
MOV A,CMD
MOV P0,A
SETB BIT_E
LCALL DELAY
CLR BIT_E
POP ACC
RET
WR_DATA: PUSH ACC
BUSY2: SETB BIT_RW
CLR BIT_RS
SETB BIT_E
LCALL DELAY
MOV P0,#0FFH
MOV A,P0
CLR BIT_E
JB ACC.7,BUSY2
CLR BIT_RW
SETB BIT_RS
MOV A,DAT
MOV P0,A
SETB BIT_E
液晶屏初始化 ;液晶屏写指令程序 ;液晶屏写数据程序
LCALL DELAY
CLR BIT_E
POP ACC
RET
RD_DATA: PUSH ACC ;液晶屏读显示数据程序 SETB BIT_RW
CLR BIT_RS
SETB BIT_E
LCALL DELAY
MOV P0,#0FFH
MOV A,P0
MOV DAT,A
CLR BIT_E
POP ACC
RET
DELAY: MOV R7,#0 ;
LOP: NOP
NOP
DJNZ R7,LOP
RET
DELAY1: MOV R5,#200
MOV R6,#200
LOP1: DJNZ R5,LOP1
LOP2: DJNZ R6,LOP1
RET
TAB: 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
延时程序 ;延时去抖动程序 小数点,空格