出租车计程计价器的设计word文档.docx
- 文档编号:680155
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:9
- 大小:36.88KB
出租车计程计价器的设计word文档.docx
《出租车计程计价器的设计word文档.docx》由会员分享,可在线阅读,更多相关《出租车计程计价器的设计word文档.docx(9页珍藏版)》请在冰豆网上搜索。
出租车计程计价器的设计word文档
出租车计程计价器的设计
一·课程设计目的与要求
为了能够精确地测量出租车行驶的路程和计算出该路程所需的价格,并显示出路程值和所需的钱值,基于单片机MCS-51能够完成该工作。
利用实验室提供的设配,利用实验箱上LED显示器设计能够显示6位(前四位是价钱值,后两位路程值),利用实验箱上提供的外部脉冲作为车轮走过的路程(设车轮直径为D=60cm,S=πD=2m),设起步价为12.5元,超过3km,超出的每千米按2.4元计算,同时包含停车每超过45s又要加6角。
二·设计方案
(1)设计原理
1.利用发光二级管L0灭来辨识有乘客,亮时没有乘客。
通过开关K1来控制。
具体接线是将P1.1与L0相连,P3.3与K1相连。
利用实验箱上的直流电机转速产生的脉冲作为T0的外来计数脉冲。
具体接线是将P3.4与实验箱上的CKMOT(CKMOT即是直流电机转数产生脉冲输出端)相连。
2.规定如下:
①起始价为12.5元,若在3Km以内则应付费12.5元,如果超过了3Km则应按超过3km的另外以每千米2.4元计算,及总价为JJ={12.5+(S-3)×2.4}元。
②若途中因为红灯或塞车的原因停车则每停车45秒要另加0.6元即JJ=JJ+0.6.如举个例子S=85km,中途没有停车则JJ=12.5+(85-3)×2.4=209.3(元)则6个数码管将显示“209.385”
3.具体过程叙述如下:
①程序一开始由于CLRp1.1知L0亮,并且开始时开关K1置1档,直到有乘客上车时,把开关打向0档,L0灭,同时显示器开始计程计价(开始显示为“12.500")之后车轮每转一圈相当于输出一个外部脉冲到P3.4,利用T0计数,T0每计125则T0中断一次,由于1km=4
×125×2(车轮每转一圈则路程为2m),即在T0中断程序中还有一个计中断次数的。
②在本设计中用到6个数码管分别为百元,十元,元,角,十千米,千米。
③程序中用十进制BCD码来表示价钱和路程,因此要用到将BCD码转换成非压缩的BCD码来驱动数码管显示。
即用RAM30H存储路程S(压缩BCD码)。
另外用31H,32H来存储计价值JJ的压缩BCD码,高字节放在32H中(百元,十元),低字节放在31H中(元,角),开始计价时30H为0,32H中为1(10元)31H中为25(二元五角)。
调用BCDZH将BCD码转成非压缩BCD码在调用DISP显示函数驱动数码管显示。
④在T0中断中若S>3km则调用BCDJ24即以后每千米加2.4元,在调用BCDZH和DISP显示路程和价钱。
注意30H~32H中对应的非压缩BCD码存放在40H~45H(40H存放一千米,41H存放十千米,42H存放角,43H存放元,44H存放十元,45H存放百元)。
⑤程序中还用T1定时器来检测是否处于停车状态,由晶振频率fosc=12MHz,T1定时为50ms,每过5S(100*0.1)检测一次TL0中的数据是否与上次相同,若相同则认为停车状态,直到检测了9次(9*5=45S)则就要加6角,之后再调用BCDZH和DISP驱动显示器,显示计价计程,又清零重新记录停车时间。
⑥此程序中比较特殊在于,T0每次中断恰好走过250m,及恰好也是调用BCDJ6,这就省略了一些计算步骤。
三·硬件系统说明和电路图原理
+5v
K1
ckmot
四·程序模块主要流程图和源程序及注释
程序流程图
开始,设置S,JJ存储单元
系统初始状态化,状态码清零,S,JJ设置初值,T0计数,T1定时,R7,R3,R4,R5设置初值
调用DISP,等待中断,T0,T1,
进入中断设计,子程序BCDZH,BCDJ6,T0INT,T!
INT,又循环调用DISP
中断子程序:
T!
INT,T0INT
中断返回
程序
源程序代码:
QDJEQU125;起步价12.5元
GLJEQU24;每公里价2.4元
SEQU30H;路程压缩BCD码存放30H
JJDZJEQU31H;计价值低字节存放在31H压缩BCD码,元,角
JJGZJEQU32H;计价值高字节存放在32H压缩BCD码,百元,十元
SGWEQU40H;路程个位非压缩BCD码,km
SSWEQU41H;路程十位非压缩BCD码,10km
JJJEQU42H;计价值角位,非压缩BCD码
JJYEQU43H;计价值元位,非压缩BCD码
JJSYEQU44H;计价值十元位,非压缩BCD码
JJBYEQU45H;计价值百元位,非压缩BCD码
ORG0000H;程序开始
LJMPMAIN
ORG000BH
LJMPT0INT
ORG001BH
LJMPT1INT
MAIN:
MOVSP,#60H
MOVDPTR,#5FFFH;显示初始化
MOVA,#0DCH
MOVX@DPTR,A
LP:
MOVXA,@DPTR
JNBACC.7,LP
MOVA,#00H
MOVX@DPTR,A
MOVA,#34H
MOVX@DPTR,A
MOVTMOD,#16H;T0计数,模式二,T1定时,模式一
MOVTH0,#83H;T0计数初值,每计到125,中断一次
MOVTL0,#83H
MOVTH1,#3CH;T1定时初值,每50ms,中断一次
MOVTL1,#0B0H
MOVR7,#00H;T0中断的次数,4次则路程加1km
MOVR3,#83H;用于存放每次TLTLO中数
MOVR4,#00H;T1中断子程序中100次,则5s检测车是否停车状态
MOVR5,#00H;T1中断子程序中90次,则停车45s,加6角
SETBEA;开启cpu中断,T0,T1中断
SETBET1
SETBET0
SETBPT0;T0中断优先级高
CLRP1.1;无乘客L0亮灯
MOVSGW,#00H;显示位清零
MOVSSW,#00H
MOVJJJ,#00H
MOVJJY,#00H
MOVJJSY,#00H
MOVJJBY,#00H
;ACALLDISP
JBP3.3,$;有乘客时,开始启动T0计数,T1定时,开关K1控制
SETBTR0
SETBTR1
CLRP1.1;有乘客时L0灭灯
MOVS,#00H;路程初始值0km
MOVJJGZJ,#01H;计价初始值12.5元
MOVJJDZJ,#25H
ACALLBCDZH;调用BCD转换程序,成非压缩BCD码
LL:
ACALLDISP;调用显示程序,并等待中断
LJMPLL
;将压缩BCD码转换成非压缩BCD码子程序如下
BCDZH:
PUSHPSW
SETBRS0;选用工作寄存器组0
MOVR0,#S;S的转换
MOVR1,#SGW
LPB:
MOVA,@R0
MOVR2,A
ANLA,#0FH;保留低四位
MOV@R1,A
INCR1
MOVA,R2
ANLA,#0F0H;保留高四位,
SWAPA
MOV@R1,A
INCR0;计价值的转?
INCR1
CJNER0,#33H,LPB
CLRRS0;选回工作寄存器组0
POPPSW
RET
;T0中断子程序
T0INT:
PUSHPSW
INCR7
CJNER7,#04H,LPT0;路程不满1km,S不加1,转到LPTO
MOVA,S;S+1
ADDA,#01H
DAA
MOVS,A
MOVR7,#00H;R7复0
LPT0:
MOVA,S;S是否大于3km
CLRC
SUBBA,#03H
JCFH0;S<3,转到FH0
;MOVA,S
;CLRC
;SUBBA,#6
;JCL3
;ACALLBCDJ12
;LJMPFH0
L3:
ACALLBCDJ6;由于每次计数125,中断一次,125*2=250m,即中断一次加0.6元
FH0:
ACALLBCDZH;调用bcd码转换成非压缩bcd码,驱动数码管显示
;ACALLDISP
POPPSW
RETI
;BCDJ6子程序,T0中断一次250m就加6角,使用压缩BCD码
BCDJ6:
MOVA,JJDZJ
ADDA,#06H
DAA
MOVJJDZJ,A
MOVA,JJGZJ
ADDCA,#00H
DAA
MOVJJGZJ,A
RET
;附加的
;BCDJ12:
MOVA,JJDZJ
;ADDA,#12
;DAA
;MOVJJDZJ,A
;MOVA,JJGZJ
;ADDCA,#0
;DAA
;MOVJJGZJ,A
;RET
;T1中断子程序
T1INT:
PUSHPSW
MOVTH1,#3CH
MOVTL1,#0B0H
INCR4
CJNER4,#64H,LY;未到5s,转到LY
MOVR4,#00H;R4复0
MOVA,TL0
CLRC
SUBBA,R3;5s检测是否停车,
JNZLY2;A=0,R3=TL0,A!
=0->LY2
INCR5
CJNER5,#09H,LY2;是否停了45s
MOVR5,#00H;R5复0
ACALLBCDJ6;停车45s加6角
ACALLBCDZH
LY2:
MOVR3,TL0;用于存放每次TL0的值
LY:
POPPSW
RETI
;显示子程序
DISP:
MOVR3,#06H;显示的位数
MOVA,#92H;输出写显示RAM命令字
MOVDPTR,#5FFFH;指向8279命令口
MOVX@DPTR,A;起始地址为0单元,自动加1
MOVR1,#SGW;要显示数据的存放单元首地址
TY11:
MOVA,@R1
MOVDPTR,#CODE1;#CODE1为查表偏移量
MOVCA,@A+DPTR;查表得到段码
MOVDPTR,#5EFFH;指向8279数据口
MOVX@DPTR,A;写入显示RAM
INCR1
DJNZR3,TY11
RET
CODE1:
DB0C0H,0F9H,0A4H,0B0H,99H;段码表(共阳极)
DB92H,82H,0F8H,80H,90H,88H
DB83H,0C6H,0A1H,86H,8EH,8CH
DB0C1H,89H,0C7H,0BFH,91H
DB00H,0FFH
END
五·课程设计总结
这次单片机课程设计对于自己来说,收获很多。
通过这次包括汇编编程和对硬件的操作在内的,由自己动手实践的,在体提高自己编程能力方面和对单片机硬件操作能力方面都有一个很大的提高。
由开始选题然后找到相关参考书,试着编写程序,到最后逐步的修改,碰到问题找老师和同学帮助(如如何提供外部脉冲来源,单步调式,设置断点等),最后能够在实验箱实现,这过程中收获颇多。
总之,这次课程设计即有加深对课本知识了解,也加强了自己操作和编程能力。
六·参考书目
【1】王琼,单片机原理及应用实验教程。
合肥:
合肥工业大学出版社,2005【2】王琼,单片机原理及应用。
合肥:
合肥工业大学出版社,2008
【3】张大明,单片机控制实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车 计程 计价器 设计 word 文档