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

📄 交通灯.asm

📁 这个是关于时钟的交通灯汇编程序
💻 ASM
字号:
         ;存储单元分配
; 堆栈--60H-7FH
; 显示缓冲区--50H-55H
; 计时区--40H-46H
;  键值--30H
;***********************************************
;主程序
        ORG 0000H
        LJMP MAIN
        ORG 000BH
        LJMP INTT0
        ORG 0100H
MAIN:   MOV SP,#60H
        LCALL SHEZHI
        MOV 40H,#10
        SETB EA
        SETB ET0
        MOV TMOD,#01H
        MOV TH0,#3CH
        MOV TL0,#0B0H
        SETB TR0
LL:     LCALL DISP1
        LCALL DISP
        SJMP LL

;***********************************************
; 中断服务程序
;
        ORG 0200H
INTT0:  PUSH ACC
        PUSH PSW
        SETB RS1
        SETB RS0
        DJNZ 40H,DOWN
        MOV 40H,#10
        MOV R0,#41H
        MOV A,@R0
        ADD A,#1
        DA A
        MOV @R0,A
        CLR C
        SUBB A,#60H
        JC DOWN
        MOV @R0,#0
        INC R0
        MOV A,@R0
        ADD A,#1
        DA A
        MOV @R0,A
        CLR C
        SUBB A,#60H
        JC DOWN
        MOV @R0,#0
        INC R0
        MOV A,@R0
        ADD A,#1
        DA A
        CLR C
        SUBB A,#24H
        JC DOWN
        MOV @R0,#0
DOWN:   CLR TR0
        MOV A,#0B7H
        ADD A,TL0
        MOV TL0,A
        MOV A,#3CH
        ADDC A,TH0
        MOV TH0,A
        SETB TR0
        POP PSW
        POP ACC
        RETI

;***********************************************
; 动态显示程序
;  工作寄存器第1组
;  段选口:FFDCH
;  位选口:FFDDH
;
;
;***********************************************
        ORG 0300H
DISP:   PUSH ACC
        PUSH PSW
        SETB RS0
        CLR RS1
        MOV R2,#8
        MOV R3,#01H
        MOV R0,#50H
LP2:    MOV DPTR,#LEDTAB
        MOV A,@R0
        INC R0
        MOVC A,@A+DPTR
        MOV DPTR,#0FFDCH
        MOVX @DPTR,A
        MOV DPTR,#0FFDDH
        MOV A,R3
        MOVX @DPTR,A
        RL A
        MOV R3,A
        MOV R7,#0
        DJNZ R7,$
        DJNZ R2,LP2
        POP PSW
        POP ACC
        RET


;***********************************************
; 数字分离程序
;  工作寄存器第2组
;  R0:计时单元地址
;  R1:显示缓冲区地址
;***********************************************
        ORG 0400H
DISP1:  PUSH ACC
        PUSH PSW
        SETB RS1
        CLR RS0
        MOV R0,#41H
        MOV R1,#50H
        MOV R2,#3
LP1:    MOV A,@R0
        ANL A,#0FH
        MOV @R1,A
        INC R1
        MOV A,@R0
        SWAP A
        ANL A,#0FH
        MOV @R1,A
        INC R1
        INC R0
        DJNZ R2,LP1
        POP PSW
        POP ACC
        RET
;***********************************************
; 键盘扫描程序
;  行线口:0FFDDH
;  列线口:0FFDEH
;
;
        ORG 0500H
KEY:    LCALL DISP
        MOV DPTR,#0FFDDH
        MOV A,#0
        MOVX @DPTR,A
        INC DPTR
        MOVX A,@DPTR
        CPL A
        ANL A,#0FH
        JZ KEY
        LCALL DISP
        LCALL DISP
        MOV DPTR,#0FFDDH
        MOV A,#0
        MOVX @DPTR,A
        INC DPTR
        MOVX A,@DPTR
        CPL A
        ANL A,#0FH
        JZ KEY
        MOV R2,#0FEH
        MOV R3,#8
        MOV R4,#0
LP3:    MOV DPTR,#0FFDDH
        MOV A,R2
        MOVX @DPTR,A
        RL A
        MOV R2,A
        INC DPTR
        MOVX A,@DPTR
        CPL A
        ANL A,#0FH
        JNZ SCAN
        INC R4
        DJNZ R3,LP3
        SJMP KEY
SCAN:   JNB ACC.0,TKEY0
        MOV A,#0
        SJMP ENDLP
TKEY0:  JNB ACC.1,TKEY1
        MOV A,#8
        SJMP ENDLP
TKEY1:  JNB ACC.2,TKEY2
        MOV A,#10H
        SJMP ENDLP
TKEY2:  JNB ACC.3,RETKEY
        MOV A,#18H
ENDLP:  ADD A,R4
        MOV DPTR,#KEYTAB
        MOVC A,@A+DPTR
        MOV 30H,A
RETKEY: MOV DPTR,#0FFDDH
        MOV A,#0
        MOVX @DPTR,A
        INC DPTR
        MOVX A,@DPTR
        CPL A
        ANL A,#0FH
        JNZ RETKEY
        RET
;***********************************************
;  设置时间初值
;
        ORG 0600H
SHEZHI: MOV R0,#50H
        MOV R7,#6
LP4:    MOV @R0,#10H
        INC R0
        DJNZ R7,LP4
        MOV R0,#55H
        MOV R7,#6
LP5:    LCALL KEY
        MOV @R0,30H
        DEC R0
        DJNZ R7,LP5
        MOV R0,#50H
        MOV R1,#41H
        MOV R6,#3
LP6:    MOV A,@R0
        MOV R5,A
        INC R0
        MOV A,@R0
        SWAP A
        ADD A,R5
        MOV @R1,A
        INC R0
        INC R1
        DJNZ R6,LP6
        RET


;***********************************************
;
;
;**********************************************
; MCS-51系列单片机仿真实验系统 硬件实验项目
; 外部中断处理(急救车与交通灯实验)
;**********************************************

Flash   equ  0          ;LED状态
STOP    equ  1

SY      equ  P1.0       ;南北黄灯
SG      equ  P1.1       ;南北绿灯
SR      equ  P1.2       ;南北红灯

EY      equ  P1.3       ;东西黄灯
EG      equ  P1.4       ;东西绿灯
ER      equ  P1.5       ;东西红灯

        org  0
        ljmp Start

        org  3
        setb STOP       ;南北、东西均红灯
        reti

Start:
        mov  SP,#70
        mov  TCON,#01h  ;下降沿, IT0
        mov  IE,#81h    ;EA允许, EX0

        clr  SR         ;南北、东西均红灯
        setb SY
        setb SG

        clr  ER
        setb EY
        setb EG

        clr  STOP

Loop:
        jb   STOP,AllRed

        clr  SR         ;南北红灯,东西绿灯
        setb SY
        setb SG

        setb ER
        setb EY
        clr  EG

        mov  a,#20
        call Delay

        jb   STOP,AllRed
        clr  SR         ;南北红灯, 东西黄灯闪
        setb SY
        setb SG

        setb ER
        setb EY
        setb EG

        clr  Flash
        mov  r7,#9

Loop1:
        mov  c,Flash
        mov  EY,c
        mov  a,#1
        call Delay
        cpl  Flash
        djnz r7,Loop1

        jb   STOP,AllRed
        setb SR         ;南北绿灯,东西红灯
        setb SY
        clr  SG

        clr  ER
        setb EY
        setb EG

        mov  a,#20
        call Delay

        jb   STOP,AllRed
        setb SR         ;东西红灯,南北黄灯闪
        setb SY
        setb SG

        clr  ER
        setb EY
        setb EG

        clr  Flash
        mov  r7,#9

Loop2:
        mov  c,Flash
        mov  SY,c
        mov  a,#1
        call Delay
        cpl  Flash
        djnz r7,Loop2

        ljmp Loop

AllRed:                 ;两个方向交通信号灯全红
        clr  SR
        setb SY
        setb SG

        clr  ER
        setb EY
        setb EG

        clr  STOP
        mov  a,#10
        call Delay
        ljmp Loop

Delay:                  ;延时子程序
        mov  r1,#80H
        mov  r0,#0
DelayLoop:
        jb   STOP,ExitDelay
        djnz r0,DelayLoop
        djnz r1,DelayLoop
        djnz ACC,Delay
ExitDelay:
        ret

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;end

LEDTAB:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
           DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
           DB 0FFH,0CH,89H,7FH,0BFH
KEYTAB:    DB 07H,04H,08H,05H,09H,06H,0AH,0BH
           DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH
        END

⌨️ 快捷键说明

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