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

📄 7279key-dis.asm

📁 这是一个7279芯片的键盘检测程序
💻 ASM
字号:
BIT_COUNT   DATA 07FH
  TIMER        DATA 07EH
  TIMER1       DATA 07DH
  TEN          DATA 07CH
  DATA_IN     DATA 020H
  DATA_OUT    DATA 021H
  KEY   BIT   P1.3             ;7279的KEY连接于P1.3
  CLK   BIT   P1.6             ;7279的CLK连接于P1.6
  DAT   BIT   P1.7             ;7279的DATA连接于P1.7
  CS    BIT   P2.7             ;7279的CS连接于P2.7
  ORG    000H
  LJMP   START
  ORG    100H
START:     MOV  SP,#2FH             ;定义堆栈
             MOV  P1,#11011011B       ;I/O口初始化
             MOV  TIMER,#50

START_DELAY: MOV  TIMER1,#255
START_DELAY1:DJNZ TIMER1,START_DELAY1
             DJNZ TIMER,START_DELAY
             MOV  DATA_OUT,#10100100B ;发复位指令
             CALL SEND
             SETB CS                  ;复位CS为高电平
 
MAIN:       JB   KEY,MAIN            ;检测是否有键按下
             MOV  DATA_OUT,#00010101B ;有键按下,发送读键盘指令
             CALL SEND                ;调用发送子程序
             CALL RECEIVE             ;调用接受子程序
             SETB CS
             MOV  B,#10
             MOV  A,DATA_IN
             DIV  AB
             MOV  TEN,A
             MOV  DATA_OUT,#10100001B 
             CALL SEND
             MOV  DATA_OUT,#10100001B
             CALL SEND
             MOV  DATA_OUT,#10000001B
             CALL SEND
             MOV  DATA_OUT,TEN
             CALL SEND
             MOV  DATA_OUT,#10000000B
             CALL SEND
             MOV  DATA_OUT,B
             CALL SEND
             SETB CS
WAIT:       JNB  KEY,WAIT
             JMP  MAIN
;*******************************************
;             发送子程序
;*******************************************
SEND:       MOV   BIT_COUNT,#8
             CLR   CS
             CALL  LONG_DELAY
SEND_LOOP:  MOV   C,DATA_OUT.7
              MOV   DAT,C
              SETB  CLK
              MOV   A,DATA_OUT
            RL    A
            MOV   DATA_OUT,A
            CALL  SHORT_DELAY
            CLR   CLK
            CALL  SHORT_DELAY
            DJNZ  BIT_COUNT,SEND_LOOP
            CLR   DAT
            RET
;*******************************************
;             接收子程序
;*******************************************
RECEIVE:   MOV    BIT_COUNT,#8
             SETB   DAT
             CALL   LONG_DELAY
RECEIVE_LOOP: 
SETB CLK
            CALL   SHORT_DELAY
            MOV    A,DATA_IN
            RL     A
            MOV    DATA_IN,A
            MOV    C,DAT
            MOV    DATA_IN.0,C
            CLR    CLK
            CALL   SHORT_DELAY
            DJNZ   BIT_COUNT,RECEIVE_LOOP
            CLR    DAT
            RET
LONG_DELAY: MOV   TIMER,#80                  ;            延时子程序
DELAY_LOOP: DJNZ  TIMER,DELAY_LOOP
            RET
SHORT_DELAY:MOV   TIMER,#6
SHORT_LP:   DJNZ  TIMER,SHORT_LP
            RET
            END 

⌨️ 快捷键说明

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