基于单片机的交通灯设计.docx
- 文档编号:13574692
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:29
- 大小:811.56KB
基于单片机的交通灯设计.docx
《基于单片机的交通灯设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯设计.docx(29页珍藏版)》请在冰点文库上搜索。
基于单片机的交通灯设计
重庆三峡学院
课程设计报告书
题目:
基于单片机的交通灯设计
学院(系):
应用技术学院
年级专业:
09级电信(职教)
学号:
200915254137
学生姓名:
蒋流洲
指导教师:
谢辉
教师职称:
副教授
制作日期2011年12月29日
目录
1引言3
1.1设计目的3
1.2设计意义3
2设计方案4
2.1方案论证4
2.2方案设计4
3硬件系统设计5
3.1引脚说明5
3.2复位部分电路设计6
3.3时钟部分电路设计7
3.4显示部分电路设计8
4软件系统设计8
4.1应用系统设计要求8
4.2主程序模块设计8
5实验结果与分析10
5.1调试分析10
5.1.1软件调试10
5.1.2系统功能测试10
6心得体会11
参考文献11
附录1系统原理图11
附录2程序清单11
附录3原件清单19
附录4部分芯片管脚图20
附录5软件仿真21
附录6硬件仿真22
一、引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
1.1设计目的
本设计是《单片机原理与应用》课程综合训练,可以通过理论学习,资料查阅,软,硬件设计,系统调试等环节,巩固和提高所学的知识和应用水平。
学会提出问题,观察和分析问题,得到最终的科学方法。
培养严谨的工作作风,务实的工作态度。
为今后的毕业设计,及从事单片机控制系统的设计与维护奠定坚实的基础。
1.2设计意义
本设计的意义在于通过具体的控制系统的设计,掌握单片机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。
使我们能在实践教学环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力。
二、设计方案
2.1方案论证
利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
用红、绿、黄发光二极管作信号灯。
如图上图所示。
(1)处于常允许通行的状态,支干道有车来时才允许通行。
南北亮绿灯时,东西亮红灯;东西亮绿灯时,南北亮红灯。
(2)干道均有车时,两者交替允许通行,主干道每次放行60秒,黄灯闪烁5秒,设立60秒、5秒计时、显示电路。
2.2方案设计
单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB的FLASHROM,设计时无需外接程序存储器,为设计和调试带来极大的方便。
南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。
实验程序框图
三、硬件系统设计
3.1MCS-51的引脚说明
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
Pin9:
RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
3.2复位部分电路设计
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
该设计采用加电直接复位,复位电容采用22uF,电阻8.2k欧,为了节省元件,没有采用上电加按键模式。
加电瞬间,RES管脚为高电平。
通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。
手动复位电路
3.3时钟部分电路设计
时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。
其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。
本设计采用12MHz晶振和两个30Pf瓷片电容,他们构成一个稳定的自激振荡器。
该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
为单片机提供标准时钟。
其中两个瓷片电容起微调作用。
晶振电路
3.4显示部分电路设计
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,但是我们选用的是共阴极数码管,需要加排阻和74LS240进行驱动。
四、软件系统设计
4.1应用系统软件设计要求
在进行应用系统的总体设计时,软件设计与硬件设计应统一考虑,相结合进行。
当系统的电路设计定型以后,软件的任务也就明确了。
一般来说,软件的功能可分为两大类。
一类是执行软件,它能完成各种实质性的功能,如测量计算、显示、打印、输出控制等;另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织协调角色。
我们设计时,应从以下几个方面考虑:
1)根据软件功能的要求,将系统软件分为若干个相对独立的部分。
设计出合理的软件总体结构,使其清晰、简捷、流程合理。
2)各功能程序实行模块化、子程序化。
3)在编写应用软件之前,应绘制出程序流程图。
4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。
本设计采用了模块化设计,主要由主程序模块、功能实现模块两大部分模块组成。
4.2主程序模块设计
主程序流程图如下图所示:
交通灯控制系统设计思路
P1口:
P1.5—P1.0红黄绿红黄绿对应口低电平灯亮
控制灯程序流程图如下:
程序见附录二:
程序清单
五、实验结果与分析
1.调试分析
1.1软件调试
本程序有一个交通灯运行主程序,一共包括四个部分程序:
显示器动态扫描子程序,码表刷新子程序,紧急外中断,交通灯定时中断服务子程序,四个子程序融合调试而成。
1.2系统单元测试。
接硬件图接线,为了确保东西南北红黄绿灯能够对应显示,实验时,对P1口的接线做了调整。
即,P1.0接红1,P1.1接黄1,P1.2接绿1,P1.3接红2,P1.4接黄2,P1.5接绿2。
本系统由单片机系统、LED显示、交通灯演示系统组成。
最后,系统要求实现如下的交通灯的功能:
1)接通电源后,将显示模块的程序编译后烧进单片机电路板里,如若看到红灯全亮两秒后,跳转为一红一绿,码表计时60秒;
2)在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道;
3)黄灯亮时,要求每秒闪亮一次,闪烁5次,计时5秒;
4)黄灯闪烁后跳转为红灯,另一方向红灯则跳为绿灯;
5)计时60秒,绿灯再次跳转为黄灯,闪烁,红灯跳转为红灯,车辆放行;
6)在交通灯运行正常的情况下,将P3.2口所接的控制开关,拨为低电平,交通灯全部跳转为红灯亮,可供紧急车辆通行;
7)照此循环下去没有问题就证明该显示模块的测试成功。
六、心得体会
这次课程设计经过2个周的努力才艰难完成,可以说一波多折。
从查资料,整理资料到读程序,写程序,改程序,仿真直至通过老师的验收,一切都充满了刻苦与艰辛,但是不管怎样终究是成功完成了。
其间遭遇了诸多困难最后还是一一解决,实验中还是蛮充实的!
令我感触最深的就是同学们倾心的帮助,由于我的《单片机原理与应用技术》学的并不是很好,所以对某些知识点并不是很清楚,可是同学们总是不厌其烦的给我一遍又一遍的讲解,直到我弄清楚为止!
他们的知识阅历另我打开眼界,他们的无私精神更另我感动不已!
通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
对交通灯的工作原理熟悉掌握,软件基本能懂。
创设计过程,整体电路良好,布线美观。
在完成硬件中出现了复位电路不起作用,通过万用表检查复位电路电容击穿,导致复位电路不正常。
我们换了同型号的电解电容后,复位电路正常。
那一刻,我太开兴了。
也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
参考文献:
1、杨居义《单片机课程设计实例教程》清华大学出版社
2、王义军《单片机原理及应用习题与实验指导书》中国电力出版社
3、谢辉《单片机原理及应用》化学工业出版社
4、刘国荣,《单片微型计算机技术》,机械工业出版
5、谢自美,《电子线路设计·实验·测试》,华中理工大学出版社
6、周立功,《增强型80C5单片机速成与实战》,北京航空航天大学出版社
附录1:
附录二:
程序清单
;带外中断(即紧急车辆通行)和显示的交通灯控制系统,20110628调试通过
;设计思想:
系统初始化,主程序循环调用拆字子程序和显示器扫描子程序。
定时器定时50ms,定时中断服务子程序中调用显示缓冲区刷新和交通灯状态变换子程序。
;当有紧急车辆(用外中断模拟)通行时,四个路口全部红灯,定时器停止,当外中断撤销后,四个路口恢复正常状态。
;入口:
(zt)=状态值
;出口:
(P1)=交通灯状态值刷新
;主要子程序名称:
;MAIN:
主程序
;SSEE:
六位数码管动态扫描子程序
;PTDS0:
拆字子程序
;CLOCK:
T0中断服务子程序
;MBXS:
码表刷新判断子程序
;JTDZT:
交通灯状态判断子程序
;JJCL:
紧急车辆通行子程序
;ZMPD:
整秒到判断子程序
;HBCD:
单字节十六进制整数转换为单字节BCD码整数
;**************************************
;内存单元及状态标志定义
ZT0EQU0F6H;状态0,四个路口红灯亮==2秒
ZT1EQU0DEH;东西红南北绿==60秒
ZT2_1EQU0EEH;东西红南北黄
ZT2_2EQU0FEH;东西红南北全灭==5秒
ZT3EQU0F3H;东西绿南北红==60秒
ZT4_1EQU0F5H;东西黄南北红
ZT4_2EQU0F7H;南北红南北全灭==5秒
STATEEQU40H;状态标志单元
MARKBIT00H;黄灯闪烁标志位
XS0EQU79H;显示缓冲单元0,对应最右边数码管
XS1EQU7AH
XS2EQU7BH
XS3EQU7CH;显示缓冲单元4,对应最左边数码管SOURCE=7C;4个数码
TIME1EQU46H;秒单元(十六进制)
TIME2EQU41H;秒单元(十进制BCD码)
;**************************************
ORG0
LJMPMAIN
ORG0003H;外中断0(紧急车辆)处理子程序入口
LJMPJJCL
ORG000BH;定时器T0中断入口
LJMPCLOCK
;**************************************
;标号:
MAIN。
主程序。
完成系统初始化,循环调用数码管扫描子程序,拆字子程序,等待定时中断。
;**************************************
ORG0030H
MAIN:
MOVSP,#50H;调整堆栈指针MODIFY=50HSOURCE=60
MOVPSW,#00H;设置工作寄存器为0区
LCALLCSH;调初始化子程序
LOOP:
LCALLSSEE;调动态扫描子程序
LCALLPTDS0;调拆字子程序
SJMPLOOP
;**************************************
;系统初始化子程序
;**************************************
CSH:
MOVXS3,#0AH;显示缓冲区全部送“灭”代码序号
MOVXS2,#0AH
MOVXS1,#0AH
MOVXS0,#0AH
MOVTIME1,#02;状态0持续为2s
MOVTIME2,#02
MOVTMOD,#01H;定时器T0,方式1
MOVTL0,#0B0H;定时50ms
MOVTH0,#3CH
CLRIT0;设置外中断0为电平方式工作
SETBPX0;设置外中断0为高级中断
ORLIE,#83H;开放外中断0和T0中断
MOVSTATE,#00H;进入状态0
MOVP1,#ZT0;状态0,四个路口红灯亮
MOVR6,#00H
MOVR5,#00H;软件计数器初始化
SETBTR0;启动T0
RET
;**************************************
;标号CLOCK,T0中断服务程序。
根据交通灯状态变化表规定的定时时间依次切换P1口输出状态。
;使用资源:
Acc,B,R6,R5,R7,P1
;**************************************
ORG0100H
CLOCK:
MOVTH0,#03CH;T0重赋初值==50ms
MOVTL0,#0B0H
PUSHPSW;保护现场
PUSHACC
SETBRS0;切换寄存器工作区
INCR6;定时器计数单元加1
LCALLMBXS;调码表刷新判断子程序
LCALLJTDZT;调交通灯状态判断子程序
CLRRS0;恢复寄存器工作区为0区
POPACC;恢复现场
POPPSW
CRETUN:
RETI;中断返回
;**************************************
;标号MBXZ,码表状态刷新判断子程序。
;根据交通灯状态变化表规定的定时时间依次切换P1口输出状态。
;使用资源:
Acc,R6,R5,R7,P1
;**************************************
MBXS:
PUSHPSW;保护现场
PUSHACC
MOVA,R6
LCALLZMPD;调整秒到判断子程序
MOVA,TIME1;将十六进制秒数值转换为BCD码秒数值
LCALLHBCD
MOVTIME2,A
DONE:
POPACC;恢复现场
POPPSW
RET;子程序返回
;**************************************
;标号ZMPD,整秒到判断子程序。
;设计思路:
根据R6软件计数器的值判断。
因为T0硬件定时器是定时50ms,R6单元每计数20次,即为1s。
根据R6单元能否被20整除,即可判断整秒到否。
到整秒,则TIME1计数单元减1,实现倒计时计数。
;**************************************
ZMPD:
MOVB,#20
DIVAB;判断整秒到否?
A/B商存于A,余数存于B
MOVA,B
JNZRETN;整秒未到,返回
DECTIME1;整秒到,TIME1单元减1
RETN:
RET
;*************************************************************
;标号HBCD,功能:
单字节十六进制整数转换为单字节BCD码整数
;入口:
(A)=待转换的单字节十六进制整数数
;出口:
(A)=转换完成的BCD码整数(十位和个位),(R3)=百位
;影响资源:
A、B、PSW、R3堆栈需求:
2字节
;*************************************************************
HBCD:
MOVB,#100
;SUBBA,#16
;MOVB,#60;MODIFYSOURCE=100
DIVAB
MOVA,B
MOVB,#10
DIVAB
SWAPA
ORLA,B
RET
;**************************************
;标号JTDZT,交通灯状态判断子程序。
;根据交通灯状态变化表规定的定时时间依次切换P1口输出状态。
;使用资源:
Acc,R6,R5,R7,P1
;**************************************
JTDZT:
MOVA,STATE;初始赋值00H,0状态
CJNEA,#00H,STATE1;是状态0吗?
CJNER6,#40,ZHUANYI;状态0的2s时间到吗?
MOVSTATE,#01H;切换到状态1
MOVP1,#ZT1;东西红南北绿
MOVTIME1,#3BH
MOVR6,#0;计数器清0
LJMPRTN;中断返回
STATE1:
MOVA,STATE
CJNEA,#01H,STATE2_1;是状态1吗?
CJNER6,#100,ZHUANYI;状态1的60s时间到吗?
MOVR6,#00
INCR5;初始R5=00
CJNER5,#12,ZHUANYI
MOVR5,#00H
MOVSTATE,#02H;切换到状态2_1
MOVP1,#ZT2_1;东西红,南北黄
MOVTIME1,#05H
MOVR7,#5;黄灯闪烁5次
CLRMARK;设定状态2黄灯闪烁标志位为0
LJMPRTN
ZHUANYI:
LJMPRTN
STATE2_1:
MOVA,STATE
CJNEA,#02H,STATE3;是状态2吗?
不是,转状态3
JBMARK,STATE2_2;黄灯标志为1,转状态2_2
CJNER6,#10,RTN;黄灯亮0.5s
SETBMARK;黄灯亮0.5s后,切换到状态2_2
MOVR6,#00H;计数器清0
LJMPRTN;中断返回
STATE2_2:
MOVP1,#ZT2_2;东西红灯亮
CJNER6,#10,RTN;黄灯灭0.5s
CLRMARK;黄灯灭0.5s后,切换到状态2_1标志
MOVR6,#00H
MOVP1,#ZT2_1;切换到状态2-1
DJNZR7,STATE2_1;黄灯闪烁5遍到否?
SSEE;;MODIFY
MOVR6,#00H;计数器清0
MOVSTATE,#03H;切换到状态3
MOVP1,#ZT3;东西绿南北红
MOVTIME1,#3BH
LJMPRTN;中断返回
STATE3:
MOVA,STATE;
CJNEA,#03H,STATE4_1;是状态3吗?
CJNER6,#100,RTN;状态3的60s时间到吗?
MOVR6,#00
INCR5
CJNER5,#12,RTN
MOVR5,#00H
MOVSTATE,#04H;切换到状态4_1
MOVP1,#ZT4_1;切换到状态4_1
MOVTIME1,#05H
MOVR7,#5;黄灯闪烁5次
CLRMARK;设定状态4黄灯闪烁标志位为0
LJMPRTN;中断返回
STATE4_1:
MOVA,STATE
CJNEA,#04H,STATE1;是状态4吗?
不是,转状态1
JBMARK,STATE4_2;黄灯标志为1,转状态4_2
CJNER6,#10,RTN;黄灯亮0.5s
SETBMARK;黄灯亮0.5s后,切换到状态4_2
MOVR6,#00H;计数器清0
LJMPRTN;中断返回
STATE4_2:
MOVP1,#ZT4_2;切换到状态4_2
CJNER6,#10,RTN;黄灯灭0.5s
CLRMARK;黄灯灭0.5s,切换到状态4_1标志
MOVR6,#00H
MOVP1,#ZT4_1;切换到状态4-1
DJNZR7,STATE4_1;黄灯闪烁5遍到否?
SSEE;;;;;;;MODIFY
MOVR6,#00H;计数器清0
MOVSTATE,#01H;切换到状态1
MOVP1,#ZT1;东西红南北绿
MOVTIME1,#3BH
RTN:
RETI
;***********************************************
;标号SSEE,显示缓冲区设置在7CH~79H,对应从左到右的4个数码管。
;数码管段控口采用74LS240反相驱动器,位控口采用7407(或75451)同相驱动器,数码管为共阴极。
;动态扫描子程序运行一次,对4位数码管从左
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 交通灯 设计