㈠ 单片机 交通灯设计程序
怀念下,记得当初有个mm特别去十字路口看了n久交通灯。好好努力吧
㈡ 单片机交通灯设计(简单)
可以做到,也不难做
㈢ 单片机交通灯程序
采用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
㈣ 如何用单片机制作交通灯
LED模拟交通灯
本例中的12只LED分成东西向和南北向两组,各组指示灯均有相向的2只红色、2只黄色与2只绿色的LED,本例中对应的LED单独进行定义,程序运行时模拟了十字路口交通信号灯得切换过程与显示效果。
本例电路如下图:
(呵呵 图片插入不进来)
程序设计调试与实训:
源程序中用6行sbit对东西和南北向的红、黄、绿指示灯分别进行定义,这样便于对它们进行单独控制。
本例交通指示灯切换时间设置的较短,这样可在调试的时候较快观察到运行效果,可在调试运行本例后修改代码,使指示灯切换过程更接近于实际的交通指示灯切换过程。
源程序代码:
//----------------------------------------------------------------
// 名称:LED模拟交通灯
//----------------------------------------------------------------
// 说明:东西向绿灯亮若干秒后,黄灯闪烁5次后亮红灯,红灯亮后,
// 南北向由红灯变为绿灯,若干秒后,南北向黄灯闪烁,
// 闪烁5次后亮红灯,东西向绿灯亮,如此重复。
//
//-----------------------------------------------------------------
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //东西向指示灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3; //南北向指示灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count = 0;
Operation_Type = 1; //闪烁次数及操作类型变量
//--------------------------------------------------------
//延时
//--------------------------------------------------------
void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}
//---------------------------------------------------------
//交通灯交换子程序
//---------------------------------------------------------
void Traffic_lignt()
{
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000); // 延时
Operation_Type = 2; //下一操作
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
DelayMS(300); //延时
YELLOW_A=!YELLOW_A; //闪烁5次
if(++Flash_Count !=10)
return;
Flash_Count=0;
Operation_Type = 3; //下一操作
break;
case 3: //东西向红灯与南北向绿灯亮
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000); //延时
Operation_Type = 4; //下一操作
break;
case 4: //南北向黄灯开始闪烁
DelayMS(300); //延时
YELLOW_B=!YELLOW_B;
if(++Flash_Count !=10)
return; //闪烁5次
Flash_Count=0;
Operation_Type = 1; //回到第一种操作
break;
}
}
//----------------------------------------------------------
//主程序
//----------------------------------------------------------
void main()
{
while(1)
{
Traffic_lignt();
}
}
㈤ 单片机控制交通灯
ORG 0000H
STA: MOV P0,#11011011B ;干线亮绿灯,支线亮红灯
MOV P2,#0001000B ;选通LED
MOV P3,#11101111B ;K1列线置0
MOV R7,#3
STA1: JB P3.3,$ ;无按键等待
LCALL DELAY30MS ;去抖动
JB P3.3,STA1
JNB P3.3,$ ;等键释放
DJNZ R7,STA1
MOV R6,#200
STA2: LCALL DELAY30MS ;延时30MS
DJNZ R6,STA2 ;延时6秒
MOV P0,#10111011B ;干线亮黄灯,支线亮红灯
MoV R6,#100
STA3: LCALL DELAY30MS
DJNZ R6,STA3 ;延时3秒
MOV P0,#01111110B ;干线亮红灯,支线亮绿灯
MOV R5,#4
STA4: MOV R6,#200
STA5: LCALL DELAY30MS
DJNZ R6,STA5
DJNZ R5,STA4 ;延时24秒
MOV P0,#01111101B ;干线亮绿灯,支线亮黄灯
MOV R6,#100
STA6: LCALL DELAY30MS
DJNZ R6,STA6 ;延时3秒
LJMP STA
DELAY30MS:MOV R4,#55
DELAY:MOV R3,#250
DJNZ R3,$ ;1.085us(指令周期)*2*250+2=547.5us
DJNZ R4,DELAY
㈥ 单片机控制的交通灯信号
按你的要求已经将程序写完
ProteUS仿真调试通过
仿真工程下载地址:http://ishare.iask.sina.com.cn/f/8000899.html
㈦ 求一个单片机控制的交通灯程序和原理图
我的博客上有一个比较好的程序,你可以去看看。
㈧ 单片机交通灯实训
你好!
交通灯程序,是c语言完成吗,是仿真还是做实物呢,有个类似的你看看
倒计时秒数,可以根据需要任意修改
㈨ AT89C51单片机交通灯程序
仿真实例可以参考,可以直接仿真效果,试试。
㈩ 51单片机做十字路口交通灯
怎么这么多灯
具体要求发给我就可以写