太原理工单片机课程设计__出租车计价器

摘要:

如今单片机由于其体积小,性能完善,所以广泛应用于各个行业中。在出租车上,计价器便采用了单片机的应用技术,采用一系列的外部设备将出租车行驶以及停车等各个状态输入单片机,通过程序加以运算控制,再输出显示以及打印等。

我们试着用所学的知识,设计并模拟出租车计价器的工作方式,通过实践来掌握应用设备的工作原理。

目录

一、设计任务及思路 (2)

二、里程计数器的原理 (2)

三、LED显示电路 (2)

四、计价器的计价要求 (2)

五、电路原理图及引脚 (2)

六、流程图 (3)

七、源程序 (3)

八、调试 (5)

九、总结 (6)

十、参考文献 (6)

一.设计任务及思路

●出租车计价器需要的主要外部设备有公里计数器,以及显示、定时装置,通

过线路连接构成一个完整的系统。

●公里计数器设想:利用光电或者霍尔效应原理对车轮转过360°角位移产生

一个脉冲信号送给单片机作为一定距离的计数值。

●显示器:用LED显示,动态扫描显示,不断输出即时价格已及时间。

●定时装置(本设计中未引入):记录在停车或某些情况下的时间,用于辅助

计价。

二、里程计数器的原理(光电式)

在与车轴同步的轴上装有一隔光盘,上仅有以窄缝可以通光。在隔光盘两侧分别装有与车体固定的光源和感光元件。当隔光盘随轴转动时,光源发出的光被隔光盘隔离,只有在窄缝处感光元件接收到光信号,对后续电路产生一个脉冲。这就是对里程转换为计数值的基本原理。

其产生的脉冲信号则作为单片机计数器的输入信号,当单片机中计数器计到某一数量即为车行驶一公里,并对价格进行增加。在没有实际对这样计数装置试用,只能对其原理进行分析,在之下的程序设计中只取其脉冲信号作为单片机输入信号(P3.4)。

三、LED显示电路

太原理工单片机课程设计__出租车计价器

对设计总体分析下,只需对其价格进

行显示,选用四个LED数码管分别显示价

格的百位、十位、个位以及十分位(单位:

元)。显示方式采用动态扫描的方式,数据

输出为P0口,位选为P2口,共阴极(如

图)。

四、计价器的计价要求

●计价方式:起价(两公里)白天8元,晚上8.6元;由一开关进行选择。每

公里1.5元。

●转数与公里数:汽车轮胎周长近似为1.5米,故一百米需要转过67圈,计

67个数产生一个溢出中断。

五、电路原理图及引脚

太原理工单片机课程设计__出租车计价器

太原理工单片机课程设计__出租车计价器

六、流程图

太原理工单片机课程设计__出租车计价器

太原理工单片机课程设计__出租车计价器

七、源程序

ORG 0000H ;起始地址 AJMP START

ORG 001BH

;计数中断地址

主程序流程图 中断程序流程图

LJMP CNT1

ORG 0030H ;主程序地址

START: MOV PSW, #00H

MOV IE, #88H ;IE=10001000B

MOV TMOD, #60H ;TMOD=01100000B,T1工作方式2

MOV TH1, #0BDH ;自动重装

MOV TL1, #0BDH ;计67个数

SETB TR1 ;计数器启动

CLR P1.0 ;点亮小数点dp

MOV R4, #0FFH ;置数-1

MOV R0, #20H ;指向数据区首地址

MOV R1, #04H ;数字个数

LP1: MOV @R0, #00H ;把00放入显示数据区

INC R0 ;指针加一

DJNZ R1, LP1 ;继续置数

OFF: SETB P1.2

JNB P1.2, ON ;计价器开始跳转至ON

ACALL DISP ;调用显示子程序

AJMP OFF

ON: SETB P1.3

JB P1.3, DAY ;判断白天or夜间行车

NIGHT: MOV R2, #00H ;价格后两位压缩BCD码

MOV R3, #01H ;价格高两位压缩BCD码

MOV 21H, #01H ;显示数据区放入起价BCD码

CALL DISP ;显示夜间起价

AJMP LP2

DAY: MOV R2, #80H ;价格后两位压缩BCD码

MOV R3, #00H ;价格高两位压缩BCD码

MOV 22H, #08H ;显示数据区放入起价BCD码

LP2: CALL DISP ;显示白天起价

AJMP LP2

CNT1: MOV 35H, R5

MOV 36H, R6

MOV 32H, R0

MOV 31H, A

MOV 30H, R4 ;保护中断前寄存器内容

CJNE R4, #00H, INCC ;两公里内计数值加1

CLP0: MOV A, R2

ADD A, #01H ;后两位计价加一

DA A ;十进制调整

MOV R2, A

MOV A, R3

ADDC A, #00H ;前两位计价加进位

DA A ;十进制调整

MOV R3, A

CLP2: MOV A, R2

MOV B, #10H

DIV AB ;将压缩BCD码拆成BCD码

MOV 23H, B

MOV 22H, A ;按高低位存入显示数据区

MOV A, R3

MOV B, #10H

DIV AB ;将压缩BCD码拆成BCD码

MOV 21H, B

MOV 20H, A ;按高低位存入显示数据区

CALL DISP ;显示价格

AJMP RETC

INCC: INC R4 ;两公里内计数器加一

RETC: MOV A, 31H

MOV R0, 32H

MOV R5, 35H

MOV R6, 36H ;恢复中断前数据内容

RETI ;中断结束

DISP: MOV R5, #04H ;显示子程序,显示个数

MOV R0, #20H ;指向数据区首地址

MOV R6, #80H ;位选

MOV DPTR, #TAB ;指针指向显示列表

DLP0: MOV A, @R0

MOVC A, @A+DPTR ;取出对应的显示代码

MOV P0, A ;输出数据

MOV A, R6

MOV P2, A ;输出位选

RR A ;右移位选

MOV R6, A

INC R0 ;指向下一地址

DJNZ R5, DLP0 ;循环

RET ;结束

TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, DB 7FH, 67H ;显示代码列表

END

八、调试

利用KeilC51软件对其进行编译、仿真,

太原理工单片机课程设计__出租车计价器

得出比较满意的效果。由于没有实际电路板,

在调试过程中,利用显示数据存储区

“20H,21H,22H,23H”对其要求显示价格进行

观察,能够看到其中价格随着计数器中断在变

动着,并且逢十进一,比较理想地显示了价格。

九、总结

通过这次课程设计,我对单片机的工作原理有了更深一步的了解,对于中断、定时/计数器的工作方式更加明确,并且在应用上掌握了不少方法。在通过与同学们交流中,也发现不少问题,并且及时的做出相应的更改,还有一些应用巧妙的方法,这些使我对单片机技术能更灵活的应用。

在我的课程设计中,当时发现的问题就是中断调用时,对现场的保护问题,由于寄存器是共用的,中断时间不确定,所以必须中断时对现场进行保护,不能让中断中的数据覆盖原来的数据。另外,由于时间以及技术的缺乏,设计程序中没有加入定时的程序——停车计时计价,这里面也存在这许许多多的问题,比如停车是用中断判断还是扫描判断等。这些进一步的探究我将在以后的不断学习中进行该善。

相关推荐
相关主题
热门推荐