Ⅰ 基于单片机的交通灯控制系统设计(课设)
不知道你远程控制系统是机器自动完成还是人工。如果要自动检测车流量,你需要一个红外线或者超声波传感器,接在中断口上,在路口前方x米的地方计数,然后用有线或者无线的方式传送给主控器,主控器根据两方四个计数器的计数来比较,按百分比分配时间。
然后控制相应的灯亮。
灯用发光二极管做,三色的四组,共阴,io口输出高电平亮。
还是比较简单的,毕业设计自己做吧,原理是这样。如果有人帮你做了,你还是不会。以后出来找工作,靠的还是本事哦。
Ⅱ 用单片机做交通灯,这么做
基于单片机的交通灯设计
时间:2010-12-08 21:43:12 来源: 作者:
一、 系统功能要求:
1. 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。
时间方向 控制要求
白天 东西 绿灯 黄灯 红灯 南北 红灯 绿灯 黄灯
晚上 东西 黄灯 南北 红灯
2.总体设计方案现在流行的一种设计为两主干线相交的十字路。本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。
二、 总体设计方案提示:
1.假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态。
2.东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态。
3.南北绿灯通车,东西红灯。过一段时间转状态。
4.南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。
三.硬件设计
电路原理图如下:
四、软件设计
1、 流程图
2、程序设计
ORG 0000H
MOV P0,#00H ;确保P0为低电位
lJMP MAIN0
ORG 0030H
MAIN0: MOV 30H,#08H
MOV R6,#00H
MOV R7,#00H
MOV DPTR,#TABLE ;取数码管的译码
MOV TMOD,#01H ;设计定时方式及时间
MOV TL0,#0CDH
MOV TH0,#0BH
SETB TR0
MOV IE,#00H
MAIN: MOV P1,#0F3H ;南北绿灯,东西红灯
MOV R6,#1EH ;红灯30s倒计时
MOV R7,#19H ;绿灯25s倒计时
MAIN1:CALL DELAY ;1S延时子程序
JB P0.1,REL1 ;判断是否有东西方向按钮按下
CJNE R7,#00H,MAIN1 ;判断绿灯25s是否倒计完
MOV P1,#0F5H ;南北黄灯,东西红灯
MAIN2:CALL DELAY
MOV R7,#00H ;红灯继续倒计时,黄灯闪烁,保持0s
CPL P1.1 ;黄灯闪烁
CJNE R6,#00H,MAIN2 ;判断红灯是否倒计时完
MOV P1,#0DEH ;南北红灯,东西绿灯
MOV R7,#1EH
MOV R6,#19H
MAIN3:CALL DELAY
JB P0.0,REL2
CJNE R6,#00H,MAIN3
MOV P1,#0EEH
MAIN4:CALL DELAY
MOV R6,#00H
CPL P1.4
CJNE R7,#00H,MAIN4
JMP MAIN
REL1:MOV P1,#0F5H ;东西方向按钮按下,南北方向强制由绿灯变成黄灯警告
MOV R6,#05H
MOV R7,#00H
JMP MAIN2
REL2:MOV P1,#0EEH ;南北方向按钮按下,东西方向强制由绿灯变成黄灯警告
MOV R7,#05H
MOV R6,#00H
JMP MAIN4
;1s延时子程序
DELAY:MOV A,R6 ;进行南北方向倒计时时间的十进制调整
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR ;找寻相应的数码管代码
MOV P2,#01H
MOV P3,A ;输出个位
MOV R4,#4 ;降低动态显示频率
LOOP2:MOV R3,#125
LOOP3:DJNZ R3,LOOP3
DJNZ R4,LOOP2
MOV A,B
MOVC A,@A+DPTR
MOV P2,#02H ;输出十位
MOV P3,A
MOV R4,#4
LOOP4:MOV R3,#125
LOOP5:DJNZ R3,LOOP5
DJNZ R4,LOOP4
MOV A,R7 ;进行东西方向倒计时时间的十进制调整
MOV B,#0AH
DIV AB
MOVC A,@A+DPTR
MOV P2,#04H
MOV P3,A
MOV R4,#4
LOOP6:MOV R3,#125
LOOP7:DJNZ R3,LOOP7
DJNZ R4,LOOP6
MOV A,B
MOVC A,@A+DPTR
MOV P2,#08H
MOV P3,A
MOV R4,#4
LOOP8:MOV R3,#125
LOOP9:DJNZ R3,LOOP9
DJNZ R4,LOOP8
JBC TF0,LOOP ;判断是否计满125ms
AJMP DELAY
LOOP:MOV TL0,#0CDH ;计满125ms重新给定时器赋值
MOV TH0,#0BH
MOV A,30H
DEC A
MOV 30H,A
JNZ DELAY ;判断是否计满8次125ms,即1s
DEC R6 ;计满1s,东西倒计时减1,南北倒计时减1
DEC R7
MOV 30H,#08H ;重新1s次数,重新计时
RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;相应数值的数码管代码
DB 92H,82H,0F8H,80H,90H
END
Ⅲ 基于51单片机的交通灯控制设计
这个设计完了 可以在proteus下仿真的啊
可以交流
Ⅳ 基于51单片机的简单交通灯设计
这个实现起来应该不难。我就写一下while大循环里面的函数吧
r1=1;y1=0;b1=0;
r2=1;
y2
=0;b2=0;
delay(1);
r1=0;y1=0;b1=1;
r2=1;y2=0;b2=0;
delay(45);
r1=0;y1=1;b1=0;
r2=1;y2=0;b2=0;
delay(3);
关于r1……b2的位定义我就不多说了,具体要看你的设计图,delay
延迟函数
自己写吧,主要是这个思想。
Ⅳ 基于单片机的交通灯
给一个类似的程序供你参考,你通过读懂后,按自己的要求修改,可能会有助于你对此问题的理解。
采用51单片机作为系统的MCU,基本完成控制两组交通指示灯交替亮
每个街口有左拐、直行及行人三种指示灯。直行灯每个灯有红、黄、绿三种颜色。自行车与汽车共用左拐和直行灯。
首先东西向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒(同时南北向红灯亮95秒),然后东西向红灯亮95秒钟(同时首先南北向直行绿灯和行人灯亮1分钟,左转灯亮30秒,黄灯亮5秒),然后东西向的绿灯亮,依次类推。
每次绿灯亮的时候,对应的行人灯亮。
60S/30S/5S/60S/30S/5S
东西道
绿和行人/左转/黄/红/红/红
南北道
红/红/红/绿和行人/左转/黄
行人灯亮的时候有声音提示盲人能通过。
突发交通事故的时候能够紧急全红灯。
在有重要人物通过的时候能手动改为绿灯。
ORG 0000H ;主程序的入口地址
LJMP MAIN ;跳转到主程序的开始处
ORG 0003H ;外部中断0的中断程序入口地址
ORG 000BH ;定时器0的中断程序入口地址
LJMP T0_INT ;跳转到中断服务程序处
ORG 0013H ;外部中断1的中断程序入口地址
MAIN : MOV SP,#50H
MOV IE,#8EH ;CPU开中断,允许T0中断,T1中断和外部中断1中断
MOV TMOD,#51H ;设置T1为计数方式,T0为定时方式,且都工作于模式1
MOV TH1,#00H ;T1计数器清零
MOV TL1,#00H
SETB TR1 ;启动T1计时器
SETB EX1 ;允许INT1中断
SETB IT1 ;选择边沿触发方式
MOV DPTR ,#0003H
MOV A, #80H ;给8255赋初值,8255工作于方式0
MOVX @DPTR, A
AGAIN: JB P3.1,N0 ;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转
MOV A,P1
JB P1.7,RED ;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOV R0,#00H ;R0清零
MOV R0,A ;存入东西方向绿灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
RED: MOV A,P1
ANL A,#7FH ;P1.7置0
MOV R7,#00H ;R7清零
MOV R7,A ;存入东西方向红灯初始时间
MOV R3,A
LCALL DISP1
LCALL DELAY
AJMP AGAIN
;----------------------------------
N0: SETB TR0 ;启动T0计时器
MOV 76H,R7 ;红灯时间存入76H
N00: MOV A,76H ;东西方向禁止,南北方向通行
MOV R3,A
MOV DPTR,#0000H ;置8255A口,东西方向红灯亮,南北方向绿灯亮
MOV A,#0DDH
MOVX @DPTR, A
N01: JB P2.0,B0
N02: SETB P3.0
CJNE R3,#00H,N01 ;比较R3中的值是否为0,不为0转到当前指令处执行
;------黄灯闪烁5秒程序------
N1: SETB P3.0
MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0D4H
MOVX @DPTR,A
N11: MOV R4,#00H
N12: CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N13: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0DDH
MOVX @DPTR,A
N14: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N1 ;闪烁时间达5秒则退出
;-----------------------------------
N2: MOV R7,#00H
MOV A,R0 ;东西通行,南北禁止
MOV R3,A
MOV DPTR,#0000H ; 置8255A口,东西方向绿灯亮,南北方向红灯亮
MOV A,#0EBH
MOVX @DPTR,A
N21: JB P2.0,T03
N22: CJNE R3,#00H,N21
;------黄灯闪烁5秒程序------
N3: MOV R3,#05H
MOV DPTR,#0000H ;置8255A口,东西,南北方向黄灯亮
MOV A,#0E2H
MOVX @DPTR,A
N31: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续亮0.5秒
N32: MOV DPTR,#0000H ; 置8255A口,南北方向黄灯灭
MOV A,#0EBH
MOVX @DPTR,A
N33: MOV R4,#00H
CJNE R4,#7DH,$ ;黄灯持续灭0.5秒
CJNE R3,#00H,N3 ;闪烁时间达5秒则退出
SJMP N00
;------闯红灯报警程序------
B0: MOV R2,#03H ;报警持续时间3秒
B01: MOV A,R3
JZ N1 ;若倒计时完毕,不再报警
CLR P3.0 ;报警
CJNE R2,#00H,B01 ;判断3秒是否结束
SJMP N02
;------1秒延时子程序-------
N7: RETI
T0_INT:MOV TL0,#9AH ;给定时器T0送定时10ms的初值
MOV TH0,#0F1H
INC R4
INC R5
CJNE R5,#0FAH,T01 ;判断延时是否够一秒,不够则调用显示子程序
MOV R5,#00H ;R5清零
DEC R3 ;倒计时初值减一
DEC R2 ;报警初值减一
T01: ACALL DISP ;调用显示子程序
RETI ;中断返回
;------显示子程序------
DISP: JNB P2.4,T02
DISP1: MOV B,#0AH
MOV A,R3 ;R3中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS2: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
RET
;------东西方向车流量检测程序------
T03: MOV A,R3
SUBB A,#00H ;若绿灯倒计时完毕,不再检测车流量
JZ N3
JB P2.0,T03
INC R7
CJNE R7,#64H,E1
MOV R7,#00H ;中断到100次则清零
E1: SJMP N22
;------东西方向车流量显示程序------
T02: MOV B,#0AH
MOV A,R7 ;R7中值二转十显示转换
DIV AB
MOV 79H,A
MOV 7AH,B
DIS3: MOV A,79H ;显示十位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0F7H
MOVX @DPTR,A
LCALL DELAY
DS4: MOV A,7AH ;显示个位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV DPTR,#0002H
MOVX @DPTR,A
MOV DPTR,#0001H
MOV A,#0FBH
MOVX @DPTR,A
LJMP N7
;------延时4MS子程序----------
DELAY: MOV R1,#0AH
LOOP: MOV R6,#64H
NOP
LOOP1: DJNZ R6,LOOP1
DJNZ R1,LOOP
RET
;------字符表------
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
Ⅵ 基于89C51单片机的交通灯设计报告
我这里有一个用HOLTEK单片机汇编写的,利用查表程序完成,你可以参考一下.
include HT48R10A-1.inc;
;-------------------------------------
data .section 'data' ;资料段
COUNT1 db ? ;延时变数1
count2 db ? ;延时变数2
count3 db ? ;延时变数3
flash db ? ;LED闪烁控制暂存器
rglight db ? ;LED控制暂存器
;---------------------------------------
code .section at 0 'code' ;程序段
org 0H ;程式初始入口地址
jmp start ;
start : ; 程序开始
mov a, 0h
mov pac, a ;设PA为输出口
mov pa,a ;PA清零
;*********************************
loop: ;LED灯循环
mov a, 0 ;
mov tblp, a ;表格指标初始化
tabrdl rglight ;读取最后一页表格内容放入LED控制寄存器
mov a,rglight ;
mov pa, a ;把LED寄存器的内容输出到PA
call delay1 ;调用延时子程序DELAY1
inc tblp ;递增表格内容
mov a, 6 ;
mov flash, a ;设LED闪烁控制寄存器的内容为6次
; ;;;;;;;;;;;;;
flashlamp: ;LED闪烁循环?
tabrdl rglight ;读取最后一页表格内容放入LED控制寄存?
mov a,rglight ;
mov pa,a ;将LED寄存器的内容输出到PA
call delays ;
inc tblp ;递增表格指标
sdz flash ;检LED闪烁是否结束
jmp flashlamp ;闪烁没有结束,跳至LED闪烁循环
tabrdl rglight ;读取最后一页表格内容,放入LED控制寄存器
mov a,rglight ;?
mov pa,a ;将LED寄存器的内容输出到PA
call delaym ;呼叫延时子程序
inc tblp ;递增表格指标
;----------------
tabrdl rglight ;读取最后一页表格内容,放入LED控制寄存器
mov a, rglight
mov pa, a ;将LED寄存器的内容输出到PA
call delay1 ;呼叫延时子程序
inc tblp ;递增表格指标
mov a, 6 ;设LED闪烁次数
mov flash,a ;将闪烁次数放入LED闪烁控制寄存器
flash2: ;LED闪烁循环次数
tabrdl rglight ;读取最后一页表格内容,放入LED控制寄存器
mov a,rglight ;?
mov pa,a ;将LED寄存器的内容输出到PA
call delays ;调用延时子程序
inc tblp ;递增表格指标
sdz flash ;检查LED闪烁是否结束
jmp flash2 ;闪烁没有结束,中央电视台跳至LED闪烁循环2
tabrdl rglight ;读取最后一页表格内容,放入LED控制寄存器
mov a,rglight ;?
mov pa,a ;将LED寄存器的内容输出到PA
call delaym ;呼叫延时子程序DELAYM
jmp loop ;?
;======================== ;?
delay1 proc ; 延时子程序DELAY1
mov a,0fh ;?
mov count1,a ;?
mov count2,a ;?
mov count3,a ;?
d1: ;?
sdz count2
jmp d1 ;?
sdz count2
jmp d1
sdz count1
jmp d1
ret
delay1 endp
;;;;;;;;;;;;;;;;;;;;;;;;;;
delaym proc ;延时子程序DELAYM
mov a, 07h
mov count1 ,a
mov a, 0ffh
mov count2, a
mov count3,a
d2: sdz count3
jmp d2
sdz count2
jmp d2
sdz count1
jmp d2
ret
delaym endp
;------------------------
delays proc ;延时子程序DELAYS
mov a, 0ffh
mov count1, a
mov count2, a
d3: sdz count2
jmp d3
sdz count1
jmp d3
delays endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 300h ;led表格
dc 0ebh, 0fbh, 0ebh, 0fbh, 0ebh, 0fbh, 0ebh, 0dbh
dc 0beh, 0bfh, 0beh, 0bfh, 0beh, 0bfh, 0beh, 0bdh
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
end
Ⅶ 单片机中十字路口交通信号灯的过程,内容,原理
基于单片机的十字路口交通灯设计
摘要:知道了交通灯的重要性,而对于交通灯最重要的是单片机。跟随单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机通常作为一个核心部件来使用,仅凭对单片机简单了解是不够的,应该根据具体硬件结构并且软硬件结合,实现自己想要达到的目的。单片机自问世以来,性能不断提高和完善,所以实用许多场合。单片机具有集成度高、功能多、速度快、体积小、功耗低、使用方便、性能可靠、价格便宜,其易于产品化、抗干扰能力强、可以在恶劣的情况下坚持工作。特别是它强大的面向控制能力,使它在工业控制领域,智能仪表、外设控制、家用电器、机器人、军事装置等方面得到了广泛的应用。 考虑到单片机具有物美价廉、灵活方便、还有各种优秀的特点,所以我们从中选择用MCS-51系列单片机AT89C51单片机来实现十字路口交通信号灯的控制。单片机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。该交通灯拟系统的硬件部分主要由键盘、显示和运算部分组成,再根据实际车流量通过8051芯片的P3口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过P1口输出,显示时间通过P0口输出至双位数码管)。本系统设计周期短、可靠性高、实用性强、操作简单、维护方便、扩展功能强。
关键词:单片机、MCS-51系列单片机AT89C51、交通灯
Ⅷ 基于单片机交通灯设计的摘要怎么写
交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显作用。本系统采用单片机89C52为中心器件来设计交通灯控制器,系统实用性强、操作简单、扩展性强。本设计就是采用单片机模拟十字路口交通灯的各种状态显示以及倒计时时间。
本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、复位电路等几大部分组成。系统除基本的交通灯功能外,还具有倒计时功能,较好的模拟实现了十字路口可能出现的状况。
软件上采用KEILC编程,主要编写了主程序,LED数码管显示程序,中断程序延时程序等。经过整机调试,实现了对十字路口交通灯的模拟。中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。
Ⅸ 单片机交通灯课程设计
/*****************************************************
十字路口交通灯控制C程序
******************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#include<reg52.h>
/*****定义控制位**********************/
sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位
sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位
sbitEW_LED2=P2^3;//EW_LED2控制位
sbitEW_LED1=P2^2;//EW_LED1控制位
sbitSN_LED2=P2^1;//SN_LED2控制位
sbitSN_LED1=P2^0;//SN_LED1控制位
sbit SN_Yellow=P1^6;//SN黄灯
sbit EW_Yellow=P1^2;//EW黄灯
sbit EW_Red=P1^3;//EW红灯
sbit SN_Red=P1^7;//SN红灯
sbit EW_ManGreen=P3^0;//EW人行道绿灯
sbit SN_ManGreen=P3^1;//SN人行道绿灯
sbit Special_LED=P2^6;//交通正常指示灯
sbit Busy_LED=P2^7;//交通繁忙指示灯
sbit Nomor_Button=P3^5;//交通正常按键
sbit Busy_Btton=P3^6;//交通繁忙按键
sbit Special_Btton=P3^7;//交通特殊按键
sbit Add_Button=P3^3;//时间加
sbit Reces_Button=P3^4;//时间减
bit Flag_SN_Yellow;//SN黄灯标志位
bit Flag_EW_Yellow;//EW黄灯标志位
charTime_EW;//东西方向倒计时单元
charTime_SN;//南北方向倒计时单元
ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化赋值,正常模式
ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码
ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码
/**********************延时子程序************************/
voidDelay(uchara)
{
uchari;
i=a;
while(i--){;}
}
/*****************显示子函数**************************/
voidDisplay(void)
{
charh,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay(2);
SN_LED1=0;
h=EW1/10;
l=EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay(2);
Time_Show_LED2=0;
}
/**********************外部0中断服务程序************************/
voidEXINT0(void)interrupt0using1
{
EX0=0;//关中断
if(Add_Button==0)//时间加
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reces_Button==0)//时间减
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
if(Nomor_Button==0)//测试按键是否按下,按下为正常状态
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;//关繁忙信号灯
Special_LED=0;//关特殊信号灯
}
if(Busy_Btton==0)//测试按键是否按下,按下为繁忙状态
{
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;//关特殊信号灯
Busy_LED=1;//开繁忙信号灯
}
if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
{
EW1=75;
SN1=55;
EWL1=19;
SNL1=19;
Busy_LED=0;//关繁忙信号灯
Special_LED=1;//开特殊信号灯
}
EX0=1;//开中断
}
/**********************T0中断服务程序*******************/
voidtimer0(void)interrupt1using1
{
staticucharcount;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //测试东西黄灯标志位
{EW_Yellow=~EW_Yellow;}
}
if(count==20)
{
Time_EW--;
Time_SN--;
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
/*********************主程序开始**********************/
voidmain(void)
{
Busy_LED=0;
Special_LED=0;
IT0=1;//INT0负跳变触发
TMOD=0x01;//定时器工作于方式1
TH0=(65536-50000)/256;//定时器赋初值
TL0=(65536-50000)%256;
EA=1;//CPU开中断总允许
ET0=1;//开定时中断
EX0=1;//开外部INTO中断
TR0=1;//启动定时
while(1)
{/*******S0状态**********/
EW_ManGreen=0;//EW人行道禁止
SN_ManGreen=1;//SN人行道通行
Flag_EW_Yellow=0; //EW关黄灯显示信号
Time_EW=EW;
Time_SN=SN;
while(Time_SN>=5)
{P1=S[0];//SN通行,EW红灯
Display();}
/*******S1状态**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯
Display();
}
/*******S2状态**********/
Flag_SN_Yellow=0;//SN关黄灯显示信号
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐绿灯亮,EW红灯
Display();}
/*******S3状态**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4状态**********/
EW_ManGreen=~EW_ManGreen;//EW人行道通行
SN_ManGreen=~SN_ManGreen;//SN人行道禁止
Flag_SN_Yellow=0; //SN关黄灯显示信号
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4];//EW通行,SN红灯
Display();}
/*******S5状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW开黄灯信号位
SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯
Display();}
/*******S6状态**********/
Flag_EW_Yellow=0; //EW关黄灯显示信号
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐绿灯亮,SN红灯
Display();}
/*******S7状态**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EN开黄灯信号位
SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯
Display();}
/***********赋值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}
Ⅹ 如何运用51单片机设计一个交通灯系统
运用定时器,数码管LED和8255A设计一个交通灯控制系统!
1.南北绿灯,东西红灯,20秒
2.南北转黄灯,东西红灯,5秒
3.南北红灯,东西绿灯,20秒
4.南北红灯,东西转黄灯,5秒
5.循环步骤1