交通灯设计
时间:2023-11-21 15:07:01
交通灯设计
东西南北交通灯原理
原理图
单片机在这里使用P1.0-P151个io口控12盏灯,P1.0-P151分别对应abcdef
实现的功能是南北(即A通道绿灯亮B通道红灯亮)绿灯放行时间为60s,在60s倒计时即将结束时,绿灯会闪烁3s提醒绿灯即将结束,60s倒计时结束时,黄灯(中间两盏灯)亮2s,这两秒是等待时间(即不确定状态)s后,开始换成东西放行(就是B通道绿灯亮A通道红灯亮),然后B通道放绿灯300s,在30s倒计时即将结束时,绿灯会闪烁3s提醒绿灯即将结束,30s倒计时结束时,黄灯亮2s,这两秒是等待时间(即不确定状态),开始换成南北放行(即B通道红灯亮a通道绿灯亮),然后循环往复。
代码讲解
org 0000H LJMP MAIN ;转向主程序 org 0003H LJMP INTT0 ;转向紧急车辆中断服务程序 org 0013H LJMP INTT1 ;转向车道中断服务程序 org 0200H MAIN:MOV SP,#30H SETB PX0 ;外部中断0优先级 MOV TCON,#00H ;外部中断0,1,电平触发 MOV TMOD,#10H ;定时器1是方式1 MOV IE,#85H ;开CPU开外中断0,1中断 LOOP: MOV P1,#0F3H ;A绿灯放行,B道红灯禁止 MOV R1,#90 ;置0.5秒循环次数(0.5×90=45S) DIP1: ACALL DELAY ;调用0.子程序延迟5秒 DJNZ R1,DIP1 ;继续循环不到45秒 MOV R1,#06 ;A绿灯闪烁循环次数 WAN1: CPL P1.2 ;A绿灯闪烁 ACALL DELAY DJNZ R1,WAN1 ;闪烁次数没有继续循环 MOV P1,#0F5H ;A黄灯警告,B红灯禁止 MOV R1,#04H ;置0.5秒循环次数(0.5×4=2S) YL1:ACALL DELAY DJNZ R1,YL1 ;2秒未到继续循环 MOV P1,#0DEH ;A红灯,B绿灯 MOV R1,#32H ;置0.5秒循环次数(0.5×50=25S) DIP2: ACALL DELAY DJNZ R1,DIP2 ;继续循环不到25秒 MOV R1,#06H WAN2: CPL P1.5 ;B绿灯闪烁 ACALL DELAY DJNZ R1,WAN2 MOV P1,#0EEH ;A红灯,B黄灯 MOV R1,#04H YL2: ACALL DELAY DJNZ R1,YL2 AJMP LOOP ;循环执行主程序 INTT0:PUSH P1 ;P1口数据压栈保护 PUSH ACC ;ACC寄存器压栈保护 PUSH TH1 ;TH1压栈保护 PUSH TL1 ;TL1压栈保护 MOV P1,#0F6H ;A、B道均为红灯 MOV R2,#40 ;置0.5秒循环初值(20S) DEY0: ACALL DELAY DJNZ R2,DEY0 ;继续循环不到15秒 POP TL1 ;弹栈恢复现场 POP TH1 POP ACC POP P1 RETI ;返回主程序 INTT1: CLR EA ;关中断 PUSH P1 ;保护现场 PUSH ACC PUSH TH1 PUSH TL1 SETB EA ;开中断 JB P3.0,BOP ;A无车转向B道 MOV P1,#0F3H ;A道绿灯,B道红灯 SJMP DEL1 ;转向15秒延时 BOP: JB P3.1,EXIT ;B道路无车退出中断 MOV P1,#0DEH ;A红灯,B绿灯 DEL1: MOV R5,#30 ;置0.5秒循环初值(15S) NEXT: ACALL DELAY DJNZ R5,NEXT ;继续循环不到15秒 EXIT: CLR EA POP TL1 ;弹栈恢复现场 POP TH1 POP ACC POP P1 SETB EA RETI DELAY: MOV R3,#0AH ;0.5秒子程序(50ms×10=0.5s) MOV TH1,#3CH ;置50ms初值X=3CB0H MOV TL1,#0B0H SETB TR1 ;启动T1 LP1: JBC TF1,LP2 ;查询计数溢出 SJMP LP1 LP2:MOV TH1,#3CH ;置50ms初值X=3CB0H MOV TL1,#0B0H DJNZ R3,LP1 RET END
;置50ms初值X=3CB0H MOV TL1,#0B0H DJNZ R3,LP1 RET END