最新出租车计价器系统的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

出租车计价器系统的
设计
摘要:在交通发展迅速的今天,出租车是我们交通中不可缺少的工具。

同时出租车中的计价器是必不可少的一种设备。

出租车计价器系统设计的主要内容是通过C51单片机上的数码显示器来模拟出租车计价器的路程显示表,通过单片机上的键盘上的某些键来表示开始、暂停、复位等功能。

步骤如下:首先,程序开始做一些必要的初始化工作,等待键盘输入。

然后,启动键按下(0)后LED数码管开始记录路程并显示。

最后,当需要停止是可按相应的键(F)对路程计数器进行暂停。

而且还可以复位(E)。

关键词: C51单片机;8255;计价器; LED数码管
仅供学习与交流,如有侵权请联系网站删除谢谢15
1设计内容及要求
1.1设计内容及要求
(1)出租车里程测量:采用信号源产生脉冲模拟出租车计价传感器产生脉冲,设每产生100个脉冲出租车行驶1公里信号源脉冲频率〈=1KHZ;
(2)里程显示为:***.***公里;
(3)采用8255芯片管理键盘显示。

1.2框图
根据设计内容及要求,设计框图如图1所示。

图1设计框图
2系统组成及工作原理
仅供学习与交流,如有侵权请联系网站删除谢谢15
2.1控制单元设计
按键名称,O键表示开始计算路程;F键表示暂停;E键表示复位。

当程序开始运行后,按下0键则表示开始计算路程,并由数码管显示出来;按下F键则路程记数器暂停,并显示当前路程,当按下E键则复位。

2.2输出单元设计
通过六个8段LED数码管来显示路程。

前四个分别表示千位、百位、十位、个位,而后两个表示十分位和百分位。

2.3定时器的功能和使用方法
首先选择方式1——为16位的定时器,其初始化具体如下:
«Skip Record If...» «Skip Record If...»s
其中fosc为晶振频率,定时时间«Skip Record
If...»«Skip Record If...»。

3电路方案设计
3.1电路设计方案
使用单片机来完成设计要求。

电路包括显示电路,设置电路,存储电路,复位电路,其工作原理图如图2所示,单片机功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现仅供学习与交流,如有侵权请联系网站删除谢谢15
设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。

针对计费模式的切换,通过软件编程就可以轻容易的实现。

避免了机械开关带来的不稳定因素,单片机单元框图如图3所示。

图2 工作原理框图
仅供学习与交流,如有侵权请联系网站删除谢谢15
图3 单片机单元框图
3.2单元电路设计
3.2.1复位电路设计
在单片机的应用系统中,除单片机本身需复位以外,外部扩展的I/O接口电路等也需要复位,因此需要一个系统的同步复位信号:即单片机复位后,CPU开始工作时,外部的电路一定要复位好,以保证CPU有效的对外部电路进行初始化编程。

51系列单片机的复位端RST是一个施密特触发输入,高电平有效。

复位电路产生的复位信号经施密特电路整形后作为系统复位信号,加到51系列单片机和外部I/O接口电路的复位端.其电路图如图4所示,其中R1=47KΩ,R2=100Ω,C=10uF。

仅供学习与交流,如有侵权请联系网站删除谢谢15
复位后=0(=1)振荡器工作,可由软件置‘1’,使振荡器停止振荡,从而使整个单片机停止工作,以达到节电的目的。

图3.2 时钟电路 EA/VP 31X119X218RESET 9RD 17WR
16
INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P27
28
PSEN
29
ALE/P 30TXD 11RXD 10U1AT89C51
24M
CRYSTAL
30PF CAP
30PF
CAP GND
89C51 的复位端是一个史密特触发输入,高电平有效,而系统中的时钟接口和CAN 总线接口的复位信号都是低电平有效。

在复位电路中,按一下复位开关就使在RS端出现一段时间的高电平,经过74LS14 的一次反相整形,提供给单片机复位端。

再经过一次反相整形,通过I/ORST 端提供给外部接口电路。

外接12M 晶振和两个20P 电容组成系统的内部时钟电路。

3.3 8255A键盘显示电路设计
8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,如图6所示。

«Skip Record If...»
图6 系统中的8255线路
4程序设计
4.1主程序模块
在主程序模块中,需要完成对各接口芯片的初始化、中断向量的设计以及开中断、循环等待等工作。

另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器,并对它们进行初始化。

然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程等不同的操作。

仅供学习与交流,如有侵权请联系网站删除谢谢15
4.2定时中断服务程序
在定时中断服务程序中,每1ms产生一次中断,当产生1000次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。

里程计数程序流程图如图7所示。

仅供学习与交流,如有侵权请联系网站删除谢谢15
图7里程计数程序流程图
5总结
5.1结论
通过用单片机来模拟出租车计价器,并且使用了单片机上的键盘和数码显示管来模拟。

硬件各方面相对吻合安全性高、耦合度高,能够对键盘上的0键进行启动、F键进行停止、E键进行复位的操作。

程序首先进行初始化设置(包括数码管、字型表、定时中断设置);然后对键盘进行扫描,判断是否有功能键被按下;最后根据哪个功能键被按下,执行相应的程序以实现功能。

5.2课程设计体会
经过两周有关于通过模拟出租车计价器的课程设计,使同学们对单片机的应用有了更深的了解。

在课程设计的过程中,还是碰到了许多的问题。

比如,对于单片机的一些基本代码及程序还有一些不清楚的地方;对于代码的前后顺序及调用掌握的还不够好。

通过请教老师和同学,最终把问题解决了。

此外,去图书馆和网上查相关资料也是一种学习的途径。

附录
ORG 0000H
SJMP START ;定义程序起始位置ORG 000BH
SJMP DS0 ;定时器T0入口地址
START:
CLR TR0 ;关闭T0中断
MOV A,#81H ;将立即数81H放入A中
MOV DPTR,#0FF23H ;定义DPTR外部数据指针为
0FF23H,指向8255的控制字口
MOVX @DPTR,A ;把81H放入8255控制字口,让8255以PA、PB口0状态输出工作,PC口0状态输入
MOV TMOD,#01H ;定义T0为16位计数器
MOV TH0,#0FCH ;定义中断延时
MOV TL0,#24H ;定义中断延时
;1MS = 1000US ,假设晶振频率为12MHZ,延时常数=(2的16次方 - 1000)将其转换到16进制
MOV IE,#82H ;定义中断允许控制字,开CPU中断,开T0中断
MOV 71H,#00H ;
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 40H,#50 ;延时用
MOV 00H,#00H ;标志
MOV 01H,#00H
MOV 02H,#00H
MOV 03H,#00H
MOV 04H,#00H
MOV R1,#00H ;用来检测键盘开始键
MOV R3,#00H ;用来检测停止键
MOV R4,#00H ;用来监听复位键
MOV 50H,#10 ;循环次数
MOV 51H,#10 ;循环次数
MOV 52H,#10
MOV 53H,#10
MOV 54H,#10
MOV 55H,#10
SETB TR0 ;允许T0计数
CLR C ;清空CY
SJMP $ ;等待中断来临
DS0: ;中断处理子程序
MOV TH0,#0FCH ;把中断延时还给T0
MOV TL0,#24H
LCALL KEY_STATE ;调用键盘扫描子程序,获取当前的键盘状态,1MS扫描一次
CJNE R1,#0,RUN ;如果“0”被按下,就跳转到运行子程序,计算里程数
CJNE R3,#0,STOP ;如果“F”被按下,就跳转到停止子程序
CJNE R4,#0,RESET ;如果“E”被按下,就跳转到复位子程序RETI ;如果3个键都没有被按下,不做处理,直接返回中断,等待下一次中断来临
RESET: ;复位的子程序
MOV 71H,#00H ;初始化查表单元数据
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 51H,#10 ;初始化循环次数
MOV 52H,#10
MOV 53H,#10
MOV 54H,#10
MOV 55H,#10
LJMP XIANSHI ;跳转到显示子程序
RETI ;返回中断
STOP: ;停止子程序
LJMP XIANSHI ;跳转到显示子程序
KEY_STATE: ;键盘行扫描处理子程序
KEY_0: ;检查0
MOV R2,#0FDH ;定义8255对第2个LED数码管进行键盘扫描
MOV DPTR,#0FF20H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#0FF22H ;将DPTR指向8255的PC口MOVX A,@DPTR ;从PC口获取键盘状态
JB ACC.1,KEY_F ;判断第1列是否为0,如果为0,证明0被按下
SJMP KEY_DOWN0 ;按下了就跳转到0被按下的子程序RETI ;返回中断
KEY_F: ;检查F
MOV R2,#0F7H
MOV DPTR,#0FF20H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#0FF22H
MOVX A,@DPTR
JB ACC.1,KEY_E
SJMP KEY_DOWNF
RETI
KEY_E: ;检查E
MOV R2,#0DFH
MOV DPTR,#0FF20H
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#0FF22H
MOVX A,@DPTR
JB ACC.1,RETURN2
SJMP KEY_DOWNE
RETURN2: ;返回中断RETI
KEY_DOWN0: ;0被按下MOV R1,#1 ;把标志R1设置为1 MOV R3,#0 ;其他标志设置为0 MOV R4,#0
RETI ;返回中断
KEY_DOWNF: ;F被按下MOV R3,#1 ;把R3设置为1
MOV R1,#0 ;其他标志设置为0 MOV R4,#0
RETI ;返回中断
KEY_DOWNE: ;E被按下MOV R4,#1 ;把R4设置为1
MOV R3,#0 ;其他标志设置为0 MOV R1,#0
RETI ;返回中断
RUN: ;运行子程序
DJNZ 40H,XIANSHI ;延时显示
MOV 40H,#50
INC 71H ;百分位查表单元+1
DJNZ 50H,XIANSHI ;循环10次
MOV 50H,#10 ;如果百分位循环了10次,那么十分位上应该得到进位
INC 72H ;十分位查表单元+1
MOV 71H,#00H
DJNZ 51H,XIANSHI
MOV 51H,#10
INC 73H
MOV 71H,#00H
MOV 72H,#00H
DJNZ 52H,XIANSHI
MOV 52H,#10
INC 74H
MOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
DJNZ 53H,XIANSHI
MOV 53H,#10
INC 75H
MOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
DJNZ 54H,XIANSHI
MOV 54H,#10
INC 76H
MOV 71H,#00H
MOV 72H,#00H
MOV 73H,#00H
MOV 74H,#00H
MOV 75H,#00H
DJNZ 55H,XIANSHI
AJMP START
XIANSHI: ;显示百分位
JB 00H,P10 ;作为标志判断当前应该去显示哪个数码管JB 01H,P100
JB 02H,P1000
JB 03H,P10000
JB 04H,P100000
MOV DPTR,#0FF20H ;定义显示最右边的数码管
MOV A,#0FEH
MOVX @DPTR,A
MOV A,71H ;把百分位查表单元的数据送到A中MOV DPTR,#TAB1 ;查表
MOVC A,@A+DPTR ;把字型码送到8255的PB口
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 00H ;取反标志,能够让数码管循环点亮CPL 01H
CPL 02H
CPL 03H
CPL 04H
LJMP RETURN ;返回中断
P10: ;显示十分位MOV DPTR,#0FF20H
MOV A,#0FDH
MOVX @DPTR,A
MOV A,72H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 00H
LJMP RETURN
P100: ;显示个位
MOV DPTR,#0FF20H
MOV A,#0FBH
MOVX @DPTR,A
MOV A,73H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 01H
LJMP RETURN
P1000: ;显示十位MOV DPTR,#0FF20H
MOV A,#0F7H
MOVX @DPTR,A
MOV A,74H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 02H
LJMP RETURN
P10000: ;显示百位
MOV DPTR,#0FF20H
MOV A,#0EFH
MOVX @DPTR,A
MOV A,75H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 03H
LJMP RETURN
P100000: ;显示千位
MOV DPTR,#0FF20H
MOV A,#0DFH
MOVX @DPTR,A
MOV A,76H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#0FF21H
MOVX @DPTR,A
CPL 04H
LJMP RETURN
RETURN:
RETI ;返回中断
TAB1:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H; 0,1,2,3,4,5,6,7,8,9
END
参考文献
1 吴开志等.单片机技术指导[M].南昌航空出版社,2007.8
2 张友德赵志英涂时亮 .单片微型机原理、应用与实验[M] .复旦大学出版社,2006.6
3 孙涵芳.MCS-51系列单片机原理及应用[M].北京航空航天大学出版社,1996.4。

相关文档
最新文档