📄 交通灯.asm
字号:
;##########################################
;# 基于单片机无线收发控制的交通信号灯模型 #
;# 设计:朱金飞 #
;# 广东交通职业技术学院北校区 无线电021班 #
;# E-mail:biket@163.com #
;# http://www.fmdiy.com #
;# http://www.yufik.com #
;# 注:该程序仅实现交通灯的闪烁功能,中断 #
;# 等功能由于当初设计时间不足,没能实现! #
;# 仅供参考,不再提供任何技术支持! #
;##########################################
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP AA0
ORG 0013H
AJMP AA1
ORG 0100H
MAIN:SETB PX0
MOV TCON,#00H
MOV TMOD,#10H
MOV IE,#85H
DISP:MOV 20H,#60 ;倒计时初值送计数储存区
MOV P1,#0F3H ;A绿,B红
MOV R2,#02H ;1秒计时循环次数送R2
DISP1:ACALL DELAY
DJNZ R2,DISP1 ;1秒没到,继续延时
MOV R2,#02H
DEC 20H ;1秒到计数单元数减1
MOV A,20H
CJNE A,#05H,DISP1 ;判断倒计5秒到否,没到继续循环
ACALL DISPY
FY0:CPL P1.2 ;倒计5秒到时,A绿灯闪动3次
FT0:ACALL DELAY
DJNZ R2,FT0
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#02H,FY0 ;判断倒计2秒到否,没到返回
ACALL DISPY
MOV P1,#0F5H ;倒计2秒到时,A黄灯亮
FY1:ACALL DELAY
DJNZ R2,FY1
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#00H,FY1 ;判断倒计到0否,没到返回
ACALL DISPY
MOV 20H,#30
MOV P1,#0DEH ;倒计到0时,A红灯,B绿灯
DISP2:ACALL DELAY
DJNZ R2,DISP2
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#05H,DISP2
ACALL DISPY
FY2:CPL P1.5
FT2:ACALL DELAY
DJNZ R2,FT2
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#02H,FY2
ACALL DISPY
MOV P1,#0EEH
FY3:ACALL DELAY
DJNZ R2 ,FY3
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#00H,FY3
ACALL DISPY
AJMP DISP
AA0:PUSH 02H ;紧急情况,中断入口
PUSH 20H
PUSH 04H
PUSH P1
PUSH TH1
PUSH TL1
MOV P1,#0F6H
MOV 20,#20H
MOV R2,#02H
DELAY0:ACALL DELAY
DJNZ R2,DELAY0
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#00H,DELAY0
ACALL DISPY
POP TL1
POP TH1
POP 04H
POP P1
POP 20H
POP 02H
RETI ;返回主程序
AA1:CLR EA ;一道有车,一道无车中断入口
PUSH 20H
PUSH 02H
PUSH P1
PUSH 04H
PUSH TH1
PUSH TL1
SETB EA
JNB P3.0,BP
MOV P1,#0F3H
SJMP DELAY1
BP:JNB P3.1 ,EXIT
MOV P1,#0DEH
DELAY1:MOV 20H,#05H
MOV R2,#02H
NEXT:ACALL DELAY
DJNZ R2,NEXT
MOV R2,#02H
DEC 20H
MOV A,20H
CJNE A,#00H,NEXT
ACALL DISPY
EXIT:CLR EA
POP TL1
POP TH1
POP 04H
POP P1
POP 02H
POP 20H
SETB EA
RETI ;返回主程序
DISPY:MOV A,20H ;数码管显示部分
MOV B,#100
DIV AB
MOV A,#10
XCH A ,B
DIV AB
MOV 30H,B
MOV 31H,A
MOV R5,#0FEH
MOV R1,#02H
MOV R0,#30H
DISPY1:MOV A,@R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
MOV P2,A
DJNZ R6,$
DJNZ R6,$
RL A
MOV R5,A
INC R0
DJNZ R1,DISPY1
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DELAY:MOV R4,#0AH ;0.5秒延时子程序
MOV TH1,3CH
MOV TL1,#0B0H
SETB TR1
LP1:ACALL DISPY
JBC TF1,LP2
SJMP LP1
LP2:MOV TH1,#3CH
MOV TL1,#0B0H
DJNZ R4,LP1
RET ;返回主程序
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -