单片机出租车计价器课程设计

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

嵌入式系统基础

设计题目:出租车计价器

学院:太原理工大学现代科技学院

班级:电子信息

姓名:

学号:

一、设计题目:

出租车计价器

二、设计思路:

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

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

三、设计任务

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

接构成一个完整的系统。

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

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

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

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

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

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

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

五、LED显示电路

对Array设计总

体分析

下,只

需对其

价格进

行显示,选用四个LED数码管分别显示价格的百位、十位、个位以及十分位(单位:元)。显示方式采用动态扫描的方式,数据输出为P0口,位选为P2口,共阴极(如图)。六、计价器的计价要求

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

元。

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

生一个溢出中断。

七、电路原理图及引脚

八、源程序

ORG 0000H ;起始地址

AJMP START

ORG 001BH ;计数中断地址

LJMP CNT1

ORG 0030H ;主程序地址

START: M OV 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

九、流程图

相关文档
最新文档