南 京 理 工 大 学
《单片机》课程设计报告
作 者: 学院(系): 专 业: 题 目:
姚春桂 学 号: 0608190146 动力工程学院
电气工程及其自动化 市内出租车计程计价显示系统
申请面试
指导教师: 葛 龙
2008 年 12 月 24 日
单片机课程设计报告
1 需求分析
第1 页
随着国内城市化的加快,人民生活水平的不断提高,作为市内最快捷方便的交通工具——出租汽车,正越来越受到广大普通百姓的青睐,越来越多的人会选择搭乘出租车作为自己出行的方式,随之而来的是出租行业的蓬勃发展,因此出租车计程计价显示系统的使用数量也在不断的增多,因此设计一款廉价且可以方便显示行使路程及费用的系统具有广阔的市场前景。
2 基本原理
本出租车计程计价显示系统采用AT89C51单片机作为核心处理器,通过编写汇编程序输入到单片机设置起步价、每公里计费等固定参数及完成计程计费的计算过程,在汽车底盘主轴上(或变速箱内、转轴齿轮上)装一个反射型红外发射接受对管JY043W,,测出转的圈数N后乘以车轮的周长即为行程S。再根据起步价及每公里计费价格即可计算出行程计价值。此外,通过手动按钮送给单片机一个外部中断完成计费的开始,通过发光二极管显示有无乘客乘坐。计程及计价值通过数码管实时显示出来。
出租车计程计价显示系统结构框图如图1所示
红外发射接收对管JY043W计程计价数码输出AT89C51发光二极管拨动开关 图1出租车计程计价显示系统结构框图
单片机课程设计报告
3 硬件电路设计
第2 页
以AT89C51单片机位核心,配合路程计数装置、外部中断装置、输出显示装置等外围电路组成整个硬件电路。单片机内存储并执行程序,响应外部中断,输出计程计价数码。计数装置通过装载汽车主轴上的反射型红外发射接受对管采集行驶路程信息。外部中断装置是一个手动开关,闭合开关启动计程计价,显示装置为6个7段数码管,显示信息从单片机的P1口及部分P2口输出。其中计价值用4个数码管依次显示百元、十元、元及角,考虑到出租车主要在市区行驶,一般不会超过100千米,故计程值用2个数码管依次显示十千米和千米位。
市内出租车计程计价显示系统硬件电路通过Proteus7.1绘制如图2所示
图2 市内出租车计程计价显示系统电路原理图
单片机课程设计报告
市内出租车计程计价显示系统硬件电路通过Protel99SE绘制如图3所示
第3 页
图3市内出租车计程计价显示系统电路原理图
市内出租车计程计价显示系统硬件电路PCB印制电路板如图4所示
图4 市内出租车计程计价显示系统PCB印制电路板
单片机课程设计报告
PCB印制电路板模拟三维实物显示如图5及图6所示
第4 页
图5 PCB印制电路板模拟三维实物(正面)
图6 PCB印制电路板模拟三维实物(反面)
单片机课程设计报告
4 软件程序设计
第5 页
一开始,P2.7输出高电平使灯D1(发光二极管)亮,并不断检测拨动开关的状态。当有乘客上车时,接通开关,单片机检测到P3.3为电平时使发光二极管熄灭,并开始计程计价。车轮每转一圈,即向T0口输入一个方脉冲。经施米特触发反相器74LS14整形反相后,其下降沿使单片机的定时器T0加1计数,由于出租车的车轮直径为
0.6366m,因此车轮每转一圈的行程为2.0m。T0每计125个数,相当于汽车行驶了250m。 把T0设置为计数,模式2,用T0中断,计数初值为(100H-125)=83H。汽车每行驶250m,T0计满数溢出一次,使T0中断,在T0中断子程序中,使寄存器R1加1计数。R1每计4个数,相当于汽车行驶了1千米,使30H单元中的行程S加1(用BCD码加法)。因此行程S为R1/4千米。程序中 ,用片内RAM30H存储行程S的千米数(压缩BCD码,最大不超过99),另一方面用31H、32H单元存储计价值的压缩BCD码,高字节放在32H单元存百元位与十元位;低字节放在31H单元,存元与角位。
在T0中断子程序中,判断若行程超过3千米,在T0每次中断使R1加1时,即汽车每行驶250米,调用压缩BCD码加6角。然后调用压缩BCD码转换为非压缩BCD码的子程序BCDZH(BCD转换),将30H~32H单元中的BCD码转换为非压缩BCD码,分别位于40H~45H单元中。之后调用显示字程序DISP将这些数据输出显示。
主程序流程图如图7所示
单片机课程设计报告
第6 页
源程序如下所示
QDJ EQU 125 GLJ EQU 24
开始设置初始数据值、端口工作方式及存储单元地址检测是否有乘客无有调用BCD转换子程序调用显示子程序检测乘客是否到站否到站
图7 主程序流程图
;起步价12.5元(3千米内) ;每公里价2.4元/千米(3千米以上)
单片机课程设计报告
第7 页
S EQU 30H ;行程存在30H单元中(压缩BCD码) JJDZJ EQU 31H ;计价值低字节,高位为元位,低位为角位 JJGZJ EQU 32H ;计价值高字节,高位为百元位,低位为十元位 SGW EQU 40H ;行程的个位(非压缩BCD码) SSW EQU 41H ;行程的十位(非压缩BCD码) JJJ EQU 42H ;计价值角位(非压缩BCD码) JJY EQU 43H JJSY EQU 44H JJBY EQU 45H ORG 0000H LJMP MAIN ORG 000BH LJMP T0INT ORG 001BH LJMP T1INT MAIN: MOV SP,#60H
MOV DPTR,#TAB MOV TMOD,#16H MOV TH0,#83H MOV TL0,#83H
MOV TH1,#3CH MOV TL1,#0B0H
MOV IE,#8AH
SETB PT0
SETB P2.7 MOV SGW,#00H MOV SSW,#00H
BCD码) ;计价值十元位(非压缩BCD码) ;计价值百元位(非压缩BCD码) ;共阳极段码表
;T1定时,模式1,T0计数,模式2,用T0、
T1中断
;T0计数初值,每计125个数(相当于250m)
申请一次中断
;T1定时0.1秒 ;开CPU及T0、T1中断 ;无乘客亮灯
;将各显示位清零,显示熄灭码 ;计价值元位(非压缩 单片机课程设计报告
MOV JJJ,#00H MOV JJY,#00H MOV JJSY,#00H MOV JJBY,#00H
ACALL DISP ;调用显示子程序 JB P3.3,$ ;无乘客等待
第8 页
SETB TR0 ;有乘客开始行驶时启动T0与T1开始计程计
价
SETB TR1
CLR P2.7 ;有乘客熄灭灯 MOV S,#00H ;行程初始值0千米
MOV JJGZJ,#01H ;计价初始值12.5元,高字节 MOV JJDZJ,#25H ;计价初始值12.5元,低字节 ACALL BCDZH ;调用BCD码转换子程序 L: ACALL DISP
JNB P3.3,L ;乘客未到站,循环显示 CLR TR0 ;乘客到站停止计数 CLR TR1
SJMP MAIN ;乘客下车后返回程序开始
;BCD码转换子程序,把32H~30H中的压缩BCD码转换为非压缩BCD码存于45H~40H BCDZH: PUSH ACC
SETB RS0 ;选工作寄存器组1 MOV R0,#S MOV R1,#SGW LPB: MOV A,@R0 MOV R2,A ANL A,#0FH MOV @R1,A INC R1 MOV A,R2
单片机课程设计报告
ANL A,#0F0H SWAP A MOV @R1,A INC R0 INC R1
CJNE R0,#33H,LPB
CLR RS0 ;返回工作寄存器组0 POP ACC RET
;显示子程序,显示40H~45H单元中的计程与计价值 DISP: MOV R0,#SGW MOV A,@R0 MOVC A,@A+DPTR SETB P2.1 MOV P1,A ACALL DELAY CLR P2.1 INC R0 MOV A,@R0 MOVC A,@A+DPTR SETB P2.0 MOV P1,A ACALL DELAY CLR P2.0 INC R0 MOV A,@R0 MOVC A,@A+DPTR SETB P2.5 MOV P1,A ACALL DELAY
第9 页
单片机课程设计报告
CLR P2.5 INC R0 MOV A,@R0 MOVC A,@A+DPTR SETB P2.4 MOV P1,A SETB P1.7 ACALL DELAY CLR P2.4 INC R0 MOV A,@R0 MOVC A,@A+DPTR SETB P2.3 MOV P1,A ACALL DELAY CLR P2.3 INC R0 MOV A,@R0 MOVC A,@A+DPTR SETB P2.2 MOV P1,A ACALL DELAY CLR P2.2 RET
TAB: DB 0C0H,0CFH,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H
;T0中断子程序,每250米中断一次 T0INT: PUSH ACC
第10 页
INC R1 ;R1中存250米数,每行驶250米R1加1
单片机课程设计报告
MOV A,S ;行驶满1千米,行程加1 ADD A,#1 DA A MOV S,A
MOV R1,#0 ;R1复位
LPT0: MOV A,S ;判断行程是否,满3千米 CLR C SUBB A,#3
第11 页
CJNE R1,#4,LPT0 ;行驶不满1千米,行程不增加,跳转
JC FH0 ;行程不到3千米,计价不加6,返回 ACALL BCDJ6 ;行程满3千米,调用BCDJ6子程序 FH0: ACALL BCDZH ACALL DISP POP ACC RETI
;压缩BCD码加6子程序,将31H~32H中的计价值加6 BCDJ6: MOV A,JJDZJ ADD A,#6 DA A MOV JJDZJ,A MOV A,JJGZJ
ADDC A,#0 ;考虑可能的进位 DA A MOV JJGZJ,A RET
;T1中断子程序,每0.1秒中断一次 T1INT: PUSH ACC MOV TH1,#3CH MOV TL1,#0B0H MOV A,R2
单片机课程设计报告
JNZ LPT MOV R4,TL0 LPT: INC R2 CJNE R2,#50,FH1 MOV R2,#0 MOV A,R4 CJNE A,TL0,FH1 INC R3 CJNE R3,#9,FH1 MOV R3,#0 ACALL BCDJ6 ACALL BCDZH ACALL DISP FH1: POP ACC RETI
DELAY: MOV R6,#5 LOOP1: MOV R7,#200 LOOP2: NOP NOP NOP
DJNZ R7,LOOP2 DJNZ R6,LOOP1 RET END
第12 页
5 调试及改进
完成电路的硬件设计及软件编程后,打开仿真开关效果基本符合最初的设计目标,可以完成无乘客时处于等待状态,发光二极管亮;当有乘客时拨动开关即开始计程计费,当遇到交通阻塞汽车停止前进超过45秒钟,计程不增加,但计费会增加;正常行驶时每250米费用增加6角。
单片机课程设计报告
仿真截图如图8所示
第13 页
图8 仿真截图
从仿真中可以看出,结果较好的满足了设计需求,但也存在一些小的问题,如仿真时,数码管显示有时会跳动,计程计费结束后拨动开关数码管及熄灭,不能有效地保存数据,针对这些问题可以在电路中加入一个74LS373锁存器用以保存数据。
6 课程学习体会
通过对单片机这门课程的学习,我对C51系列单片机有了较为深刻的认识,它是计算机家族的一个重要分支,具有体积小、价格低、面向控制的特点,在人类生产和生活的各个领域都有极为广泛的应用,它是数字电路的延伸,但功能又远远超过它,只需要
单片机课程设计报告
转换装置就可以处理模拟电路的问题。
第14 页
单片机配以简单的电路就可以完成比较复杂的功能,同时只要加上适当的数/模和模数
此外,通过单片机这门课程的学习,还加深了我对汇编语言及C语言的理解,对于其他课程也起了促进的作用。
单片机是一门面向实际应用的课程,要多查找资料,及时广泛的了解现实的应用信息才能够跟得上单片机的发展,不能死记书本,也不必去刻意去记那些指令语句,在实际应用中可以通过查指令表来阅读或编写汇编程序。
参 考 文 献
[1] 葛龙. 单片机讲义. 南京: 南京理工大学, 2006.
[2] 闫玉德, 俞虹. MCS-51单片机原理与应用. 北京: 机械工业出版社, 2004.
[3] 张鹏, 王雪梅. 单片机原理与应用实例教程.北京:海洋出版社,2008.
[4] 张大明. 单片机控制实训指导及综合应用实例.北京:机械工业出版社,2007 [5] 江思敏, 姚鹏翼, 胡荣. Protel电路设计教程.北京:清华大学出版社,2002 [6] 林伸茂. 8051单片机彻底研究经验篇.北京: 中国电力出版社,2007 [7] 胡辉. 单片机原理及应用设计.北京: 中国水利水电出版社,2005 [8] 胡学海. 单片机原理及应用系统设计.北京: 电子工业出版社,2005
[9] 肖洪兵, 李国峰, 李冰,杨征.80C51嵌入式系统教程.北京: 北京航空航天大学出版社,2008
因篇幅问题不能全部显示,请点此查看更多更全内容