• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 矩陣式鍵盤掃描原理

    矩陣式鍵盤掃描原理

    作者: 時間:2011-10-27 來源:網絡 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/150094.htm

      將鍵值顯示在七節顯示器上的單片機源碼。把每個都分成水平和垂直的兩端接入,比如說碼是從垂直的入,那就代表那一行所接收到的碼是同一個bit,而讀入掃描碼的則是水平,掃描的動作是先輸入掃描碼,再去讀取輸入的值,比對之后就可知道是哪個鍵被按下。

      比如說掃描碼送入01111111,前面的0111是代表掃描第一行P1.0列,而后面的1111是讓讀取的4行接腳先設VDD,若第一行的第三列按鍵被按下,那讀取的結果就會變成01111101(注意1111變成1101),其中LSB的第三個bit會由1變成0,這是因檎飧靄醇被按下之后,會被垂直的掃描碼電位short,而把讀取的LSB的bit電位拉到0,此即檣描

      由於這種按鍵是機械式的開關,當按鍵被按下時,鍵會震動一小段時間才穩定,榱吮苊餿8051誤判槎啻問淙臚一按鍵,我們必須在偵測到有按鍵被按下,就Delay一小段時間,使以達穩定狀態,再去判讀所按下的鍵,就可以讓的輸入穩定。

      SCAN:

      MOV R3,#F7H ; 掃描初始值

      MOV R1,#00H ; 取碼指標

      SCAN1:

      MOV A,R3 ; 開始掃描

      MOV P1,A ; 將掃描值輸出到 P1

      MOV A,P1 ; 讀入 P1 判斷是否有按下

      MOV R4,A ; 存到 R4, 判斷是否放開

      SETB C ; C=1

      MOV R5,#04H ; 掃描 P14~P17

      L1:

      RLC A ; 將按鍵值左移一位元

      JNC KEYIN ; 若 C=0, 有按, 執行 KEYIN

      INC R1 ; 將指標值加 1, 繼續掃描下一行

      DJNZ R5,L1 ; 掃描四行

      MOV A,R3 ; 載入掃描值

      SETB C ; C=1

      RRC A ; 掃描下一列(P13~P10)

      MOV R3,A ; 存回掃描值

      JC SCAN1 ; C=1, 尚未完成掃描

      RET ; 結束鍵盤掃描, 回到 Main Program

      KEYIN:

      MOV R7,#10 ; 消除彈跳

      D2:

      MOV R6,#248

      DJNZ R6,$

      DJNZ R7,D2

      D3:

      MOV A,P1 ; 讀入 P1

      XRL A,R4

      JZ D3

      MOV A,R1

      MOV DPTR,#TABLE

      MOVC A,@A+DPTR

      Table:

      db0c0h,0f9h,0a4h,0b0h,099h   ;0-4

      db   092h,082h,0f8h,080h,090h   ;5-9

      db   088h,083h,0a7h,0a1h,086h   ;A-E

      db   08eh            ;F

      end

    DIY機械鍵盤相關社區:機械鍵盤DIY




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 开远市| 灌云县| 吴江市| 若尔盖县| 洛南县| 沙河市| 安丘市| 神木县| 青田县| 高安市| 获嘉县| 仁化县| 搜索| 安仁县| 靖宇县| 波密县| 桑植县| 米泉市| 普兰县| 红河县| 黄冈市| 岑巩县| 肃宁县| 承德市| 湖口县| 博客| 湖口县| 许昌县| 富锦市| 乌拉特后旗| SHOW| 天台县| 科技| 威远县| 诏安县| 文水县| 福安市| 神农架林区| 卢湾区| 綦江县| 揭阳市|