交通灯 汇编语言
(1)P3.2进入中断 默认进入红灯修改状态 (2)P3.4加运算 P4.3减运算 (3)P3.3 短按 进入绿灯修改状态,长按 返回中断。
ORG 0000H
AJMP START
ORG 0003H
AJMP TIAO
ORG 000BH
AJMP TIME
ORG 0300H
START: MOV A,#03H
MOV DPTR,#7100H
MOVX @DPTR,A
MOV 20H,#00H;
MOV P1,#0DEH
MOV 21H,#30;数码管1
MOV 22H,#25;数码管2
MOV 23H,#6; 黄灯时间
MOV 24H,#26;绿灯时间
MOV 25H,#31
MOV R3,23H
MOV R4,24H
MOV R7,23H
MOV IP,#01H ;IP,IE初始化
MOV IE,#83H
MOV TMOD,#01H ;设定定时器工作方式
MOV TL0,#0B4H
MOV TH0,#3CH ;定时50ms
SETB TR0 ;启动定时
MOV SP,#40H ;重设堆栈指针
MAIN: LCALL DISP
LCALL DELAY
LJMP MAIN
TIAO: CLR TR0
MOV 21H,#00
MOV 22H,#00
LCALL DISP
LCALL DELAY
AJMP LA
LA: JNB P3.3,LB
LCALL DELAY1
JNB P3.3,LB
JNB P3.4,PA
LCALL DELAY1
JNB P3.4,PA
JNB P3.5,MA
LCALL DELAY1
JNB P3.5,MA
MOV P1,#0FEH
LCALL DISP
LCALL DELAY
AJMP LA
LB: JNB P3.3,LD
LCALL DELAY1
JNB P3.3,LD
JNB P3.4,PB
LCALL DELAY1
JNB P3.4,PB
JNB P3.5,MB
LCALL DELAY1
JNB P3.5,MB
MOV P1,#0FBH
LCALL DISP
LCALL DELAY
AJMP LB
PA:
INC 21H
LCALL DISP
LCALL DELAY
AJMP LA
MA: DEC 21H
LCALL DISP
LCALL DELAY
AJMP LA
PB:
INC 22H
LCALL DISP
LCALL DELAY
AJMP LB
MB: DEC 22H
LCALL DISP
LCALL DELAY
AJMP LB
LD:
MOV P1,#0FDH
JB P3.3,LB
LCALL DELAY1
LCALL DELAY1
JB P3.3,LB
LCALL DISP
LCALL DELAY
AJMP LC
LC: MOV P1,#0DEH
MOV A,21H
MOV 25H,A
INC 25H
MOV A,22H
MOV 24H,A
INC 24H
MOV A,25H
CLR C
SUBB A,24H
MOV 23H,A
INC 23H
MOV R3,23H
MOV R4,24H
MOV R7,23H
SETB TR0
RETI
;定时中断处理程序:
TIME: PUSH ACC ;保护现场
PUSH PSW
MOV TL0,#0B4H ;赋定时初值
MOV TH0,#3CH
INC 20H ;
MOV A,20H
CJNE A,#20,RETI1
MOV 20H,#00H ;一秒钟时间到
AJMP RED
RED: MOV A,R3
CJNE A,23H,BLU
MOV A,R4
CJNE A,24H,YEL
MOV A,R7
CJNE A,23H,GRE
MOV P1,#0DEH
DEC 21H
DEC 22H
MOV A,22H
CJNE A,#00,RETI1
MOV A,23H
MOV 21H,A
MOV 22H,A
GRE: MOV P1,#0EEH
DEC 21H
DEC 22H
MOV A,22H
MOV R7,21H
CJNE A,#00,RETI1
MOV A,24H
MOV 21H,A
MOV A,25H
MOV 22H,A
YEL: MOV P1,#0F3H
DEC 21H
DEC 22H
MOV A,21H
MOV R4,21H
CJNE A,#00,RETI1
MOV A,23H
MOV 21H,A
MOV 22H,A
BLU: MOV P1,#0F5H
DEC
21H
DEC 22H
MOV A,21H
MOV R3,21H
CJNE A,#00,RETI1
MOV A,25H
MOV 21H,A
MOV A,24H
MOV 22H,A
DEC 21H
DEC 22H
MOV R3,23H
MOV R4,24H


