基于51单片机-简单交通灯控制文档格式.doc
《基于51单片机-简单交通灯控制文档格式.doc》由会员分享,可在线阅读,更多相关《基于51单片机-简单交通灯控制文档格式.doc(20页珍藏版)》请在冰点文库上搜索。
4
南北黄灯,东西红灯
4秒
5
南北红灯,东西绿灯
30秒
6
南北红灯,东西绿灯闪烁3次
7
南北红灯,东西黄灯
8
转过程2,循环执行
(2)应用两位动态显示的LED显示器倒计时显示通行时间,总时间应包含绿灯闪烁和黄灯亮的时间。
(3)当绿灯闪烁和黄灯亮时,蜂鸣器发声提示。
扩展功能:
处理紧急状况,由按键引发外部中断进入紧急状况。
在紧急状况下东西、南北均为红灯,15秒钟后恢复进入紧急状况之前的正常运行状态。
1.3材料清单
本设计中所需的材料如表2所示:
表2.材料清单
序号
数量
直流电机的控制
规格
交通灯模拟模块
独立式按键
2、整体方案设计
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了紧急情况处理与时间调整功能。
单片机
最小系统
外围接口电路
LED数码管显示
红黄绿信号灯
按键
控制电路
图1.系统的总体框图
3、硬件设计
3.1交通灯模组
本系统中使用的所使用的交通灯系统为凌阳科技股份有限公司生产的交通灯模组V3.0。
本系统为一套交通灯系统:
包括一块驱动电路板(交通灯模组V3.0_驱动板)和四块LED板(交通灯模组V3.0_LED板)。
1)LED板中每个方向提供四组交通LED灯(包括左转、直行、右转、人行道四组),每组交通灯包括红、黄、绿三个灯,可以实现交通的通行控制;
2)LED板中每个方向提供两个数码管,可以实现100以内的倒计时。
本系统包含一块驱动板和四块LED板,驱动板框图如图2.1:
其中J1、J2、J3、J4为LED板的插接口,使用时可以直接把四块LED板插接在驱动板上;
J5、J6、J7是单片机的接口,使用时可以直接用3根10pin排线与单片机连接;
驱动电路模块用来驱动LED灯和数码管。
驱动板结构框图如图2所示,交通灯模组电路图及单片机的接口电路如图3所示。
图2.交通灯模组V3.0_驱动板结构框图
3.2按键设计
本设计中要求用按键实现紧急状态触发与解除,所以使用独立式按键实现。
按键部分电路图如图4所示。
图4.按键部分电路图
3.3功率驱动电路
对单片机发出的脉冲信号进行放大,来支持交通灯模组的运转。
功率驱动电路如图5所示。
图5.驱动电路图
3.4交通灯模组电路
使用交通灯模组来实现简易交通灯的控制。
交通灯模组电路如图6所示。
图6.交通灯模组电路
3.5蜂鸣器部分
在东西和南北向绿灯闪烁和黄灯亮时,蜂鸣器响以提醒行人。
蜂鸣器部分电路图如图7所示。
图7.蜂鸣器电路图
4、软件设计
4.1程序主体设计流程
本设计的主体思路是:
采用顺序控制,每个状态设置相应的标志位,分别写出每个状态LED灯和数码管显示的情况,当定时中断来临后,判断是否改变状态;
若进入下一个状态,则改变相对应的变量,反之则循环执行显示子程序。
4.2主程序设计
主程序中主要是进行系统的初始化,设置系统相应的标志位,判断是否中断,并且调用相应的子程序。
主程序流程图如图8所示。
图8.主程序流程图
4.3定时器子程序设计
定时器可以使用查双字表,也可以通过设定一个基本定时时间再循环来实现。
在本次设计中,使用第二种定时方案比较简单;
再根据定时器四种工作方式以及本次设计的要求,所以使用定时器0,工作方式TMOD=1,根据所需定时时间的分析,设定定时器的基本定时时间为t=50ms,计算计数初值:
X=216-50*10-3*12*106/12=63163=3CB0H,即定时器初值为:
TH1=3CHTL1=0B0H
定时器子程序流程图如图10所示
图10.定时器部分流程图
4.4显示子程序设计
显示子程序中,实现LED灯的亮灭以及数码管的倒计时显示,数码管的显示采用动态显示。
显示子程序流程图如图9所示。
图9.显示子程序流程图
5、系统调试及结果
5.1列出调试内容、调试方法以及具体步骤
调试内容及具体操作控制方法如下:
当程序开始执行时,各个路口的灯及显示器显示按照表3所示进行变化。
其中数码管显示使用倒计时
表3.交通灯控制顺序
具体调试方法为断点调试方法,单步执行。
5.2说明调试中出现的问题及解决方法
1.在实现灯闪烁的时候,一开始不知道如何实现,后来经过讨论,决定用查表方式来实现灯闪烁。
2.数码管显示的数字一开始变化太慢,为了节省时间,后来将基本定时时间缩短了一倍,数字变化就变快了,节省了时间。
6、设计总结
这次的设计是做一个交通灯,题目虽然很简单,但是我们也遇到了不少困难,在编程仿真的时候,很多时候都达不到我们想要的效果,我们就三个人一起讨论,一遍一遍的修改程序,最终实现了我们想要的结果。
布线是很关键的一步,怎样布线才能使电路看起来不乱,电路看起来美观非常重要,我们一起讨论,一起尝试,终于达到了比较满意的效果。
程序的设计业是非常重要的,从开始的不太理解,通过不断地尝试,最后终于达到了比较满意的结果,达到了本次设计的基本要求。
在这次的设计过程中,我们三人相互配合,相互磨合,都有了默契,为以后的设计做了很好的铺垫。
7、参考资料
1.参考教材一:
《单片机接口技术实训指导书》
作者:
北京联合大学机电学院
2.参考教材二:
《微机原理与接口技术实验指导书2009》
3.参考教材三:
《单片机应用技术》,科学出版社
赵林惠
8、附件
8.1系统电路原理图;
见附录I
8.2程序清单及注释。
见附录II
组员签字:
、
附录I系统电路原理图
附录II程序清单及注释
;
-------------------------------------------------------------------------------------------------
BZ1BIT40H
BZ2BIT41H
BZ3BIT42H
BZ4BIT43H
BZ5BIT44H
BZ6BIT45H
BZ7BIT46H
BZ8BIT47H
--------------系统初始化---------------------
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT_0
ORG000BH
AJMPT_0
ORG0050H
MAIN:
MOVTMOD,#01H ;
使用定时器T0状态1
MOVTH0,#3CH ;
定时50ms
MOVTL0,#0B0H
SETBEA
SETBIT0 ;
使用外部中断0
SETBEX0
SETBET0
SETBBZ1
MOVP0,#00H ;
对输出口清零
MOVP1,#00H
MOVP2,#00H
SETBP3.0
MOVR1,#10 ;
对运行中间值设置初值
MOVR2,#10
MOVR4,#10
MOVR5,#10
MOVR6,#15
SETBTR0 ;
打开定时器T0,开始计时
//--------------------计时和红绿灯显示-------------------------------------
DISPLAY:
ACALLLOOP
SJMPDISPLAY
LOOP:
MOVA,R4 ;
南北向计时显示
MOVDPTR,#TAB_1
MOVCA,@A+DPTR
MOVR3,A
ANLA,#0FH
MOVDPTR,#TAB_2
MOVCA,@A+DPTR
MOVP0,A
MOVP2,#22H
ACALLDELAY
MOVP0,#00H
MOVA,R3
SWAPA
MOVP2,#11H
MOVA,R5 ;
东西向计时显示
MOVR6,A
MOVP2,#88H
MOVA,R6
MOVP2,#44H
D1:
JNBBZ1,D2 ;
东西红灯,南北绿灯
MOVP0,#08H
MOVP1,#11H
MOVP0,#08H
MOVP1,#44H
AJMPD8
D2:
JNBBZ2,D3 ;
MOVP0,#20H
ACALLDELAY
D3:
JNBBZ3,D4 ;
南北绿灯闪烁三次,东西红灯,蜂鸣器响
CLRP3.0
MOVA,R4
MOVDPTR,#TAB_3
D4:
JNBBZ4,D5 ;
南北黄灯,东西红灯,蜂鸣器响
MOVP0,#10H
MOVP0,#08H
SJMPD8
D5:
JNBBZ5,D6 ;
MOVP0,#20H
D6:
JNBBZ6,D7 ;
南北红灯,东西绿灯闪烁三次,蜂鸣器响
MOVA,R5
MOVP0,A
D7:
JNBBZ7,JJ ;
南北红灯,东西黄灯,蜂鸣器响
MOVP0,#10H
JJ:
D8:
RET
//-------------定时T0中断----------------------------------
T_0:
MOVTH0,#3CH
DJNZR2,K2
MOVR2,#10
LOOP1:
JNBBZ1,LOOP2 ;
判断是否处于标志位1,即状态1
DJNZR1,K1 ;
进行状态1的运算
CLRBZ1
SETBBZ2
MOVR1,#40
MOVR4,#46
MOVR5,#50
AJMPEXIT_0
LOOP2:
JNBBZ2,LOOP3 ;
判断是否处于标志位2,即状态2
DJNZR1,K1 ;
进行状态2的运算
CLRBZ2
SETBBZ3
MOVR1,#6
MOVR4,#6
DECR5
SJMPEXIT_0
LOOP3:
JNBBZ3,LOOP4 ;
判断是否处于标志位3,即状态3
DJNZR1,EXIT_1 ;
进行状态3的运算
CLRBZ3
SETBBZ4
MOVR1,#4
MOVR4,#4
DECR5
LOOP4:
JNBBZ4,LOOP5 ;
判断是否处于标志位4,即状态4
进行状态4的运算
CLRBZ4
SETBBZ5
MOVR1,#30
MOVR4,#40
MOVR5,#30
LOOP5:
JNBBZ5,LOOP6 ;
判断是否处于标志位5,即状态5
进行状态5的运算
CLRBZ5
SETBBZ6
MOVR5,#6
DECR4
K2:
K1:
SJMPEXIT_1
LOOP6:
JNBBZ6,LOOP7 ;
判断是否处于标志位6,即状态6
DJNZR1,EXIT_1 ;
进行状态6的运算
CLRBZ6
SETBBZ7
MOVR5,#4
LOOP7:
JNBBZ7,LOOP8 ;
判断是否处于标志位7,即状态7
进行状态7的运算
CLRBZ7
MOVR5,#50
LOOP8:
JNBBZ8,EXIT_0
DJNZR1,EXIT_1
SETBBZ2
CLRBZ8
EXIT_1:
DECR4
EXIT_0:
RETI
///////////////外部中断////////////////////////////
INT_0:
//PUSH28H
CLRBZ1
CLRBZ7
SETBBZ8
MOVR4,#15
MOVR5,#15
MOVR1,#15
LCALLLOOP
RETI
//---------------------延时程序-----------------------------
DELAY:
MOVR7,#0FAH
DJNZR7,$;
延时1ms子程序
TAB_1:
DB00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,20H,21H,22H,23H,24H,25H,26H,27H,28H,29H,30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,40H,41H,42H,43H,44H,45H,46H,47H,48H,49H,50H
TAB_2:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
TAB_3:
DB00H,20H,00H,20H,00H,20H,00H
END