出租车计价器系统的设计.docx
《出租车计价器系统的设计.docx》由会员分享,可在线阅读,更多相关《出租车计价器系统的设计.docx(18页珍藏版)》请在冰豆网上搜索。
![出租车计价器系统的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/4/0f3b99f9-4f21-42e9-9bad-62d93ca01437/0f3b99f9-4f21-42e9-9bad-62d93ca014371.gif)
出租车计价器系统的设计
1设计内容及要求
1.1设计内容及要求
(1)出租车里程测量:
采用信号源产生脉冲模拟出租车计价传感器产生脉冲,设每产生100个脉冲出租车行驶1公里信号源脉冲频率〈=1KHZ;
(2)里程显示为:
***.***公里;
(3)采用8255芯片管理键盘显示。
1.2框图
根据设计内容及要求,设计框图如图1所示。
图1设计框图
2系统组成及工作原理
2.1控制单元设计
按键名称,O键表示开始计算路程;F键表示暂停;E键表示复位。
当程序开始运行后,按下0键则表示开始计算路程,并由数码管显示出来;按下F键则路程记数器暂停,并显示当前路程,当按下E键则复位。
2.2输出单元设计
通过六个8段LED数码管来显示路程。
前四个分别表示千位、百位、十位、个位,而后两个表示十分位和百分位。
2.3定时器的功能和使用方法
首先选择方式1——为16位的定时器,其初始化具体如下:
s
其中fosc为晶振频率,定时时间
。
3电路方案设计
3.1电路设计方案
使用单片机来完成设计要求。
电路包括显示电路,设置电路,存储电路,复位电路,其工作原理图如图2所示,单片机功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。
针对计费模式的切换,通过软件编程就可以轻容易的实现。
避免了机械开关带来的不稳定因素,单片机单元框图如图3所示。
单
片
机
图2工作原理框图
图3单片机单元框图
3.2单元电路设计
3.2.1复位电路设计
在单片机的应用系统中,除单片机本身需复位以外,外部扩展的I/O接口电路等也需要复位,因此需要一个系统的同步复位信号:
即单片机复位后,CPU开始工作时,外部的电路一定要复位好,以保证CPU有效的对外部电路进行初始化编程。
51系列单片机的复位端RST是一个施密特触发输入,高电平有效。
复位电路产生的复位信号经施密特电路整形后作为系统复位信号,加到51系列单片机和外部I/O接口电路的复位端.其电路图如图4所示,其中R1=47KΩ,R2=100Ω,C=10uF。
图4复位电路
3.2.2时钟电路设计
89C51系列单片机内部有一个可控制的反相放大器,引脚XTAL1、XTAL2为反相放大器的输入端和输出端,在XTAL1、XTAL2上外接晶振(或陶瓷谐振器)和电容便组成振荡器。
具体的时钟电路如图5所示。
电容1、2的典型值为30pF+10pF(晶振)或40pF+10pF(陶瓷谐振器)。
振荡器频率主要取决与晶振(或陶瓷谐振器)的频率,但必须小于器件所允许的最高频率。
振荡器的工作受控制,复位后=0(=1)振荡器工作,可由软件置‘1’,使振荡器停止振荡,从而使整个单片机停止工作,以达到节电的目的。
图3.2时钟电路
图5时钟电路
3.2.3单片机最小系统
主控机系统采用了Atmel公司生产的89C51单片机,它含有128字节数据存储器,内置4K的电可擦除FLASHROM,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。
复位电路和晶振电路是89C51工作所需的最简外围电路。
89C51的复位端是一个史密特触发输入,高电平有效,而系统中的时钟接口和CAN总线接口的复位信号都是低电平有效。
在复位电路中,按一下复位开关就使在RS端出现一段时间的高电平,经过74LS14的一次反相整形,提供给单片机复位端。
再经过一次反相整形,通过I/ORST端提供给外部接口电路。
外接12M晶振和两个20P电容组成系统的内部时钟电路。
3.38255A键盘显示电路设计
8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,如图6所示。
图6系统中的8255线路
4程序设计
4.1主程序模块
在主程序模块中,需要完成对各接口芯片的初始化、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程等不同的操作。
4.2定时中断服务程序
在定时中断服务程序中,每1ms产生一次中断,当产生1000次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。
里程计数程序流程图如图7所示。
N
Y
N
Y
N
Y
Y
N
N
Y
Y
N
N
N
Y
Y
N
Y
图7里程计数程序流程图
5总结
5.1结论
通过用单片机来模拟出租车计价器,并且使用了单片机上的键盘和数码显示管来模拟。
硬件各方面相对吻合安全性高、耦合度高,能够对键盘上的0键进行启动、F键进行停止、E键进行复位的操作。
程序首先进行初始化设置(包括数码管、字型表、定时中断设置);然后对键盘进行扫描,判断是否有功能键被按下;最后根据哪个功能键被按下,执行相应的程序以实现功能。
5.2课程设计体会
经过两周有关于通过模拟出租车计价器的课程设计,使同学们对单片机的应用有了更深的了解。
在课程设计的过程中,还是碰到了许多的问题。
比如,对于单片机的一些基本代码及程序还有一些不清楚的地方;对于代码的前后顺序及调用掌握的还不够好。
通过请教老师和同学,最终把问题解决了。
此外,去图书馆和网上查相关资料也是一种学习的途径。
附录
ORG0000H
SJMPSTART;定义程序起始位置
ORG000BH
SJMPDS0;定时器T0入口地址
START:
CLRTR0;关闭T0中断
MOVA,#81H;将立即数81H放入A中
MOVDPTR,#0FF23H;定义DPTR外部数据指针为0FF23H,指向8255的控制字口
MOVX@DPTR,A;把81H放入8255控制字口,让8255以PA、PB口0状态输出工作,PC口0状态输入
MOVTMOD,#01H;定义T0为16位计数器
MOVTH0,#0FCH;定义中断延时
MOVTL0,#24H;定义中断延时
;1MS=1000US,假设晶振频率为12MHZ,延时常数=(2的16次方-1000)将其转换到16进制
MOVIE,#82H;定义中断允许控制字,开CPU中断,开T0中断
MOV71H,#00H;
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
MOV75H,#00H
MOV76H,#00H
MOV40H,#50;延时用
MOV00H,#00H;标志
MOV01H,#00H
MOV02H,#00H
MOV03H,#00H
MOV04H,#00H
MOVR1,#00H;用来检测键盘开始键
MOVR3,#00H;用来检测停止键
MOVR4,#00H;用来监听复位键
MOV50H,#10;循环次数
MOV51H,#10;循环次数
MOV52H,#10
MOV53H,#10
MOV54H,#10
MOV55H,#10
SETBTR0;允许T0计数
CLRC;清空CY
SJMP$;等待中断来临
DS0:
;中断处理子程序
MOVTH0,#0FCH;把中断延时还给T0
MOVTL0,#24H
LCALLKEY_STATE;调用键盘扫描子程序,获取当前的键盘状态,1MS扫描一次
CJNER1,#0,RUN;如果“0”被按下,就跳转到运行子程序,计算里程数
CJNER3,#0,STOP;如果“F”被按下,就跳转到停止子程序
CJNER4,#0,RESET;如果“E”被按下,就跳转到复位子程序
RETI;如果3个键都没有被按下,不做处理,直接返回中断,等待下一次中断来临
RESET:
;复位的子程序
MOV71H,#00H;初始化查表单元数据
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
MOV75H,#00H
MOV76H,#00H
MOV51H,#10;初始化循环次数
MOV52H,#10
MOV53H,#10
MOV54H,#10
MOV55H,#10
LJMPXIANSHI;跳转到显示子程序
RETI;返回中断
STOP:
;停止子程序
LJMPXIANSHI;跳转到显示子程序
KEY_STATE:
;键盘行扫描处理子程序
KEY_0:
;检查0
MOVR2,#0FDH;定义8255对第2个LED数码管进行键盘扫描
MOVDPTR,#0FF20H
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#0FF22H;将DPTR指向8255的PC口
MOVXA,@DPTR;从PC口获取键盘状态
JBACC.1,KEY_F;判断第1列是否为0,如果为0,证明0被按下
SJMPKEY_DOWN0;按下了就跳转到0被按下的子程序
RETI;返回中断
KEY_F:
;检查F
MOVR2,#0F7H
MOVDPTR,#0FF20H
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#0FF22H
MOVXA,@DPTR
JBACC.1,KEY_E
SJMPKEY_DOWNF
RETI
KEY_E:
;检查E
MOVR2,#0DFH
MOVDPTR,#0FF20H
MOVA,R2
MOVX@DPTR,A
MOVDPTR,#0FF22H
MOVXA,@DPTR
JBACC.1,RETURN2
SJMPKEY_DOWNE
RETURN2:
;返回中断
RETI
KEY_DOWN0:
;0被按下
MOVR1,#1;把标志R1设置为1
MOVR3,#0;其他标志设置为0
MOVR4,#0
RETI;返回中断
KEY_DOWNF:
;F被按下
MOVR3,#1;把R3设置为1
MOVR1,#0;其他标志设置为0
MOVR4,#0
RETI;返回中断
KEY_DOWNE:
;E被按下
MOVR4,#1;把R4设置为1
MOVR3,#0;其他标志设置为0
MOVR1,#0
RETI;返回中断
RUN:
;运行子程序
DJNZ40H,XIANSHI;延时显示
MOV40H,#50
INC71H;百分位查表单元+1
DJNZ50H,XIANSHI;循环10次
MOV50H,#10;如果百分位循环了10次,那么十分位上应该得到进位
INC72H;十分位查表单元+1
MOV71H,#00H
DJNZ51H,XIANSHI
MOV51H,#10
INC73H
MOV71H,#00H
MOV72H,#00H
DJNZ52H,XIANSHI
MOV52H,#10
INC74H
MOV71H,#00H
MOV72H,#00H
MOV73H,#00H
DJNZ53H,XIANSHI
MOV53H,#10
INC75H
MOV71H,#00H
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
DJNZ54H,XIANSHI
MOV54H,#10
INC76H
MOV71H,#00H
MOV72H,#00H
MOV73H,#00H
MOV74H,#00H
MOV75H,#00H
DJNZ55H,XIANSHI
AJMPSTART
XIANSHI:
;显示百分位
JB00H,P10;作为标志判断当前应该去显示哪个数码管
JB01H,P100
JB02H,P1000
JB03H,P10000
JB04H,P100000
MOVDPTR,#0FF20H;定义显示最右边的数码管
MOVA,#0FEH
MOVX@DPTR,A
MOVA,71H;把百分位查表单元的数据送到A中
MOVDPTR,#TAB1;查表
MOVCA,@A+DPTR;把字型码送到8255的PB口
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL00H;取反标志,能够让数码管循环点亮
CPL01H
CPL02H
CPL03H
CPL04H
LJMPRETURN;返回中断
P10:
;显示十分位
MOVDPTR,#0FF20H
MOVA,#0FDH
MOVX@DPTR,A
MOVA,72H
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL00H
LJMPRETURN
P100:
;显示个位
MOVDPTR,#0FF20H
MOVA,#0FBH
MOVX@DPTR,A
MOVA,73H
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL01H
LJMPRETURN
P1000:
;显示十位
MOVDPTR,#0FF20H
MOVA,#0F7H
MOVX@DPTR,A
MOVA,74H
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL02H
LJMPRETURN
P10000:
;显示百位
MOVDPTR,#0FF20H
MOVA,#0EFH
MOVX@DPTR,A
MOVA,75H
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL03H
LJMPRETURN
P100000:
;显示千位
MOVDPTR,#0FF20H
MOVA,#0DFH
MOVX@DPTR,A
MOVA,76H
MOVDPTR,#TAB1
MOVCA,@A+DPTR
MOVDPTR,#0FF21H
MOVX@DPTR,A
CPL04H
LJMPRETURN
RETURN:
RETI;返回中断
TAB1:
DB0C0H,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
参考文献
1吴开志等.单片机技术指导[M].南昌航空出版社,2007.8
2张友德赵志英涂时亮.单片微型机原理、应用与实验[M].复旦大学出版社,2006.6
3孙涵芳.MCS-51系列单片机原理及应用[M].北京航空航天大学出版社,1996.4