第三章 交通灯单片机控制
3.1 硬件电路
3,1.1芯片选用:
选用设备8031单片机一片,8255并行通用接口芯片一片,74LS07,MAX692“看门狗”一片,共阴极的七段数码管两个,双向晶闸管若干,7805三端稳压电源一个,红、黄、绿交通灯各两个,开关键盘、连线若干。
3.1.2 硬件电路图:
3.1.3 系统工作原理:
1.开关键盘输入交通灯初始时间,通过8051单片机P1输入到系统。
2.由8051单片机的定时器每秒钟通过P0口向8255的数据口传送信息,由8255的PA口显示红、绿、黄等的燃亮情况;由8255的PC口显示每个灯的燃亮时间。
3.8051通过设置各个信号等的燃亮时间,通过8031设置,绿、红时间分别为60秒,80秒循环由8051的P0口向8255的数据口输出。
4.通过8051单片机的P3.0位来控制系统的工作或设置初值,当牌位0就对系统进行初始化,为1系统就开始工作。
5.红灯倒计时时间,当有车辆闯红灯时,启动蜂鸣器进行报警,3S后恢复正常。
6.增加每次绿灯时间车流量检测的功能,并且通过查询P2.0端口的电平是否为低,开关按下为低电平,双位数码管显示车流量,直到下一次绿灯时间重新记入。
7.绿灯时间倒计时完毕,重新循环。
3.2 软件设计
3.2.1每秒钟的设定:
利用MCS-51内部定时器材溢出中断来确定1秒的时间。
3.2.2 计数器初值计算:
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的,他是以加法计数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC,即:
TC=M-C;式中,M为计数器模值,该值和计数器工作方式有关,在方式0时M为213;在方式1时M的值为216;在方式2和3时为28。
3.2.3 综合计算:
T=(M-TC)T1 或者 TC=M-T/T1 式中T1是单片机时钟周期的12倍;TC为定时初值。这种方法在使用后悔超过计数器的最大定时间,所以再采用定时器和软件相结合的办法。
3.2.4 设定一秒的方法:
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒,这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序,在中断子程序中,CPU先使软件计数器减1,然后判断它是否为零,为零表示1秒已到可以返回到输出时间显示程序。
3.2.5 程序设计:
1.主程序:
定时器定时50毫秒,故T0工作于方式1,初值:
TC=M-T/T1=216-50ms/1us=3CBOH
ORG 1000H
START:MOV TMOD, #01H; 令T0为定时器方式1
MOV TH0, #3CH; 装入定时器初值
MOV TL0, #BOH;
MOV IE, #82H; 开T0中断
SEBT TR0; 启动T0计数器
MOV R0, #14H; 软件计数器赋初值
LOOP: SJMP S; 等待中断
2.中断服务子程序:
ORG 000BH
AJMP BRT0
ORG 00BH
BRT0:DJNZ R0,NEXT AJMP TIME; 跳转到时间及信号灯显示子程序
DJNZ:MOV R0,#14H; 恢复R0值
MOV TH0,#3CH; 重装入定时器初值
MOV TL0,#BOH;
MOV IE, #82H
RET1
END
3.3 软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8051单片机的工作频率为6MHX,机器周期与主频由关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/6M)=2us,我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
3.4时间及信号灯显示
当定时器定时为1秒时,程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后再重新给时间计数器赋初值,重新进入循环。由于发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以可以用复位方法点亮红,绿,黄发光二极管。
3.5 程序
实现交通灯的交替控制及特殊情况(如急救车等)通过时 ,通过外中断实现:
North_South_Red BIT P1.0
North_South_Yellow BIT P1.1
North_South_Green BIT P1.2
East_West_Red BIT P1.3
East_West_Yellow BIT P1.4
East_West_Green BIT P1.5
Scd EQU 30H ;秒
ORG 0000H
JMP START
ORG 0003H
JMP INIT0
ORG 000BH
JMP TIME0
交通灯交替工作时,红绿黄交替点亮: 红灯亮33秒钟后绿灯亮27秒,然后闪烁3秒,最后黄灯点亮三秒 ,循环。
TIME0:
MOV TH0,#30H
MOV TL0,#0B0H
INC 31H
MOV A,31H
N: CJNE A,#20,EXIT ;判断是否到一秒
MOV 31H,#0
INC Scd
MOV A,Scd
CJNE A,#27,NEXT1 ;判断绿灯是否到27s
SETB F0
JMP EXIT
NEXT1: MOV A,Scd
CJNE A,#30,NEXT2 ;判断绿灯是否亮30s
CLR F0
MOV P1,#0EEH
JMP EXIT
NEXT2:
MOV A,Scd
CJNE A,#33,NEXT3
MOV P1,#0F3H ;初始化
NEXT3:
MOV A,Scd
CJNE A,#60,NEXT4
SETB 00H
JMP EXIT
NEXT4: MOV A,Scd
CJNE A,#63,NEXT5
CLR 00H
MOV P1,#0F5H
JMP EXIT
NEXT5: MOV A,Scd
CJNE A,#66,EXIT
MOV P1,#0DEH
MOV Scd,#0
EXIT: RETI
外中断:东西方向出现特殊情况 时南北红灯亮,东西绿灯亮,延时10s。
INIT0:
PUSH PSW
PUSH ACC
CLR EA
MOV R2,P1 ;保存数据
MOV P1,#0F6H
CALL DELLAY10S
MOV P1,R2 ;恢复
SETB EA
POP ACC
POP PSW
RETI
主程序:
START:
MOV Scd, #00H
MOV 31H, #00H
MOV P1, #0FFH
CLR 00H
CLR F0
MOV TMOD, #01H ;设定定时器1
MOV IE, #83H ;设定中断使能 定时器中断0、外部中断0和1
MOV SP, #60H
MOV TH0, #30H
MOV TL0, #0B0H
SETB TR0
LOOP:
JNB F0,N0
CPL East_West_Green ;绿灯闪三秒
CALL DELAY500MS
JMP N1
N0:
JNB 00H,N1
CPL North_South_Green ;绿灯闪三秒
CALL DELAY500MS
N1:
JMP LOOP第四章 总结
本系统实现了红、绿灯燃亮时间的功能,红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示。车辆闯红灯报警;绿灯时间可检测车流量并可通过双位数码管显示。系统不足之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。这是由于本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现。
通过此次课题的研究,让我更加深入的了解了单片机的一些功能,对于单片机在日常生活中的运用有了更深层次的了解。在研究时也发现了自身对于单片机的不理解之处,并查看相关书籍等资料解决了不懂的问题。结合实际工作中的实践,和这次的毕业论文撰写,了解了很多也学到了很多。同时,对以前所学的专业知识,有了进一步的加深和巩固。
参考文献
[1] 张国锋.单片机原理及应用[J].高等教育研究,200.9.8
[2] 张毅坤.单片微型计算机原理及运用,西安电子科技大学出版社,1998
[3] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004.5
[4] 胡乾斌.单片机原理与应用[M].华中科技大学出版社.2006
[5] 张毅刚.单片机原理及接口技术[M].哈尔滨:哈尔滨工业大学出版社,1990
[6] 雷丽文.微机原理与接口技术,北京:电子工业出版社,1997.2
[7] 余锡存 曹国华.单片机原理及接口技术,陕西:西安电子科技大学出版社,2000.7
致谢
通过这段时间的研究设计学习,我学到了很多以前不知道的知识,并且在学习中培养了一种做事情一丝不苟的态度和耐心,为以后的工作打下了坚实的基础。
在此我要向我们论文的指导老师表示衷心的感谢,可以让我通过这次机会系统学习了单片机的有关知识,并能具体结合实践生活完成交通灯的设计,他幽默,风趣,严谨的教学作风将是我学习的榜样。