单片机模拟交通灯(2012-8-12)
主电路图(图一)
Static Display子图(图二)
第1页 总8 页
13:31:37 2013-4-17
单片机模拟交通灯(2012-8-12)
仿真效果(图三)
仿真效果(图四)
第2页 总8 页
13:31:37 2013-4-17
单片机模拟交通灯(2012-8-12)
仿真效果(图五)
仿真效果(图六)
汇编语言程序: SECOND1 EQU SECOND2 DBUF
EQU
EQU
30H 31H
40H
TEMP EQU LED_G1 BIT LED_Y1 BIT 44H P2.1 P2.2
;东西路口绿灯 ;东西路口黄灯
第3页 总8 页
13:31:37 2013-4-17
单片机模拟交通灯(2012-8-12)
LED_R1 BIT LED_G2 BIT LED_Y2 BIT LED_R2 BIT
ORG LJMP
P2.3 P2.4 P2.5 P2.6 START
0100H
TMOD,#01H TH0,#3CH TL0,#0B0H
;置T0为工作方式1 ;置T0定时初值50ms
;东西路口红灯 ;南北路口绿灯 ;南北路口黄灯 ;南北路口红灯
0000H
ORG START: MOV MOV
MOV CLR SETB CLR MOV
TF0 TR0 A
;启动T0
;关闭不相关的LED P1,A
;*************************************************** LOOP: MOV R2,#20 ;置1s计数初值,50ms*20=1s
MOV MOV MOV
R3,#20 SECOND1,#25 SECOND2,#25
;红灯亮20s ;东西路口计时显示初值25s ;南北路口计时显示初值25s
LCALL DISPLAY
LCALL STATE1 CLR MOV MOV DJNZ MOV DEC DEC ;调用状态1 ;查询50ms到否
;恢复T0定时初值50ms
WAIT1: JNB TF0,WAIT1 TF0 TH0,#3CH TL0,#0B0H R2,WAIT1 R2,#20 SECOND1 SECOND2
;判断1s到否?未到继续状态1 ;置50ms计数初值
;东西路口显示时间减1s ;南北路口显示时间减1s
LCALL DISPLAY DJNZ R3,WAIT1 ;状态1维持20s
;******************************************* MOV R2,#5 ;置50ms计数初值 5*4=20 MOV R3,#3 ;绿灯闪3s
MOV MOV MOV
R4,#4 SECOND1,#5 SECOND2,#5
;闪烁间隔200ms
;东西路口计时显示初值5s ;南北路口计时显示初值5s
LCALL DISPLAY WAIT2: LCALL STATE2
JNB CLR MOV MOV DJNZ
;调用状态2 ;查询50ms到否
;恢复T0定时初值50ms
TF0,WAIT2 TF0 TH0,#3CH
TL0,#0B0H R4,WAIT2
;判断200ms到否?未到继续状态2
第4页 总8 页
13:31:37 2013-4-17
单片机模拟交通灯(2012-8-12)
CPL MOV DJNZ MOV DEC DEC
LED_G1
;东西绿灯闪
;闪烁间隔200ms
;判1s到否?未到继续状态2 ;置50ms计数初值 ;东西路口显示时间减1s
;南北路口显示时间减1s
R4,#4
R2,WAIT2 R2,#5 SECOND1
SECOND2
LCALL DISPLAY
DJNZ R3,WAIT2 ;状态2维持3s ;**************************************** MOV R2,#20 ;置50ms计数初值
MOV MOV MOV
LCALL LCALL JNB CLR MOV MOV DJNZ MOV DEC DEC
R3,#2
;黄灯闪2s
;东西路口计时显示初值2s ;南北路口计时显示初值2s SECOND1,#2
WAIT3:
SECOND2,#2 DISPLAY STATE3 TF0,WAIT3 TF0 TH0,#3CH
;调用状态3
;查询100ms到否
;恢复T0定时初值100ms TL0,#0B0H R2,WAIT3 R2,#20
SECOND1 SECOND2
;判断1s到否?未到继续状态3 ;置100ms计数初值
;东西路口显示时间减1s ;南北路口显示时间减1s
LCALL DISPLAY DJNZ R3,WAIT3 ;状态3维持2s
;******************************************* MOV R2,#20 ;置50ms计数初值
MOV MOV MOV
R3,#20 SECOND1,#25 SECOND2,#25
;红灯闪20s ;东西路口计时显示初值25s ;南北路口计时显示初值25s
LCALL DISPLAY WAIT4: LCALL STATE4
JNB CLR MOV MOV DJNZ MOV DEC DEC
;调用状态4 ;查询100ms到否
;恢复T0定时初值100ms
TF0,WAIT4 TF0 TH0,#3CH
TL0,#0B0H R2,WAIT4
R2,#20 SECOND1 SECOND2
;判断1s到否?未到继续状态4
;置100ms计数初值 ;东西路口显示时间减1s
;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT4
;状态4维持20s
;******************************************* MOV R2,#5 ;置50ms计数初值
第5页 总8 页
13:31:37 2013-4-17
单片机模拟交通灯(2012-8-12)
MOV MOV MOV MOV
R4,#4
;红灯闪20ms
;绿灯闪3s
;东西路口计时显示初值5s ;南北路口计时显示初值5s
R3,#3 SECOND1,#5 SECOND2,#5
LCALL DISPLAY WAIT5: LCALL STATE5 JNB TF0,WAIT5
CLR MOV MOV DJNZ CPL MOV DJNZ MOV DEC DEC
TF0 TH0,#3CH
;调用状态5
;查询100ms到否
;恢复T0定时初值100ms
TL0,#0B0H R4,WAIT5 LED_G2 R4,#4 R2,WAIT5
;判断200ms到否?未到继续状态5 ;南北绿灯闪
;闪烁200ms
;判断1s到否?未到继续状态5
;置100ms计数初值 ;东西路口显示时间减1s
;南北路口显示时间减1s R2,#5
SECOND1 SECOND2
LCALL DISPLAY DJNZ R3,WAIT5
;状态5维持3s
;**************************************** MOV R2,#20 ;置50ms计数初值
MOV MOV MOV
R3,#2 SECOND1,#2 SECOND2,#2
;红灯闪2s
;东西路口计时显示初值2s ;南北路口计时显示初值2s
LCALL DISPLAY WAIT6: LCALL STATE6 JNB TF0,WAIT6 CLR MOV MOV DJNZ MOV DEC DEC
TF0 TH0,#3CH
;调用状态6
;查询100ms到否
;恢复T0定时初值100ms
TL0,#0B0H R2,WAIT6 R2,#20 SECOND1 SECOND2
;判断1s到否?未到继续状态6 ;置100ms计数初值
;东西路口显示时间减1s ;南北路口显示时间减1s
LCALL DISPLAY DJNZ R3,WAIT6 LJMP
LOOP
;状态6维持2s ;大循环
;********************************************** STATE1: ;状态1
SETB CLR CLR CLR CLR
LED_G1 LED_Y1 LED_R1 LED_G2 LED_Y2
第6页 总8 页
13:31:37 2013-4-17
;东西路口绿灯亮
单片机模拟交通灯(2012-8-12)
SETB
LED_R2
;南北路口红灯亮 ;状态2
RET STATE2:
CLR CLR CLR
LED_Y1 LED_R1 LED_G2 LED_Y2 LED_R2
;南北路口红灯亮 ;状态3
CLR SETB RET STATE3:
CLR CLR CLR CLR SETB SETB
LED_G1 LED_R1 LED_G2 LED_Y2 LED_R2 LED_Y1
;南北路口红灯亮 ;东西路口绿灯亮 ;状态4 RET STATE4:
CLR CLR SETB SETB
LED_G1 LED_Y1 LED_R1 LED_G2 LED_Y2 LED_R2
;状态5
;东西路口红灯亮 ;南北路口绿灯亮
CLR CLR RET STATE5:
CLR CLR SETB CLR LED_G1 LED_Y1 LED_R1 LED_Y2 LED_R2 LED_G1 LED_Y1 LED_R1 LED_G2 LED_R2 LED_Y2 AB
第7页 总8 页
13:31:37 2013-4-17
;东西路口红灯亮
CLR RET STATE6: CLR
CLR SETB CLR CLR SETB
;状态6
;东西路口红灯亮
;南北路口红灯亮 ;数码显示
;东西路口计时寄存器
;16进制数拆成两个10进制数
RET DISPLAY:
MOV MOV DIV
A,SECOND1 B,#10
单片机模拟交通灯(2012-8-12)
MOV MOV MOV MOV MOV DIV MOV MOV MOV MOV MOV MOV MOV MOV
AB
DBUF+1,A A,B DBUF,A R0,#DBUF R1,#TEMP R7,#4
DPTR,#LEDMAP A,@R0 DBUF+3,A A,B
DBUF+2,A A,SECOND2 B,#10
;南北路口计时寄存器
;16进制数拆成两个10进制数
DP10:
MOVC A,@A+DPTR MOV @R1,A INC INC DJNZ MOV MOV MOV MOV RLC MOV CLR SETB DJNZ INC DJNZ R0 R1
R7,DP10 A
R0,#TEMP R1,#4 R7,#8 A,@R0 P3.0,C DP12: DP13:
P3.1 P3.1 R7,DP13 R0 R1,DP12 RET LEDMAP: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH
DB 58H,5EH,7BH,71H,0,40H END
;0,1,2,3,4,5 ;6,7,8,9,A,B
;C,D,E,F, ,-
第8页 总8 页
13:31:37 2013-4-17