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

📄 7279键盘显示.asm

📁 7279的C51源程序
💻 ASM
字号:

 
;//* 功能:按键码为1~15个键值移动显示
;//****************************************************

  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
  JMP    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 + -