交通灯(汇编语言)程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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计数初值

相关文档
最新文档