汇编语言交通灯程序

ORG 0000H
LJMP START
ORG 0003H
LJMP INT0
ORG 000BH
LJMP T0
a ORG 0013H
LJMP INT1
ORG 001BH

START: MOV SP, #60H
MOV 40H, #5 ;在南北红灯缓存区南北红灯时间
MOV 41H, #3 ;在南北绿灯缓存区南北绿灯时间
MOV 42H, #4 ;在东西红灯缓存区东西红灯时间
MOV 43H, #4 ;在东西绿灯缓存区东西绿灯时间
MOV 27H,#0FFH ;标示位
MOV 30H,#05H
MOV 31H,#00H
MOV TMOD, #01H ;定时器初始化
MOV TH0, #3CH
MOV TL0, #0AFH
MOV 60H, #20
CLR 4EH
CLR 4FH
SETB EA
SETB EX1
SETB EX0
SETB ET0
SETB TR0
DISPLAY1:MOV P1, #0CCH ;显示南北红灯与东西绿灯时间
MOV R3, 40H
MOV R4, 43H
LOOP1: MOV A, R3
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F0H
MOV P0,A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F1H
MOV P0,A
LCALL DELAY
MOV A, R4
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F6H
MOV P0,A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F7H
MOV P0,A
LCALL DELAY
JNB TR0,SETIN1
JB P2.6,WAY1 ;判断两通道是否都有车
LCALL DELAY
JB P2.6,OUT1
JNB P2.7,OUT1
LJMP DISPLAY2
WAY1: JB P2.7,OUT1
LCALL DELAY
JB P2.7,OUT1
LJMP DISPLAY1
OUT1: JMP E1
SETIN1: LJMP SETT
E1: JNB 4FH,LOOP1
CLR 4FH
DEC R3
DEC R4
CJNE R4,#0FFH,LOOP1
MOV P1, #0CAH ;东西绿灯灭黄灯亮
LOOP2: MOV A, R3
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F4H
MOV P0,A
LCALL DELAY
MOV P2,#0F0H
MOV P0,A
LCALL DELAY
MOV P2, #0F6H
MOV P0, A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F5H
MOV P0,A
LCALL DELAY
MOV P2,#0F1H
MOV P0,A
LCALL DELAY
MOV P2, #0F7H
MOV P0, A
LCALL DELAY
JNB TR0,SETIN2
JB P2.6,WAY2 ;判断两通道是否都有车
LCALL DELAY
JB P2.6,OUT2
JNB P2.7,OUT2
LJMP DISPLAY2
WAY2: JB P2.7,OUT2
LCALL DELAY
JB P2.7,OUT2
LJMP DISPLAY1
OUT2: JMP E2
SETIN2:LJMP SETT
E2: JNB 4FH,LOOP2
CLR 4FH
DEC R3
CJNE R3,#0FFH,LOOP2
DISPLAY2: MOV P1, #0E1H ;南北红灯时间到,南北绿

灯亮,东西红灯亮
MOV R3, 41H ;显示南北绿灯,东西红灯时间
MOV R4, 42H
LOOP3: MOV A, R3
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F2H
MOV P0,A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F3H
MOV P0,A
LCALL DELAY
MOV A, R4
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F4H
MOV P0,A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F5H
MOV P0,A
LCALL DELAY
JNB TR0 ,SETIN3
JB P2.6,WAY3 ;判断两通道是否都有车
LCALL DELAY
JB P2.6,OUT3
JNB P2.7,OUT3
LJMP DISPLAY2
WAY3: JB P2.7,OUT3
LCALL DELAY
JB P2.7,OUT3
LJMP DISPLAY1
OUT3: JMP E3
SETIN3: LJMP SETT
E3 : JNB 4FH,LOOP3
CLR 4FH
DEC R3
DEC R4
CJNE R3,#0FFH,LOOP3
MOV P1, #0D1H
LOOP4: MOV A, R4 ;显示东西红灯,南北黄灯时间
MOV B, #0AH
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,#0F0H
MOV P0,A
LCALL DELAY
MOV P2,#0F4H
MOV P0,A
LCALL DELAY
MOV P2, #0F2H
MOV P0, A
LCALL DELAY
MOV A, B
MOVC A,@A+DPTR
MOV P2,#0F1H
MOV P0,A
LCALL DELAY
MOV P2,#0F5H
MOV P0,A
LCALL DELAY
MOV P2, #0F3H
MOV P0, A
LCALL DELAY
JNB TR0,SETIN4
JB P2.6,WAY4 ;判断两通道是否都有车
LCALL DELAY
JB P2.6,OUT4
JNB P2.7,OUT4
LJMP DISPLAY2
WAY4: JB P2.7,OUT4
LCALL DELAY
JB P2.7,OUT4
LJMP DISPLAY1
OUT4: JMP E4
SETIN4: LJMP SETT
E4: JNB 4FH,LOOP4
CLR 4FH
DEC R4
CJNE R4,#0FFH,LOOP4
SETOUT : LJMP DISPLAY1
SETT: JB TR0,SETOUT
ACALL DISP
JB P3.0,M1
M1: MOV C,P3.0 ;按键消振
JC M2
M2: LCALL DELAY
MOV C,P3.0
JC ML10
STOP1: MOV C,P3.0
JNC STOP1
LCALL DELAY
MOV C,P3.0
JNC STOP1
MOV R6,27H
CJNE R6,#00H,RRRR
MOV R5,43H
INC R5
MOV 43H,R5 ;;;加一
MOV R5,40H
INC R5
MOV 40H,R5
CJNE R5, #99,DSS
MOV 40H,#0
MOV 43H,#0
LJMP DSS
RRRR: MOV R5,41H
INC R5
MOV 41H ,R5
MOV R5,42H
INC R5
MOV 42H,R5
CJNE R5,#99,DSS
MOV 42H,#0
MOV 41H,#0
DSS: MOV A,R5
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B

ACALL DISP
ML10: JB P3.1,M3
M3: MOV C,P3.1 ;按键消振
JC M4
M4: LCALL DELAY
MOV C,P3.1
JC SETT
STOP2: MOV C,P3.1
JNC STOP2
LCALL DELAY
MOV C,P3.1
JNC STOP2
MOV R6,27H
CJNE R6,#00H,RRRR1
MOV R5,43H
DEC R5
MOV 43H,R5
MOV R5,40H
DEC R5
MOV 40H,R5
CJNE R5,#0FFH,DSSS;;;;;;;;减一
MOV 40H,#99
MOV 43H,#98
MOV R5,40H
LJMP DSSS
RRRR1: MOV R5,41H
DEC R5
MOV 41H ,R5
MOV R5,42H
DEC R5
MOV 42H,R5
CJNE R5,#0FFH,DSSS
MOV 42H,#99
MOV 41H,#98
MOV R5,42H
DSSS: MOV A,R5
MOV B,#0AH
DIV AB
MOV 31H,A
MOV 30H,B
ACALL DISP
LJMP SETT
;;;;;;;;;;;;定时器中断;;;;;;;;;;;;
T0: PUSH ACC
PUSH B
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0AFH
DJNZ 60H,OVER
MOV 60H,#20
SETB 4FH
OVER: POP PSW
POP B
POP ACC
RETI
;;;;;;;;;;;;;;;显示模块2 ;;;;;;;;;;;;;;;;;
DISP:
MOV DPTR,#DSEG1
MOV A,30H
MOVC A,@A+DPTR
MOV P2,#0EFH
MOV P0,A
LCALL DL1
MOV DPTR ,#DSEG1
MOV A,31H
MOVC A,@A+DPTR
MOV P2,#0DFH
MOV P0,A
LCALL DL1
RET
;;;;;;;;;;;;;;;DELAY
DL1: MOV R7,#05H
DL: MOV R6,#0FFH
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
;;;;;;;;;;;;;INT1中断修改;;;;;;;;;;
INT1:
PUSH ACC
PUSH B
PUSH PSW
MOV P1,#0CH
SETB P1.0
CLR P1.1
CLR P1.2
SETB P1.4; 紧急情况,东西(B道)方向,南北(A道)方向都是红灯亮,其余灯灭
CLR P1.5
CLR P1.6
TAB3: MOV P0,#0FFH
MOV P2,#0
MOV P2,#1
MOV P2,#4
MOV P2,#5
LCALL TAB3
POP PSW
POP ACC
RETI
;;;;;;;;;;;;;INT0中断修改;;;;;;;;;;
INT0:PUSH ACC
PUSH PSW
MOV C,P3.2 ;按键消振
JC PPP
ACALL DELAY
MOV C,P3.2
JC PPP
STOP3: MOV C,P3.2
JNC STOP3
ACALL DELAY
MOV C,P3.2
JNC STOP3
CLR TR0
MOV A,27H
CJNE A,#01H,PPP
MOV A,#0FFH
MOV 27H,A
SETB TR0
AJMP PP1
PPP: INC 27H
PP1: POP PSW
POP ACC
RETI
TAB: DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH
DELAY: MOV R1,#40
D1: MOV R7,#50
DJNZ R7,$
DJNZ R1,D1
RET
END


相关文档
最新文档