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

📄 led.asm

📁 可驱动8/16位数码管显示或64/128只独立LED 的芯片BC72811A中断编程。BC7281A只占用单片机3个I/O口
💻 ASM
字号:
BIT_COUNT   DATA 07FH
TIMER       DATA 07EH
TIMER1      DATA 07DH
TEMP        DATA 07CH
DATA_IN     DATA 021H
DATA_OUT    DATA 020H


CLK         BIT  P3.5
DAT         BIT  P3.4


ORG   000H
JMP   START
ORG   0013H
      LJMP INT1



ORG   100H
START:   MOV SP,#2FH             ;设置堆栈
         MOV IP,#01H
         SETB IT0
         MOV IE,#07H
         MOV TIMER,#50H
DELAY:   MOV TIMER1,#255         ;延时已确保7281完成复位
DELAY1:  DJNZ TIMER1,DELAY1
         DJNZ TIMER,DELAY

         MOV DATA_OUT,#12H
         CALL SEND               ;8271初始化
         MOV DATA_OUT,#80H
         CALL SEND               ;设置为164模式,不反相

         MOV DATA_OUT,#16H       ;全亮
         CALL SEND
         MOV DATA_OUT,#40H
         CALL SEND

        ; MOV DATA_OUT,#10H       ;闪烁
        ; CALL SEND
        ; MOV DATA_OUT,#00H
        ; CALL SEND
        ; MOV DATA_OUT,#11H       ;闪烁速度
        ; CALL SEND
        ; MOV DATA_OUT,#15H
        ; CALL SEND

         LCALL DELAY3

         MOV DATA_OUT,#16H       ;全灭
         CALL SEND
         MOV DATA_OUT,#00H
         CALL SEND

         MOV DATA_OUT,#12H
         CALL SEND               ;8271初始化
         MOV DATA_OUT,#80H
         CALL SEND               ;设置为164模式,不反相
         MOV DATA_OUT,#10H       ;关闪烁
         CALL SEND
         MOV DATA_OUT,#0FFH
         CALL SEND

         SETB EA
WAIT:    NOP
         NOP
         AJMP WAIT


INT1:    CLR EA
         POP ACC
         POP DPL
         POP DPH

         MOV DATA_OUT,#93H       ;读键值
         CALL SEND
         CALL RECEIVE            ;读出数据
         MOV DATA_OUT,#15H       ;HEX译码指令
         CALL SEND
         MOV TEMP, DATA_IN
         ANL TEMP,#0F0H          ;键值高4位在第一位显示
         MOV A,TEMP
         SWAP A
         ORL A,#10H
         MOV DATA_OUT,A
         CALL SEND
         MOV DATA_OUT,#15H       ;HEX译码指令
         CALL SEND
         MOV A,DATA_IN
         ANL A,#0FH              ;取键值低4位
         MOV DATA_OUT,A          ;在0位显示
         CALL SEND

         POP DPH
         POP DPL
         POP ACC
         SETB EA
    RETI

SEND:    CLR  CLK
         SETB CLK
WAIT1:   JB DAT,SEND
         CLR  CLK
         SETB CLK
WAIT2:   JNB DAT,WAIT2
         MOV BIT_COUNT,#08H
SENDLOOP:MOV C,DATA_OUT.7
         MOV DAT,C
         CLR  CLK
         SETB CLK
         MOV A,DATA_OUT
         RL A
         MOV DATA_OUT,A
         NOP
         NOP
         NOP
         DJNZ BIT_COUNT,SENDLOOP
         SETB DAT
         NOP
         NOP
         NOP
         NOP
      RET

RECEIVE: CLR  CLK
         SETB CLK
WAIT3:   JB DAT,WAIT3
         CLR  CLK
         SETB CLK
         MOV BIT_COUNT,#08H
REC_LOOP:NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         MOV A,DATA_IN
         MOV C,DAT
         RLC A
         MOV DATA_IN,A
         CLR  CLK
         SETB CLK
         DJNZ BIT_COUNT,REC_LOOP
         NOP
         NOP
         NOP
         NOP
      RET

DELAY3: MOV 	R1,#0AH
DEL11:  MOV 	R2,#0FFH
DEL12:  MOV 	R3,#0FFH
DEL13:  DJNZ 	R3,DEL13 ; 1+[1+(1+2*255+ 2)*255+2]*10+2=1.2S
        DJNZ 	R2,DEL12
        DJNZ 	R1,DEL11
        RET
END

⌨️ 快捷键说明

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