📄 trafic.asm
字号:
;-------------------------------------交通灯程序--------------------------------
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP PIPO
ORG 0100H
MAIN: MOV SP,#30H ;设置堆栈指针为30H
MOV 40H,#00H ;要求的计数溢出次数,即循环次数
MOV 41H,#25H ;存倒计时数
MOV TMOD,#01H ;设置定时器0工作方式1
MOV TH0,#0DCH ;定初值
MOV TL0,#00H ;定时10MS
SETB EA ;开总中断,(总闸)
SETB ET0 ;允许定时中断
SETB TR0 ;开始计时
MOV 42H,#00H ;用此地址区来存显示的秒数
MOV R6,#00H ;控制闪烁与不闪烁
MOV 44H,#00H
CYCLE:LCALL DISP ;等待中断
LJMP CYCLE
PIPO: INC R6 ;1秒闪烁二次
CJNE R6,#32H,NEXT
MOV R6,#00H
INC 44H
NEXT: PUSH PSW ;10MS已到
PUSH ACC
MOV TH0,#0DCH ;重置初值
MOV TL0,#00H
INC 40H
MOV A,40H
CJNE A,#64H,RET0
MOV 40H,#00H
MOV A,41H
DEC A
KK: CJNE A,#1FH,KK0 ;到1F时减6
SUBB A,#06H
AJMP KK1
KK0: CJNE A,#0FH,KK1 ;到0F时减6
SUBB A,#06H
KK1: MOV 41H,A
KK2: CJNE A,#0FFH,RET0
MOV R7,42H
AA0: CJNE R7,#00H,AA1 ;控制25S到5S到15S到5S的倒计时循环显示
MOV 41H,#05H
INC 42H
AA1: CJNE R7,#01H,AA2
MOV 41H,#15H
INC 42H
AA2: CJNE R7,#02H,AA3
MOV 41H,#05H
INC 42H
AA3: CJNE R7,#03H,RET0
MOV 41H,#25H
MOV 42H,#00H
RET0: POP ACC
POP PSW
RETI
DISP: MOV A,41H ;显示子程序
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.6
ACALL DELAY
SETB P0.6
MOV A,41H
SWAP A
ANL A,#0FH
ACALL TABLE
MOV P2,A
CLR P0.5
ACALL DELAY
SETB P0.5
BB0: MOV R7,42H
CJNE R7,#01H,BB1
MOV A,44H
JB ACC.0, BULIAO1
SETB P0.7
MOV P2,#0FFH
CLR P2.4
CLR P2.0
CLR P0.7
CPL P1.0
ACALL DELAY
SETB P0.7
BULIAO1:
BB1: MOV R7,42H
CJNE R7,#02H,BB2
SETB P0.7
MOV P2,#0FFH
CLR P2.2
CLR P2.3
CLR P0.7
ACALL DELAY
SETB P0.7
BB2: MOV R7,42H
CJNE R7,#03H,BB3
MOV A,44H
JB ACC.0, BULIAO
SETB P0.7
MOV P2,#0FFH
CPL P1.0
CLR P2.1
CLR P2.3
CLR P0.7
ACALL DELAY
SETB P0.7
BULIAO:
BB3: MOV R7,42H
CJNE R7,#00H,OUT1
SETB P0.7
MOV P2,#0FFH
CLR P2.5
CLR P2.0
CLR P0.7
ACALL DELAY
SETB P0.7
OUT1: RET
TABLE:INC A
MOVC A,@A+PC
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,080H,090H
DELAY: PUSH PSW ;延时子程序
MOV R3,#10H
DELAY0:MOV R4,#50H
DELAY1:DJNZ R4,DELAY1
DJNZ R3,DELAY0
POP PSW
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -