基于51单片机交通灯(汇编语言)
设计要求:
设计交通灯控制系统。模拟交通信号灯控制:一般情况下正常显示,东西-南北交替放行,各方向通行时间为30秒。有救护车或警车到达时,两个方向交通信号灯全为红色,以便让急救车或警车通过,设通行时间为10秒,之后交通恢复正常。用单次脉冲模拟急救车或警车申请外部中断。
proteus仿真图:
单片机晶振为22.114MHz
代码:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INTV1
ORG 000BH
AJMP EXT0
ORG 0100H
MAIN:
SETB P3.2
MOV P1,#00H
SETB TR0
SETB IT0
SETB EX0
SETB ET0
SETB PT0 ;设置T0优先级最高
SETB EA
MOV TMOD,#01H ;定时器0工作方式1
LOOP: MOV TH0,#184
MOV R4,#100
MOV TL0 , #0
SETB TR0
MOV SP,#60H ;栈
START: MOV R7,#30 ;交通灯正常运行开始
LOOP1: ;南北绿灯,东西红灯,25s
LCALL WAIT_1S
MOV P1,#11H
DEC R7
CJNE R7,#5,LOOP1
LOOP2: ;南北绿灯,东西红灯,东西南北黄灯5s
LCALL WAIT_1S
MOV P1,#35H
DEC R7
CJNE R7,#0,LOOP2
MOV R7,#30
LOOP3: ;南北红灯,东西绿灯,25s
LCALL WAIT_1S
MOV P1,#0AH
DEC R7
CJNE R7,#5,LOOP3
LOOP4: ;南北红灯,东西绿灯,东西南北黄灯5s
LCALL WAIT_1S
MOV P1,#2EH
DEC R7
CJNE R7,#0,LOOP4
SJMP START
WAIT_1S: ;等待1s
JNB 20H.0,$
CLR 20H.0
LCALL DISPLAY
RET
EXT0: ;1s中断拉高20H.0
MOV TH0 , #184
MOV TL0 , #0
DJNZ R4,T0END;1S
MOV R4,#100
SETB 20H.0
T0END: RETI
TAB:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH//00
DISPLAY: ;数码管显示
MOV A,R7
DEC A
MOV B,#10
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
XCH A,B
MOVC A,@A+DPTR
MOV P0,A
RET
INTV1: ;外部中断0
MOV P1,#09H
PUSH ACC ;入栈保存工作状态
PUSH B
PUSH PSW
SETB RS0 ;更换工作区
MOV R7,#10 ;10s倒计时
; LCALL DISPLAY
L1:
LCALL WAIT_1S
DEC R7
CJNE R7,#0,L1
POP PSW ;恢复工作状态
LCALL DISPLAY
POP B
POP ACC
RETI
END
参考代码:: https://wenku.baidu.com/view/90866b22ee06eff9aef80750.html.