<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > At89c51單片機鍵盤掃描和顯示程序

          At89c51單片機鍵盤掃描和顯示程序

          作者: 時間:2016-11-22 來源:網(wǎng)絡 收藏

          ;******************************************************
          ;* 名稱:kbd
          ;* 功能:從鍵盤中讀入按鍵值,存入寄存器A:r*4+c
          ;* 輸入:
          ;* 輸出: A=按鍵值
          ;******************************************************
          org 0000h
          ljmp main

          本文引用地址:http://www.ex-cimer.com/article/201611/319617.htm


          org 0200h
          main:
          init:
          MOV 60H,#10h
          MOV 61H,#10h
          MOV 62H,#10h
          MOV 63H,#10h
          wait:
          acall keyscan ;有鍵按下,轉定按鍵位置掃描
          acall disp
          sjmp wait


          ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
          ; p1.7p1.6p1.5p1.4 1110
          ; | | | | R*4
          ; p1.3 ----------/|--/|--/|--/|---------|===|----vcc
          ; p1.2 ----------/|--/|--/|--/|---------|===|----vcc
          ; p1.1 ----------/|--/|--/|--/|---------|===|----vcc
          ; p1.0 ----------/|--/|--/|--/|---------|===|----vcc 1111
          ; | | | |
          keyscan:
          mov R1,#0efh;0efh,依次掃描p1.4,p1.5,p1.6列
          mov R2,#0; 列數(shù)
          ks_colum:
          mov P1,R1;
          nop
          nop
          mov A,P1;從p1口取得行信息

          orl a, #0f0h

          mov r3,#0 ;行數(shù)
          ks_row:
          rrc a

          jnc ks_wait_release
          inc r3
          cjne r3,#5,ks_row

          ks_this_colum_none:; 該列無鍵按下
          mov A,R1; 掃描下一列
          rl A
          mov R1,A

          inc r2
          cjne r2,#4,ks_colum

          error:clr A; 所有列無鍵按下,返回0
          jmp ks_end
          ks_wait_release:
          mov p1,#0fh

          mov a,p1
          orl a,#0f0h
          cpl a
          jnz ks_wait_release
          ks_decode:
          mov a,r3
          rl a
          add a,r3
          add a,r2 ;r3*3+r2
          add a,#1h

          set_disp_bit:
          mov r0,#63h;放入顯示緩沖
          mov @r0,a

          ks_end:
          ret

          ;<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<led顯示部分

          disp:
          disp_number:
          push acc
          MOV R0,#60H ;顯示數(shù)碼存放在0x60~0x63(BCD形式)
          MOV R3,#0feH ;把顯示位碼取到R3
          display_scan:
          MOV A,@R0
          MOV R2,A ;把顯示數(shù)碼取到R2

          ACALL display_a_bit
          ACALL delay

          MOV A,R3
          RL A ;下一位碼

          MOV R3,A

          INC R0;下一顯示數(shù)碼
          CJNE R0,#64H,display_scan
          pop acc
          ret

          ;*******************************************************************************************
          ;r2=顯示數(shù)據(jù) r3=顯示位(0feh,0fdh,0fbh,0f7h分別指第1,2,3,4位)
          led_digit1 equ 0feh
          led_digit2 equ 0fdh
          led_digit3 equ 0fbh
          led_digit4 equ 0f7h

          display_a_bit:
          MOV DPTR,#table
          next:
          MOV A,R2
          MOVC A,@A+DPTR
          MOV P0,A ;取段碼:TABLE1+x

          MOV A,R3
          MOV P2,A ;輸出位碼

          RET
          ;*******************************************************************************************
          delay:
          MOV R6,#04H
          d1:
          MOV R7,#248
          DJNZ R7,$
          DJNZ R6,d1
          RET ;延遲 1us+4*(1us+2us*248+2us)+2us=1999us,約2ms

          ;*******************************************************************************************
          ; 8
          ; p0.0~p0.7----/-------------------------------------
          ; | | | |
          ; ===a=== ======= ====== ======
          ; f| | b | | | | | |
          ; ====g=== |=======| |======| |======|
          ; e| | c | | | | | |
          ; ===d== oh ====== o ===== o ===== o
          ; | | | |
          ; p2.0----------/------------+--------------+------------+
          ;
          ; p0: ghfedcba
          ; xxxxxxxx (請確認連接),如共陰數(shù)碼管:0000 0110,顯示1.
          table: ; 0 1 2 3 4 5 6 7 8 9,共陰
          db 3fh,06h,5bh,4fh,66h;0-4
          db 6dh,7dh,07h,7fh,6fh;5-9
          db 77h,7ch,39h,5eh,86h;A,b,C,d,E
          db 00h;關數(shù)碼管
          end



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();