⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 46交通灯.asm

📁 46交通灯.ASM
💻 ASM
字号:
       ;交通灯

       ;烧录用程序


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    00H
START: MOV    TMOD,10H     ;置T0工作方式1
       MOV    TH0, #3CH    ;置T0定时初值50mS
       MOV    TL0, #0B0H
       CLR    TF0
       SETB   TR0          ;启动T0

       CLR    A
       MOV    P1,A
       ;SJMP   $


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, #6CH    ;恢复T0定时初值50mS
       MOV    TL0, #0B0H
       DJNZ   R2,WAIT1     ;判1S到否?未到继续状态1
       MOV    R2,#20       ;置50mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       LCALL  DISPLAY
       DJNZ   R3,WAIT1      ;状态1维持20S

       ;SJMP   $

       MOV    R2,#10        ;置50mS计数初值
       MOV    R4,#2        ;闪烁200mS
       MOV    R3,#3        ;绿灯闪3S
       MOV    SECOND1,#5   ;东西秒显示初值5S
       MOV    SECOND2,#5   ;南北秒显示初值5S
       LCALL  DISPLAY
WAIT2: LCALL  STATE2       ;调用状态2
       JNB    TF0,WAIT2    ;查询50mS到否
       CLR    TF0
       MOV    TH0, #0ACH    ;恢复T0定时初值50mS
       MOV    TL0, #0B0H

       DJNZ   R4,WAIT2     ;判200mS到否?未到继续状态2
       CPL    LED_G1       ;东西绿灯闪
       MOV    R4,#2        ;闪烁200mS

       DJNZ   R2,WAIT2     ;判1S到否?未到继续状态2
       MOV    R2,#10       ;置50mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       LCALL  DISPLAY
       DJNZ   R3,WAIT2     ;状态2维持3S

       ;SJMP   $

       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, #6CH    ;恢复T0定时初值100mS
       MOV    TL0, #0B0H
       DJNZ   R2,WAIT3     ;判1S到否?未到继续状态3
       MOV    R2,#20       ;置100mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       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, #6CH    ;恢复T0定时初值100mS
       MOV    TL0, #0B0H
       DJNZ   R2,WAIT4      ;判1S到否?未到继续状态4
       MOV    R2,#20       ;置100mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       LCALL  DISPLAY
       DJNZ   R3,WAIT4     ;状态4维持20S

       MOV    R2,#10        ;置50mS计数初值
       MOV    R4,#2        ;闪烁200mS
       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, #0ACH    ;恢复T0定时初值100mS
       MOV    TL0, #0B0H

       DJNZ   R4,WAIT5     ;判200mS到否?未到继续状态5
       CPL    LED_G2       ;南北绿灯闪
       MOV    R4,#2        ;闪烁200mS

       DJNZ   R2,WAIT5     ;判1S到否?未到继续状态5
       MOV    R2,#2       ;置100mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       LCALL  DISPLAY
       DJNZ   R3,WAIT5     ;状态5维持3S

       MOV    R2,#20       ;置50mS计数初值
       MOV    R3,#2        ;黄灯闪2S
       MOV    SECOND1,#2   ;东西秒显示初值2S
       MOV    SECOND2,#2   ;南北秒显示初值2S
       LCALL  DISPLAY
WAIT6: LCALL  STATE6       ;调用状态6
       JNB    TF0,WAIT6    ;查询100mS到否
       CLR    TF0
       MOV    TH0, #6CH    ;恢复T0定时初值100mS
       MOV    TL0, #0B0H
       DJNZ   R2,WAIT6     ;判1S到否?未到继续状态6
       MOV    R2,#20       ;置100mS计数初值
       DEC    SECOND1      ;东西秒显示减一
       DEC    SECOND2      ;南北秒显示减一
       LCALL  DISPLAY
       DJNZ   R3,WAIT6     ;状态6维持2S

       LJMP   LOOP         ;大循环


STATE1:                    ;状态1
       SETB   LED_G1       ;东西绿灯亮
       CLR    LED_Y1
       CLR    LED_R1
       CLR    LED_G2
       CLR    LED_Y2
       SETB   LED_R2       ;南北红灯亮
       RET

STATE2:                    ;状态2
       CLR    LED_Y1
       CLR    LED_R1
       CLR    LED_G2
       CLR    LED_Y2
       SETB   LED_R2       ;南北红灯亮
       RET

STATE3:                    ;状态3
       CLR    LED_G1
       CLR    LED_R1
       CLR    LED_G2
       CLR    LED_Y2
       SETB   LED_R2       ;南北红灯亮
       SETB   LED_Y1       ;东西黄灯亮
       RET

STATE4:                    ;状态4
       CLR    LED_G1
       CLR    LED_Y1
       SETB   LED_R1       ;东西红灯亮
       SETB   LED_G2       ;南北绿灯亮
       CLR    LED_Y2
       CLR     LED_R2
       RET

STATE5:                    ;状态5
       CLR    LED_G1
       CLR    LED_Y1
       SETB   LED_R1       ;东西红灯亮
       CLR    LED_Y2
       CLR    LED_R2
       RET

STATE6:                    ;状态6
       CLR    LED_G1
       CLR    LED_Y1
       SETB   LED_R1       ;东西红灯亮
       CLR    LED_G2
       CLR    LED_R2
       SETB   LED_Y2       ;南北黄灯亮
       RET

DISPLAY:                   ;数码显示
        MOV   A, SECOND1   ;东西秒寄存器
        MOV   B, #10       ;16进制数拆成两个10进制数
        DIV   AB
        MOV   DBUF+3,A
        MOV   A,B
        MOV   DBUF+2, A

        MOV   A, SECOND2   ;南北秒寄存器
        MOV   B, #10       ;16进制数拆成两个10进制数
        DIV   AB
        MOV   DBUF+1, A
        MOV   A,B
        MOV   DBUF, A

        MOV	R0,#DBUF
	MOV	R1,#TEMP
	MOV	R2,#4
DP10:	MOV	DPTR,#LEDMAP
	MOV	A,@R0
	MOVC	A,@A+DPTR
	MOV	@R1,A
	INC	R0
	INC	R1
	DJNZ	R2,DP10
	MOV	R0,#TEMP
	MOV	R1,#4
DP12:	MOV	R2,#8
	MOV	A,@R0
DP13:	RLC	A
	MOV	P3.0,C
	CLR	P3.1
	SETB	P3.1
	DJNZ	R2,DP13
	INC	R0
	DJNZ	R1,DP12

        RET

LEDMAP: DB  3FH,6,5BH,4FH,66H,6DH ;0,1,2,3,4,5
	DB  7DH,7,7FH,6FH,77H,7CH ;6,7,8,9,A,B
	DB  58H,5EH,7BH,71H,0,40H ;C,D,E,F, , -


        END






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -