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

📄 hd7279keyset.asm

📁 在51单片机上用7279芯片驱动键盘和数码管
💻 ASM
字号:
BIT_COUNT 	DATA 07FH
TIMER 		DATA 07EH
TIMER1 		DATA 07DH
TEN 		DATA 07CH
DATA_IN		DATA 020H
DATA_OUT 	DATA 021H
;*******************************************
;I/O的定义
;*******************************************
   CS BIT P2.0  ;HD7279A CS P2.0
   CLK BIT P2.1 ;HD7279A CLK P2.1
   DAT BIT P2.2 ;HD7279A DATA P2.2
   KEY BIT P2.3 ;HD7279A KEY P2.3

   ORG 0000H
   JMP START
   ORG 0030H
START: MOV SP,#2FH 

       MOV P2,#11011011B             ;I/O初始化 (0CBH)

       MOV TIMER,#50                 ; 25MS
START_DELAY: MOV TIMER1,#255

START_DELAY1:DJNZ TIMER1,START_DELAY1

             DJNZ TIMER,START_DELAY

             MOV DATA_OUT,#10100100B ; (0A4H )复位指令

             CALL SEND

             SETB CS                 ; CS

MAIN: JB KEY,MAIN ;

      MOV DATA_OUT,#00010101B ;15H  读键盘

      CALL SEND

      CALL RECEIVE

      SETB CS            ; CS

      MOV B,#10          ;16 BCD

      MOV A,DATA_IN

      DIV AB

      MOV TEN,A


      MOV DATA_OUT,#10100001B ; 2  0A1H

      CALL SEND               ; HD7279A

      MOV DATA_OUT,#10100001B  ;A1H

      CALL SEND

      MOV DATA_OUT,#10000001B ; ( 2 )81H

      CALL SEND

      MOV DATA_OUT,TEN       ; HD7279A

      CALL SEND

      MOV DATA_OUT,#10000000B ;    80H

      CALL SEND
      
      MOV DATA_OUT,B         ; HD7279A

      CALL SEND

      SETB CS

WAIT: JNB KEY,WAIT ;

      JMP MAIN

;*******************************************
; HD7279数据的发送
;*******************************************

 SEND: MOV BIT_COUNT,#8       ; =8

       CLR CS                 ; CS

       CALL LONG_DELAY 

;       CALL KEYSET          
 SEND_LOOP: MOV C,DATA_OUT.7  ; 1

            MOV DAT,C

            SETB CLK          ; CLK

            MOV A,DATA_OUT 

            RL A

            MOV DATA_OUT,A
            CALL SHORT_DELAY 

            CLR CLK          ; CLK

            CALL SHORT_DELAY 

            DJNZ BIT_COUNT,SEND_LOOP ; 8

            CLR DAT 
    
           RET

;*******************************************
; HD7279接收数据
;*******************************************

RECEIVE: MOV BIT_COUNT,#8 ; =8

         SETB DAT         ; P1.2(DATA)

         CALL LONG_DELAY 

RECEIVE_LOOP: SETB CLK    ; CLK

              CALL SHORT_DELAY ;

              MOV A,DATA_IN ;

              RL A

              MOV DATA_IN,A

              MOV C,DAT 

              MOV DATA_IN.0,C

              CLR CLK      ; CLK

              CALL SHORT_DELAY

              DJNZ BIT_COUNT,RECEIVE_LOOP; 8

              CLR DAT     ; DAT ( )

             RET

LONG_DELAY: MOV TIMER,#25       ; 50uS

DELAY_LOOP: DJNZ TIMER,DELAY_LOOP

           RET

SHORT_DELAY: MOV TIMER,#4       ; 8uS

SHORT_LP: DJNZ TIMER,SHORT_LP

           RET

END

⌨️ 快捷键说明

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