基于单片机的交通灯控制系统设计论文
目 录
1 设计课题任务、功能要求说明及总体方案介绍 ............... 1
1.1 设计课题任务 ...................................... 1
1.2 功能要求说明 ...................................... 1
1.3 设计课题总体方案介绍及工作原理说明 ................ 1
2 硬件系统的设计 ......................................... 3
2.1 硬件系统各模块功能简要介绍 ....................... 3
2.2 电路原理图、PCB 图、元器件布局图 ................... 3
2.3 元器件清单 ........................................ 3
3 软件系统的设计 ......................................... 4
3.1 单片机资源使用的情况 ............................. 4
3.2 软件系统模块功能介绍 ............................. 4
3.3 程序流程框图 ..................................... 4
3.4 程序清单 ......................................... 7
4 设计结论及误差分析 ..................................... 8
4.1 数字电子钟的设计结论及使用说明 ................... 8
4.2 误差分析 .......................................... 8
5 设计总结与体会 ......................................... 9
5.1设计总结 .......................................... 9
5.2 教学建议 .......................................... 9
参考文献 ................................................ 10
附录A .................................................. 11
附录B .................................................. 13
附录C .................................................. 14
1 设计课题任务、功能要求说明及总体方案介绍
1.1 设计课题任务
设计一个具有特定功能的十字路口交通灯。
1.2 功能要求说明
该交通灯上电或按键复位后能自动显示系统提示符“P .”, 进入准备工作状态。按开始键则开始工作,按结束键则返回“P .”状态。要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。
1.3 设计课题总体方案介绍及工作原理说明
1.3.1 总体方案介绍
本课程设计用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,而接入LED 数码管就可以显示倒计时以提醒行使者,更具人性化。本系统在此基础上,加入了紧急状态下的运行。本设计系统以单片机为控制核心,连接成最小系统,由独立式键盘模块、复位电路模块、晶振电路模块产生输入,LED 信号灯状态模块,数码管倒计时模块接受输出。系统的总体框图如图1所示。
键盘设置模块对系统输入模式选择及具体通行时间设置的信号,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED 数码管上实时显示。在此过程中还要实时紧急按键信号,以达到对异常状态进行实时控制的目的。
图1 交通灯系统框图
1.3.2 工作原理
本交通灯的所有的软件、参数均存放在AT89S52的Flash ROM 和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。系统开始时须先显示状态灯、数码管显示“P. ”,将状态码值送显P2口,将要显示的时间值的个位和十位分别送显P0和P1口,在此同时以50ms 为周期,用软件方法计时1秒,到达1s 就要将时间值减1,刷新LED 数码管。时间到达一个状态所要全部时间,则要进行下一状态判断及衔接,并装入次状态的相应状态码值以及时间值。当开启紧急状态外部中断时,一旦信号有效,中断开始,进入中断服务子程序,倒计时结束后中断结束返回中断前状态。每满一个状态循环周期。
2.1 硬件系统各模块功能简要介绍
2.1.1 各硬件模块介绍
本交通灯硬件模块主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。
a.单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52、复位电路、晶振电路。本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。这样就构成一个稳定的自激振荡器。
b.输入模块:有2个按键,1个电源开关,1个复位键,单片机运行期间,利用按键完成复位操作。3个按键独立式键盘,按左键1使交通灯的正常运行,按左键2启动交通灯应急系统,按左键3键结束。键1、2任一键都独自连一个I/O口线,说明它们可以独立实现相应的交通灯的功能。
c. 输出模块:设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管驱动为三极管驱动。
d.电源模块:直流稳压电源一般由电源变压器、整流滤波电路及稳压电路组成。直流稳压电源设计的主要内容是根据性能指标,选择合适的电源变压器、集成稳压器、整流二极管及滤波电容。本设计中所需要的电源有PC 机的USB 口直接供电,没有设计直流稳压电源,故在此不作详细介绍。
2.2 电路原理图、PCB 图、元器件布局图
见附录A
2.3 元器件清单
见附录B
3.1 单片机资源使用的情况
本设计采用独立式键盘,键盘直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。用到的LED 显示器接到了单片机的P0口线上和P2口线上。
3.2 软件系统模块功能介绍
本设计的软件系统主要采用以下基本模块来实现:主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块。
主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。
中断服务程序:主要是用于交通灯的准确运行、数据输入过程中的闪烁。 数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。 键扫描程序模块:主要是用于确定按键并得到特定的键码值。
3.3 程序流程框图
3.3.1 主程序
主程序的主要功能是负责准备状态提示符“P. ”显示,等待按键按下进入各键功能子程序完成各项功能,其程序流程见图5所示;
图5 主程序流程框图
3.3.2 紧急通道中断服务程序
图6 紧急中断服务程序流程框图
3.3.3 数码管显示子程序
图7 显示子程序框图
3.3.4 键扫描程序
流程框图如8所示;
图8 键盘扫描子程序框
3.4 程序清单
见附录C
4 设计结论及误差分析
4.1 数字电子钟的设计结论及使用说明
4.1.1 设计结论
本课程设计课题是单片机交通灯控制,设计说明书介绍了基于AT89S52单片机的交通灯控制系统的设计,对整个硬件电路和软件程序设计做了分析,文中介绍了交通灯的设计方案选择及原理介绍,加深了51单片机的知识了解,介绍51单片机的结构、特点等。本课程设计说明书对其中的一些基本原理也做了简要的概述。本次课程设计仅仅是对交通灯控制系统做出了一个简单的设计方案,还可以添加人行道、违规检测等方案。
4.1.2 使用说明
(1)在正常情况下,LED 循环说明:
设LED 灯从左至右前六个灯分别为:甲干道绿灯、黄灯、红灯;乙干道绿灯、黄灯、红灯(下面操作显示的各道路灯口皆按此设置)。
交通灯上电后,8位数码管显示初始状态即最右边的一个数码管显示“P. ”。按下左边第一个按键,交通灯进入运行状态,甲干道绿灯亮,乙干道红灯亮,并且同时数码管从57s 开始倒计时;倒计时结束,甲干道绿灯灭,黄灯亮且闪烁,乙干道红红亮,数码管显示倒计时3S ;此次计时结束,甲干道红灯亮,乙干道绿灯亮,同时数码管从27s 开始倒计时;倒计时结束,乙干道绿灯灭,黄灯亮且闪烁,甲干道红灯亮,计时结束,一轮循环就此完成。
(2)紧急情况时:
按下左边第二个键紧急键,交通灯启动紧急状态,甲、乙两干道红灯同时亮起,数码管显示10秒倒计时,倒计时结束后,交通灯系统回到启动紧急情况前的状态,恢复正常通行。
4.2 误差分析
交通灯在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而你开启定时器和开启LED 灯顺序上是有先后的,这个过程需时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到12MHz 的晶振,计算是满20次为一秒钟,但实际会慢很多。
5 设计总结与体会
5.1设计总结
本次课程设计是交通灯的设计,从用Proteus 画原理图、PCB 图到制板,再到编程,通过本次课程设计我学会了很多。首先是学会了利用自己所学的理论知识来解决实际问题,在整个设计过程中,我们把老师以前所讲的芯片的原理、作用及性能都运用到了这次设计中,这样加强了我们对课本知识的理解和巩固。我觉得这次设计不仅加强了我们对课本知识的回顾和温故,而且锻炼了我们运用软件的能力,实现了从理论与实际的结合。其次通过这次课程设计,加强了我们的动手、思考和解决问题的能力。书中的理论有点枯燥,运用书中的知识去调试,那是一种无法比拟的成就感。这样更能激发我们对我们专业的兴趣,和对我们专业知识的理解和掌握,能激发我们对电子科研技术的钻研,增加设计兴趣。
当然,在本次课程设计中也遇到了很多问题,首先对汇编指令不是很了解,一直得翻书;定时器初值的设置需进行计算,定置50ms ;在将程序下载在最小系统,进行实物演练时,发现跳转在甲干道黄灯亮时蜂鸣器会响,开始还以为程序设置错误,仔细检查发现是最小系统在进行实物制作的过程中,将蜂鸣器和LED 灯连在了一条线上。
这次课程设计由于编程能力的有限和所学知识的局限性,在这个程序和设计系统中只实现了所有的基本要求,而且这其中还有许多不完善的地方,这说明我在这方面还存在着很多不足,知识不够完备和系统,在以后的学习中还有待提高。希望老师能在以后的学习和生活中对我多加指导,促使我能取得更大的进步。
5.2 教学建议
通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。
参考文献
[1]马忠梅,单片机的C 语言Windows 环境编程宝典[M], 北京:北京航空航天大学出版社,2003.6
[2]李光飞, 单片机C 程序设计指导[M],北京:北京航空航天大学出版社,2003.01 [3]李光飞, 单片机课程设计实例指导[M],北京:北京航空航天大学出版社,2004.9
[4]李广弟. 朱月秀. 冷祖祁. 单片机基础[M],北京:北京航空航天大学出版社.2007.1
[5]高洪志..MCS-51单片机原理及应用技术教程[M],北京:人民邮电出版社,2009.4
[6]周润景,张丽娜,丁莉. 基于PROTEUS 的电路及单片机设计与仿真[M],北京:北京航空航天大学出版社,2010.01
附录A
电路原理图
:
PCB 图:
布局图:
ORG 0000H LJMP MAIN ORG 000BH LJMP TTC0 ORG 001BH LJMP TTC1 ORG 0030H MAIN:CLR TR0 CLR TR1 MOV P3,#0FFH
MOV PSW,#00H ; MOV SP,#7FH MOV TMOD,#11H MOV TH0,#3CH MOV TL0,#0B0H MOV TH1,#3CH MOV TL1,#0B0H SETB EA SETB ET0 SETB ET1 MOV 78H,#11H MOV 79H,#10H MOV 7AH,#10H MOV 7BH,#10H MOV 7CH,#10H MOV 7DH,#10H MOV 7EH,#10H MOV 7FH,#10H PP:LCALL DIR START:LCALL KEY
JB 20H.0,K0 ; JB 20H.2,MAIN ; LJMP PP
初始化 按下K0,启动计时
运行过程中,按下K2,则结束
K0:SETB TR0 MOV 21H,#00H SETB 21H.1 MOV 78H,#07H
MOV 79H,#05H ;计时57秒 MOV R1,#20 MOV R2,#00H
KK0:JB 20H.1, LOOPX0 ; JB 20H.2, MAIN LCALL KEY LJMP KH0 LOOPX0:CLR 20H.1 LCALL JINJI KH0:LCALL DIR
LJMP KK0 TTC0: PUSH PSW CLR RS0 CLR RS1 MOV TH0,#3CH MOV TL0,#0B0H
DJNZ R1,KL0 ;50ms MOV R1,#20 INC R2 MOV R0,#78H LCALL DADD1 KL0: JB 21H.1, ZHUT1 JB 21H.2, ZHUT2 JB 21H.3, ZHUT3 JB 21H.4, ZHUT4
ZHUT1:CJNE R2,#57,LOOP11 ; MOV R2,#00H CLR 21H.1
SETB 21H.2 ; MOV 78H,#03H
按下JINJI 键,则运行紧急程序 ,循环20次,即1s 不等,则甲绿乙红 相等,则亮黄灯
MOV 79H,#00H LJMP ZHUT2
LOOP11: MOV P3,#0DEH ;甲通道亮绿灯,乙通道亮红灯
LJMP LAST10
ZHUT2: CJNE R2,#03H,LOOP12 MOV R2,#00H CLR 21H.2 SETB 21H.3 MOV 78H,#07H MOV 79H,#02H LJMP ZHUT3 LOOP12: CJNE R1,#10,FH1
MOV P3,#0DDH ;
LJMP LAST10
FH1:MOV P3,#0DFH
LJMP LAST10 ZHUT3: CJNE R2,#27,LOOP13 MOV R2,#00H CLR 21H.3 SETB 21H.4 MOV 78H,#03H MOV 79H,#00H LJMP ZHUT4 LOOP13: MOV P3,#0F3H ; LJMP LAST10 ZHUT4: CJNE R2,#03H,LOOP14
MOV R2,#00H CLR 21H.4 SETB 21H.1 MOV 78H,#07H MOV 79H,#05H LJMP ZHUT1 LOOP14: CJNE R1,#10,FH2 ;
MOV P3,#0FBH
红灯均亮 甲通道亮红灯,乙通道亮绿灯黄灯闪烁
LJMP LAST10
FH2:MOV P3,#0EBH LAST10:POP PSW
RETI
JINJI:PUSH TH0
PUSH TL0 PUSH PSW CLR RS0 SETB RS1
MOV R5,78H ; MOV R6,79H MOV TH1,#3CH MOV TL1,#0B0H MOV R1,#20 MOV R2,#00H MOV 78H,#00 MOV 79H,#01H
CLR TR0 SETB TR1 GHK:LCALL DIR
JB 21H.7,LAST1 LCALL KEY JB 20H.2,KX
LJMP KY
KX:LJMP MAIN KY:CLR 21H.7 LJMP GHK
LAST1:CLR TR1
MOV 78H,R5 ; MOV 79H,R6 SETB TR0 POP PSW
POP TL0
送R5保存 送R5恢复
POP TH0 RET
TTC1: PUSH PSW
CLR RS0 SETB RS1 CLR 21H.7 MOV TH1,#3CH MOV TL1,#0B0H
DJNZ R1,LOP1 MOV R1,#20 INC R2 MOV R0,#78H LCALL DADD1 CJNE R2,#10,LOP1
SETB 21H.7
LOP1: MOV P3,#0DBH
POP PSW
RETI
; 数码管显示子程序 DIR:PUSH DPH PUSH DPL PUSH ACC PUSH PSW SETB RS0 CLR RS1
MOV R0,#78H ; MOV R5,#0FEH ; MOV A, R5 ; LD0:MOV DPTR,#TABLE MOV A,@R0 MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
建立显示缓冲区首址从右边开始显示 位控码初值
MOV P2,A
LCALL DELAY
INC R0 ;转向下一缓冲单元 MOV A,R5 ;位控码
JNB ACC.7,LD1 ;判断是否到最高位,到,则转移 RL A ;不到,显示左移一位 MOV R5,A
;位控码送R5保存
LJMP LD0 ; LD1:POP PSW
POP ACC ; POP DPL POP DPH RET
KEY: LCALL KEYCHULI ; JZ EXIT CLR TR0 LCALL DIR LCALL KEYCHULI JZ EXIT
MOV B,20H KEYSF:LCALL KEYCHULI JZ KEY1 LCALL DIR LJMP KEYSF KEY1:MOV 20H,B
EXIT:RET KEYCHULI:MOV P1,#0FFH MOV A,P1 CPL A ANL A,#0FH MOV 20H,A RET
继续扫描
恢复现场 键扫程序
DELAY: MOV R7,#01H
MOV R6,#0F0H
KF0: DJNZ R6,KF0
MOV R6,#0FFH
DJNZ R7,KF0
RET
; 减一子程序:
DADD1: PUSH ACC
MOV A,@R0
DEC A
CJNE A,#0FFH,LGH0
LJMP LGH1
LGH0: MOV @R0,A
LJMP LAST0
LGH1: MOV A,#09H
MOV @R0,A
INC R0
MOV A,@R0
DEC A
MOV @R0,A
LAST0: POP ACC
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H ; 0-6 DB 0F8H,80H,90H,88H,83H,0C6H,0A1H ; 7-D DB 86H,8EH,0FFH,0CH ; E-F, END
灭,P. 20