基于AT89C51单片机的出租车计价器系统的设计.docx
《基于AT89C51单片机的出租车计价器系统的设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的出租车计价器系统的设计.docx(27页珍藏版)》请在冰豆网上搜索。
基于AT89C51单片机的出租车计价器系统的设计
目录
1绪论1
1.1概述1
1.2基本内容1
1.2.1设计任务1
1.2.2设计要求1
1.3系统主要功能2
2硬件设计3
2.1系统的硬件构成及功能3
2.2AT89C51单片机及其引脚说明4
2.3AT24C02引脚图及其引脚功能6
2.4AT24C02掉电存储单元的设计6
2.5里程计算、计价单元的设计7
2.6数据显示单元设计8
3系统的软件设计10
3.1系统主程序设计10
3.2定时中断服务程序12
3.3里程计数中断服务程序12
3.4中途等待中断服务程序12
3.5显示子程序服务程序12
3.6键盘服务程序12
4系统调试与测试结果分析13
4.1使用的仪器仪表13
4.2系统调试14
结束语14
参考文献14
附录15
1绪论
本次基于AT89C51单片机的出租车计价器系统的设计,要求能够对出租车所用的时间进行计时,并且所需的费用用数码管显示出来,更注重它的稳定性和实用性。
主要研究内容包括以下子系统:
电源部分、开关按钮、程序控制部分、时间和价钱显示部分。
1.1概述
计价器显示的营运金额是基于“价格=速度*时间*单价,总价等于其和”的原理来计算的。
出租车计价器通过传感器与行驶车辆连接。
出租汽车的实际里程通过传感器的脉冲信号在计价器里折算成一定的计价营运里程。
目前市场上出租车计价器功能主要有具有数据的复位功能、白天/晚上转换功能、数据输出功能、计时计价功能等等,但存在着太多的不足,容易为司机和顾客之间造成麻烦,基于此,设计一款能够提高抗干扰能力、防作弊能力、掉电保护功能的计价器,以使其功能更加完善。
1.2基本内容
1.2.1设计任务
设计一款基于AT89C51单片机的出租车计价器。
1.2.2设计要求
(1).基本要求
1不同情况具有不同的收费标准。
●白天
●晚上
●途中等待(>10min开始收费)
2能进行手动修改单价。
3具有数据的复位功能。
4IO口分配的简易要求。
●距离检测使用霍尔开关A44E
●白天/晚上收费标准的转换开关
●数据的清零开关
●单价的调整(最好使用+和-按键)
5数据输出(采用LCM103)。
●单价输出2位
●路程输出2位
●总金额输出3位
6按键。
●启动计时开关
●数据复位(清零)
●白天/晚上转换
(2).发挥部分
1能够在掉电的情况下存储单价等数据。
2能够抵抗外界干扰,保证数据稳定、准确。
3语音播报数据信息。
1.3系统主要功能
本文所做的出租车计价器设计由硬件设计和软件设计两部分组成,主要内容包括:
出租车计价器系统的工作原理、出租车计价器系统的硬件电路设计(单片机主电路、里程与计价单元电路、数据存储电路、显示电路、按键电路、语音播报电路、电源电路等)、出租车计价器系统的软件设计(初始化模块、里程及计价换算模块、数据存储模块、按键处理模块、显示模块、语音播报模块等)。
输出采用8段数码显示管。
本电路设计的计价器不但能实现基本的计价,而且还能根据白天、黑夜、中途等待来调节单价,能在掉电的情况下存储数据,防止外界干扰,同时在不计价的时候还能作为时钟为司机同志提供方便。
2硬件设计
本文的硬件设计主要包括单片机AT89C51、A44E霍尔传感器电路、AT24C02掉电存储单元的、里程与计价单元电路、数据存储电路、数据显示电路、按键电路、语音播报电路、电源电路等电路的设计。
在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。
2.1系统的硬件构成及功能
计价器的单片机控制方案图如图1单片机控制方案图所示。
它由以下几个部件组成:
单片机AT89S51、总金额及单价显示部件、键盘控制部件,AT24C02掉电存储控制、里程计算单元、串中显示驱动电路等。
图1单片机控制方案图
2.2AT89C51单片机及其引脚说明
AT89S51是一种低功耗,高性能CMOS8位单片机,片内含4KB的可系统编程的Flash只读程序存储器,器件采用高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器及通用8位微处理器于单片芯片中,既可在线编程(ISP)也可用传统方法进行编程,具有很高的性价比。
图2AT89S51引脚配置
AT89C51芯片的40个引脚功能为:
VCC电源电压。
GND接地。
RST复位输入。
当RST变为高电平并保持2个机器周期时,将使单片机复位。
XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2来自反向振荡放大器的输出。
P0口一组8位漏极开路型双向I/O口,即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节;在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,P1接收低8位地址。
P1口部分端口引脚及功能如表1P1口特殊功能所示。
表1P1口特殊功能
P1口引脚
特殊功能
P1.5
MOSI(用于ISP编程)
P1.6
MOSI(用于ISP编程)
P1.7
SCK(用于ISP编程)
P2口带内部上拉电阻的8位双向I/O口。
基本功能与P1口基本相同,只是在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变,Flash编程和程序校验期间,P2亦接收低8位地址。
P3口带内部上拉电阻的8位双向I/O口。
基本功能与P1、P2口基本相同,不再累述。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2P3口特殊功能所示。
P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。
表2P3口特殊功能
P3口引脚
特殊功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
PSEN/程序储存允许输出,是外部程序存储器的读先通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN/信号。
EA/VPP外部访问允许。
欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
Flash存储器编程时,该引脚加上+12V的编程电压VPP。
2.3AT24C02引脚图及其引脚功能
图3AT24C02引脚配置图
AT24C02芯片DIP封装,共有8个引脚,其中:
A2~A0地址引脚;
SDA、SCLI2C总线接口;
WP写保护引脚,WP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;
VCC电源端
GND接地端
2.4AT24C02掉电存储单元的设计
掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。
AT24C02是2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),而且采用8脚的DIP封装,使用方便。
其电路如图4掉电存储电路原理图所示。
图4掉电存储电路原理图
图中R8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。
每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息读到缓存单元中,供主程序使用。
2.5里程计算、计价单元的设计
里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。
其原理如图5传感器测距示意图所示。
图5传感器测距示意图
由于A44E属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
A44E集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压VCC时,经稳压器稳压后加在霍耳电势发生器的两端,根据霍耳效应原理,当霍耳片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍耳电势差HV输出,该HV信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点(即BOP)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。
当施加的磁场达到释放点(即BrP)时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍耳开关完成了一次开关动作。
我们选择了P3.2口作为信号的输入端,内部采用外部中断0(这样可以减少程序设计的麻烦),车轮每转一圈(我们设车轮的周长是1米),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到1000次时,也就是1公里,单片机就控制将金额自动的增加,其计算公式:
当前单价×公里数=金额(和上面有出入)。
2.6数据显示单元设计
由于设计要求有单价(2位)、路程(2位)、总金额(3位)显示输出,加上我们另外扩展了时钟显示(包含时分秒的显示),采用LCD液晶段码显示,在距离屏幕1米之外就无法看清数据,不能满足要求,而且在白天其对比度也不能够满足要求,因此我们采用6位LED数码管的分屏显示,如图6采用6位LED数码管的分屏显示所示:
时钟显示(图中显示为12点0分46秒)
图6采用6位LED数码管的分屏显示
数据的分屏的显示是通过按键S1来实现切换的,如图七
图7S1切换显示屏
在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总的里程
的时候,就可以按下S1切换到里程和单价显示屏,供客户查询。
显示电路的电路原理图如图8显示器原理图所示。
图8显示器原理图
从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。
移位寄存器74HC164还兼作数码管的驱动,插头1(header1)接电源,插头2(header2)接数据和脉冲输出端。
电路中的三个整流管D1~D3的作用是降低数码管的工作电压,增加其使用寿命。
3系统的软件设计
本系统的软件设计主要可分为主程序模块、里程及计价换算模块、数据存储模块、键盘处理模块、显示模块、语音播报模块、定时计数中断模块、中途等待中断服务模块等几大模块。
3.1系统主程序设计
在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
主程序流程图如图9所示。
图9主程序流程图
3.2定时中断服务程序
在定时中断服务程序中,每100ms产生一次中断,当产生10次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。
其程序流程如图10所示。
3.3里程计数中断服务程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000次时,使微机进入里程计数中断服务程序中。
在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。
3.4中途等待中断服务程序
当在计数状态下霍尔开关没有输出信号,片内的T1定时器便被启动,每当计时到达10分钟,就对当前金额加上中途等待的单价,以后每十分钟都自动加上中途等待的单价。
当中途等待结束的时候,也就自动切换到正常的计价。
3.5显示子程序服务程序
由于是分屏显示数据,所以就要用到4个显示子程序,分别是:
时分秒显示子程序(HMS_DIS)、金额单价显示子程序(CP_DIS)、路程单价显示子程序(DP_DIS)、单价调节子程序(PA_DIS)。
3.6键盘服务程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。
如图9主程序流程图,图10定时中断服务程序。
图10定时中断服务程序
4系统调试与测试结果分析
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
测试包括里程计价测试、掉电存储测试测试。
4.1使用的仪器仪表
数字万用表 DT9203
单片机仿真器 WAVE6000
烧写器GF2100
双踪稳压稳流电源 DH1718E-5
数字示波器 TDS1002
4.2系统调试
根据系统设计方案,本系统的调试共分为三大部分:
硬件调试,软件调试和软硬件联调。
由于在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试。
结束语
本款出租车计价器比目前市场现在的增加了不少功能,其中包括单价输出、单价调整、路程输出、显示当前的系统时间、语音播报数据信息等功能。
另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。
通过本次课程设计,又使我学到了许多书本上无法学到的知识,也使也深该体会到单片机技术应用领域的广泛,不仅使我对学过的单片机知识有了很多的巩固,同时也对单片机这一门课程产生了更大的兴趣。
在本次课程设计过程中,我学会了在网络上查找有关本设计的各硬件的资源,其中包括:
AT89C51单片机及其引脚说明、AT24C02引脚图及其引脚功能等,为本次课程设计提供了一定的资料。
由于平时很少进行课程设计,所以对于课程设计报告的格式也是近期才接触到,经过这两次的设计,为我们以后毕业设计的制作也奠定了一定的基础。
参考文献
1陈爱文.基于AT89C51单片机的多功能出租车计价器.机电工程技术,2008,37(11):
16-17
2张颖.多功能出租车计价器的设计.计算机与信息技术,2009,(9):
24-25
3李光第,朱月秀.单片机基础.北京:
北京航空航天大学出版社,2004
4陈小忠.单片机接口技术实用子程序.北京:
人民邮电出版社,2003
5李光飞.单片机课程设计实例指导.北京 :
北京航空航天大学出版社,2004
6靳达编.单片机应用系统开发实例导航.北京:
人民邮电出版社,2002
7刘锐.单片机在智能充电器中的应用.四川师范大学学报,1999,(11):
273~28
8刘胜利.现代高频开关电源实用技术.北京:
电子工业出版社,2001
9何立民.单片机应用技术选编.北京:
北京航空航天大学出版社,2000
附录
1.总体设计电路图
多功能出租车计价器总体电路图
(1)S1按键的功能
在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总的里程的时候,就可以按下S1切换到里程和单价显示屏,供客户查询。
(2)S2按键的功能
在按下S1按键之后,若接着按下S2键则进行单价调整(默认为调整白天单价),当接着按下S1时,则进行晚上单价调,再次按下S1可进行中途等待单价调整。
当单价调整结束后,可以通过过按下S2按键进行时间调整,默认为调整时,接着按下S1可进行调整分,分调整后再接下S1可进行秒调整。
当时调整完成后,若接着按下S2则又可进行单价调整。
(3)S3按键的功能
在显示金额及单价时,若按下S3键则显示路程和单价,再次按下S3,可返回显示金额及单价。
(4)S4按键的功能
在按下S1按键之后,若接着按下S4按键,则进行设定默认晚上单价,并启动计价器,若没有按下S4则可设定默认单价(白天),并启动计价器。
当设定默认晚上单价结束后,再次接下S4按键,则可设定默认中途等待单价,并启动计价器。
当设定默认中途等待单价后,若还按一次S4,则返回系统时间的显示。
2.AT89C51程序代码
ORG0000H;初始化段地址
LJMPMAIN;长跳转到主函数MAIN处
ORG000BH;TT0开始地址
LJMPTT0;长跳转到TT0处
ORG0030H;主函数开始地址,避开00—30敏感段
MAIN:
MOVSP,#40H;设堆栈底指针,下一个数据将放在41H单元
MOV70H,#60;价格单元的起步价
MOV71H,#00;价格单元的十位和百位
MOV72H,#00;秒单元清零
MOV74H,#00;时单元清零
MOV75H,#00;75H单元清零备用
CLR00H
CLR01H;将00H,01H单元清零
MOV6BH,#0AH;将0AH(既十进制10)放入6B单元
MOVR1,#76H;把76H放到R1中
KKK:
MOV@R1,#00H;将76H单元的内容清零
INCR1
DJNZ6BH,KKK;76H—7FH单元全部清零,备用
LCALLDIS;调用价格显示子程序
LCALLDIS1;调用时间显示子程序
MOVTMOD,#11H;定时器/计数器工作方式设置
MOVTH0,#3CH
MOVTL0,#0B0H;这句和上一句设置延时50ms
MOV6EH,#20;将6EH单元设置20,达到1s的延时
G2:
LCALLDIS;长调用价格显示子程序
LCALLDIS1;长调用时间显示子程序
JBP1.0,G2;开关没按下,等待按下,显示初始状态,全部为零
LCALLTIME1;调用TIME1延时子程序
JBP1.0,G2;开关没按下,跳到G2,否则转到下一步
G1:
LCALLDIS
LCALLDIS1
JNBP1.0,G1;开关按下,继续显示价格和时间,并转到中断
SETBEA;开中断
SETBET0;定时器0中断允许,向CPU申请中断
SETBTR0;定时器0工作允许
SETB01H;01H单元置位
LLL:
LCALLCHAI;调用现场保护子程序
LCALLDIS
LCALLJISUAN;调用计算子程序
LCALLDIS1
JBP1.0,G3;开关没按下,则返回
LCALLTIME1
JBP1.0,G3
CPL01H;01H单元此时为零
JNB01H,G5;01H;单元内容为0,跳到G5
SETBET0;定时器0中断允许,向CPU申请中断
G6:
LCALLDIS
LCALLDIS1
JNBP1.0,G6;开关按下,显示所走的时间及费用
LJMPMAIN;重新等待下一个工作状态
G5:
CLRET0
G4:
LCALLDIS
LCALLDIS1
JNBP1.0,G4
G3:
LJMPLLL
TT0:
CLRET0/*定时一秒*/
CLRTR0
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
SETBET0
DJNZ6EH,JJJ
LCALLADD1
MOV6EH,#20
JJJ:
RETI
DIS:
MOV6DH,#06H/*价格显示子程序*/
MOVR0,#7AH
MOV6CH,#0FEH
HHH:
MOVDPTR,#0FDFFH//数据指针出口地址,低8位给P0口,高8给//位P2口
MOVA,6CH
MOVX@DPTR,A
MOVA,@R0
MOVDPTR,#TAB;查表首地址
MOVCA,@A+DPTR;查表值送A
MOVDPTR,#0FEFFH
MOVX@DPTR,A
LCALLTIME1
MOVA,6CH
RLA
MOV6CH,A
INCR0
DJNZ6DH,HHH
RET
DIS1:
MOV6DH,#04H/*时间显示子程序*/
MOVR0,#72H
MOV6CH,#0FEH
HHH1:
MOVDPTR,#0F7FFH;FF给P0口,F7给P1.0—P1.3口
MOVA,6CH
MOVX@DPTR,A;将6CH的内容放到0F7FFH中
MOVA,@R0
MOVDPTR,#TAB;查表首地址
MOVCA@A+DPTR;查表值送A
MOVDPTR,#0FBFFH
MOVR1,6DH
CJNER1,#03H,K1
ORLA,#80H
K1:
MOVX@DPTR,A
LCALLTIME1
MOVA,6CH
RLA
MOV6CH,A
INCR0
DJNZ6DH,HHH1
RET
TIME1:
MOV6AH,#0AH/*延时子程序*/
FFF:
MOV69H,#0AH
GGG:
DJNZ69H,GGG
DJNZ6AH,FFF
RET
JISUAN:
JB00H,K2/*判断是否超过3公里及计算价格子程序*/
MOVA,78H
CLRC
SUBBA,#03H
MOV73H,#06H
JCK3
SETB00H
LJMPK3
K2:
MOVR3,71H
MOVR4,70H
MOVR2,#00H
MOVR5,#00H
MOVR6,#03H
MOVR7,#0E8H
LCALLNDIV42
MOV75H,R4
MOVA,R6
MOVR3,A
MOVA,R7
MOVR4,A
MOVR2,#00H
MOVR7,#100
LCALLNDIV31
MOV74H,R4
MOVA,R7
MOVB,#10
DIVAB
MOV73H,A
MOV72H,B
K3:
RET
CHAI:
MOV6FH,#03H/*保护现场子程序*/
MOVR0