交通灯(汇编语言)程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程提示:
(1) 通过74LS164控制发光二极管,以模拟交通灯的控制。
(2) 程序中设定好计数初值,开始倒数。
(3) 各发光二极管共阴极,使其点亮应使对应的端口输出高电平。
;====================交通灯控制器 ========================== SECOND1 EQU 30H ;东西路口计时寄存器
SECOND2 EQU 31H ;南北路口计时寄存器
DBUF EQU 40H ;显示码缓冲区1
TEMP EQU 44H ;显示码缓冲区2
LED_G1 BIT P2.1 ;东西路口绿灯
LED_Y1 BIT P2.2 ;东西路口黄灯
LED_R1 BIT P2.3 ;东西路口红灯
LED_G2 BIT P2.4 ;南北路口绿灯
LED_Y2 BIT P2.5 ;南北路口黄灯
LED_R2 BIT P2.6 ;南北路口红灯
ORG 0000H
LJMP START
ORG 0100H
START: MOV TMOD,#01H ;置T0为工作方式1
MOV TH0,#3CH ;置T0定时初值50ms
MOV TL0,#0B0H
CLR TF0
SETB TR0 ;启动T0
CLR A
MOV P1,A ;关闭不相关的LED
;***************************************************
LOOP: MOV R2,#20 ;置1s计数初值,50ms*20=1s MOV R3,#20 ;红灯亮20s
MOV SECOND1,#25 ;东西路口计时显示初值25s
MOV SECOND2,#25 ;南北路口计时显示初值25s
LCALL DISPLAY
LCALL STATE1 ;调用状态1
WAIT1: JNB TF0,WAIT1 ;查询50ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值50ms
MOV TL0,#0B0H
DJNZ R2,WAIT1 ;判断1s到否?未到继续状态1
MOV R2,#20 ;置50ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT1 ;状态1维持20s
;*******************************************
MOV R2,#5 ;置50ms计数初值5*4=20
MOV R3,#3 ;绿灯闪3s
MOV R4,#4 ;闪烁间隔200ms
MOV SECOND1,#5 ;东西路口计时显示初值5s
MOV SECOND2,#5 ;南北路口计时显示初值5s
LCALL DISPLAY
WAIT2: LCALL STATE2 ;调用状态2
JNB TF0,WAIT2 ;查询50ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值50ms
MOV TL0,#0B0H
DJNZ R4,WAIT2 ;判断200ms到否?未到继续状态2
CPL LED_G1 ;东西绿灯闪
MOV R4,#4 ;闪烁间隔200ms
DJNZ R2,WAIT2 ;判1s到否?未到继续状态2
MOV R2,#5 ;置50ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT2 ;状态2维持3s
;****************************************
MOV R2,#20 ;置50ms计数初值
MOV R3,#2 ;黄灯闪2s
MOV SECOND1,#2 ;东西路口计时显示初值2s
MOV SECOND2,#2 ;南北路口计时显示初值2s
LCALL DISPLAY
WAIT3: LCALL STATE3 ;调用状态3
JNB TF0,WAIT3 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R2,WAIT3 ;判断1s到否?未到继续状态3
MOV R2,#20 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT3 ;状态3维持2s
;*******************************************
MOV R2,#20 ;置50ms计数初值
MOV R3,#20 ;红灯闪20s
MOV SECOND1,#25 ;东西路口计时显示初值25s
MOV SECOND2,#25 ;南北路口计时显示初值25s
LCALL DISPLAY
WAIT4: LCALL STATE4 ;调用状态4
JNB TF0,WAIT4 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R2,WAIT4 ;判断1s到否?未到继续状态4
MOV R2,#20 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT4 ;状态4维持20s
;*******************************************
MOV R2,#5 ;置50ms计数初值
MOV R4,#4 ;红灯闪20ms
MOV R3,#3 ;绿灯闪3s
MOV SECOND1,#5 ;东西路口计时显示初值5s
MOV SECOND2,#5 ;南北路口计时显示初值5s
LCALL DISPLAY
WAIT5: LCALL STATE5 ;调用状态5
JNB TF0,WAIT5 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R4,WAIT5 ;判断200ms到否?未到继续状态5
CPL LED_G2 ;南北绿灯闪
MOV R4,#4 ;闪烁200ms
DJNZ R2,WAIT5 ;判断1s到否?未到继续状态5
MOV R2,#5 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT5 ;状态5维持3s
;****************************************
MOV R2,#20 ;置50ms计数初值