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

    EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機教程:單片機鍵盤接口程序設計

    51單片機教程:單片機鍵盤接口程序設計

    作者: 時間:2012-08-07 來源:網絡 收藏

    DELAY:

    MOV R7,#100

    D1: MOV R6,#100

    DJNZ R6,$

    DJNZ R7,D1

    RET

    ;----------------------------------------延時程序,處理中調用

    KEYPROC:

    MOV A,B ;從B寄存器中獲取鍵值

    JB ACC.2,KeyStart ;分析鍵的代碼,某位被按下,則該位為1(因為在程序中已取反)

    JB ACC.3,KeyOver

    JB ACC.4,KeyUp

    JB ACC.5,KeyDown

    AJMP KEY_RET

    KeyStart:

    SETB StartEnd ;第一個鍵按下后的處理

    AJMP KEY_RET

    KeyOver:

    CLR StartEnd ;第二個鍵按下后的處理

    AJMP KEY_RET

    KeyUp: SETB UpDown ;第三個鍵按下后的處理

    AJMP KEY_RET

    KeyDown:

    CLR UpDown ;第四個鍵按下后的處理

    KEY_RET:RET

    KEY:

    CLR F0 ;清F0,表示無鍵按下。

    ORL P3,#00111100B ;將P3口的接有鍵的四位置1

    MOV A,P3 ;取P3的值

    ORL A,#11000011B ;將其余4位置1

    CPL A ;取反

    JZ K_RET ;如果為0則一定無鍵按下

    ACALL DELAY ;不然延時去鍵抖

    ORL P3,#00111100B

    MOV A,P3

    ORL A,#11000011B

    CPL A

    JZ K_RET

    MOV B,A ;確實有鍵按下,將鍵值存入B中

    SETB F0 ;設置有鍵按下的標志

    K_RET:

    ORL P3,#00111100B ;此處循環等待鍵的釋放

    MOV A,P3

    ORL A,#11000011B

    CPL A

    JZ K_RET1 ;直到讀取的數據取反后為0說明鍵釋放了,才從處理程序中返回

    AJMP K_RET

    K_RET1:

    RET

    D500MS: ;流水燈的延遲時間

    PUSH PSW

    SETB RS0

    MOV R7,#200

    D51: MOV R6,#250

    D52: NOP

    NOP

    NOP

    NOP

    DJNZ R6,D52

    DJNZ R7,D51

    POP PSW

    RET

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




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 黑龙江省| 丁青县| 平陆县| 麟游县| 九龙城区| 秀山| 奉化市| 丹东市| 于田县| 祁门县| 浮山县| 墨竹工卡县| 谢通门县| 阿巴嘎旗| 定远县| 开平市| 永顺县| 舞钢市| 玉溪市| 汨罗市| 惠安县| 康平县| 遂溪县| 垣曲县| 九龙坡区| 含山县| 玛沁县| 长沙县| 吕梁市| 静安区| 科技| 大冶市| 芷江| 桃园县| 安远县| 且末县| 砀山县| 龙岩市| 凤山县| 信阳市| 青冈县|