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

📄 jiaotongdeng_10.asm

📁 交通灯
💻 ASM
字号:
    K1 EQU P1.4
    K2 EQU P1.5
    K3 EQU P1.6
    K4 EQU P1.7
CHUZHI EQU 30H
CISHU  EQU 31H
KEYZHI EQU 32H
BHCZ   EQU 33H
FLAG   EQU 20H.0  ;亮红灯或亮绿灯的标志位
  DG_1 EQU P2.2
  DY_1 EQU P2.3
  DR_1 EQU P2.4
  DR_2 EQU P2.5
  DY_2 EQU P2.6
  DG_2 EQU P2.7
;====================
        ORG 0000H
        AJMP START
        ORG 001BH
        AJMP INTT1
;=============初始化程序===================
START:  MOV CHUZHI,#10
        MOV 31H,#20
        MOV SP,#60H
        MOV TMOD,#10H
        MOV TH1,#3cH
        MOV TL1,#0b5H
        SETB EA
        SETB ET1
;=================主程序==========================
MAIN:   ACALL DISPLAY
        ACALL KEYSCAN
        ACALL LED
        JNB F0,MAIN      ;判断是否有按键按下
        CLR F0
        ACALL KEY1
        AJMP MAIN
;===================LED子程序===================
LED:    MOV C,TR1
        JNC LED_OFF            ;是否开始倒计    是:亮   不是:全灭
        JB FLAG,RED
GREEN:  MOV A,CHUZHI
        CLR C
        SUBB A,#7
        JNC g
        LJMP SHANSHUO_1
        ;////////////
  g:    CLR DG_1
        CLR DR_2
        SETB DG_2
        SETB DR_1
        SETB DY_1
        SETB DY_2
        
        LJMP OUT_LED
RED:    MOV A,CHUZHI
        CLR C
        SUBB A,#7
        JNC R
        LJMP SHANSHUO_2
  R:    CLR DG_2
        CLR DR_1
        SETB DY_1
        SETB DY_2
        SETB DG_1
        SETB DR_2
        LJMP OUT_LED
YELLOW: SETB DG_1
        SETB DR_2
        SETB DG_2
        SETB DR_1
        CLR DY_1
        CLR DY_2
        LJMP OUT_LED
LED_OFF:MOV P2,#0FFH
OUT_LED:RET
;==========闪烁============
SHANSHUO_1:MOV A,CHUZHI
        CLR C
        SUBB A,#2
        JC YELLOW
        CLR DG_1
        ACALL DELAY_10
        CLR DR_2
        SETB DG_2
        SETB DR_1
        SETB DY_1
        SETB DY_2
        ;---------
        SETB DG_1
        ACALL DELAY_10
        ACALL DISPLAY
        LJMP SHANSHUO_1
SHANSHUO_2:MOV A,CHUZHI
        CLR C
        SUBB A,#2
        JC YELLOW
        CLR DG_2
        ACALL DELAY_10
        ACALL DISPLAY
        CLR DR_1
        SETB DY_1
        SETB DY_2
        SETB DG_1
        SETB DG_2        
;===================按键扫描程序===========================
KEYSCAN:ACALL KEYS
        JNZ  QUDOU
        LJMP  FANHUI
QUDOU:  ACALL DELAY_10
        ACALL KEYS
        JNZ  DENGDAI
        LJMP FANHUI
DENGDAI:MOV 32H,A       ;保存键的位置
        ACALL DISPLAY   ;确保释放前有显示
        ACALL KEYS
        JNZ  DENGDAI
        SETB F0          ; 键释放后标志为1
FANHUI: RET

;=======判断是否有键按下==============
KEYS:   MOV A,P1
        CPL A
        ANL A,#0F0H   ;屏蔽无键的低四位
        RET

;=====================判断按键及处理=========================
KEY1:   MOV A,32H
        JNB ACC.4,KEY2
        CPL TR1           ;设置键按下停止倒计
        MOV BHCZ,CHUZHI   ;下次也按照设定的初值开始倒计
        AJMP OUT
KEY2:   JNB ACC.5,KEY3
        MOV C,TR1
        JC OUT            ;是否先按下设置键   是:+10   不是:不处理
        MOV A,CHUZHI
        CLR C
        SUBB A,#90
        JNC QING0
        MOV A,CHUZHI
        ADD A,#10
        MOV CHUZHI,A
        AJMP OUT
KEY3:   JNB ACC.6,KEY4
        MOV C,TR1
        JC OUT            ;是否先按下设置键    是:+1   不是:不处理
        MOV A,CHUZHI
        CJNE A,#99,JIA1
QING0:  MOV CHUZHI,#0
        AJMP OUT
JIA1:   ADD A,#1
        MOV CHUZHI,A
        AJMP OUT
KEY4:   JNB ACC.7,OUT
        CPL FLAG
OUT:    RET
;================显示程序==================
DISPLAY:MOV A,CHUZHI
        MOV B,#10
        DIV AB
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P0,A
        CLR P2.0
        ACALL DELAY_2
        SETB P2.0
        MOV A,B
        MOVC A,@A+DPTR
        MOV P0,A
        CLR P2.1
        ACALL DELAY_2
        SETB P2.1
        RET
;================中断处理程序=====================
INTT1:  CLR TF1
        MOV TH1,#3cH
        MOV TL1,#0b5H   ;重新赋初值
        DJNZ 31H,RETURN
        MOV 31H,#20
        DJNZ CHUZHI,RETURN
        CPL FLAG       ;标志位取反
        MOV CHUZHI,BHCZ       ;倒计到0后从新开始
RETURN: RETI
;===========2毫秒延时=============
NOP
DELAY_2:  MOV 50H,#5
D_2:     MOV 51H,#198
        DJNZ 51H,$
        DJNZ 50H,D_2
        RET
;===========10毫秒延时=============
NOP
DELAY_10:MOV 50H,#25
D_10:     MOV 51H,#198
        DJNZ 51H,$
        DJNZ 50H,D_10
        RET
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\
TABLE:DB 3FH,06H,5BH,4FH,66H
      DB 6DH,7DH,07H,7FH,6FH

⌨️ 快捷键说明

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