单片机模拟交通灯(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