新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機4×4矩陣按鍵程序

        51單片機4×4矩陣按鍵程序

        作者: 時間:2016-11-29 來源:網絡 收藏
        ORG 0000H
        LJMP MAIN ;跳轉至主程序ORG 0100HMAIN: LCALL KEY_INMOV P0,ALCALL DELAJMP MAIN;======================;判斷有無按鍵,無按鍵直接返回;KEY_IN: MOV P1,#0F0H ;置行線為低電平,讀列線狀態(在高4位,無按鍵則全為1); MOV A,P1; ANL A,#0F0H ;屏蔽低四位; MOV B,A; MOV P1,#0FH ;置列線為低電平,讀行線狀態(在低4位,無按鍵則全為1); MOV A,P1; ANL A,#0FH; ORL A,B ;高四位與低四位重新組合; CJNE A,#0FFH,KEYSCAN ;0FFH為末按鍵; RET;==========================================;//=============鍵盤掃描程序==============================================;KEYSCAN:KEY_IN: MOV R1,#0 ;初始化列地址MOV R3,#11110111B ;初始化掃描碼LOOP:MOV A,R3RL AMOV R3,A ;保留掃描碼MOV P1,A ;送掃描碼MOV A,P1 ;讀鍵盤ORL A,#0F0H ;屏蔽高四位CJNE A,#0FFH,NEXT31 ;A不等于FFH,說明該列有按鍵動作INC R1 ;列地址加1,準備掃描下一列CJNE R1,#4,LOOP ;列地址不等于4,掃描下一列SJMP EXIT ;沒有按鍵,退出;//=============按鍵判斷對應位等于零,說明該行有按鍵按下==================NEXT31:JB ACC.0,NEXT32MOV R2,#0 ;第0行有按鍵SJMP NEXT5NEXT32:JB ACC.1,NEXT33MOV R2,#1 ;第1行有按鍵SJMP NEXT5NEXT33:JB ACC.2,NEXT34MOV R2,#2 ;第2行有按鍵SJMP NEXT5NEXT34:MOV R2,#3 ;第3行有按鍵NEXT5: ;計算按鍵地址MOV A,R1RL ARL A ;列地址乘4(每列對應4行)ADD A,R2 ;加行地址MOV DPTR,#KEYTABMOVC A,@A+DPTREXIT:; MOV P1,#0FFH ;置鍵盤接口高電平RET;延時子程序,1s延時DEL: MOV R7,#10DEL1: MOV R6,#200DEL2: MOV R5,#248HERE: DJNZ R5,HEREDJNZ R6,DEL2DJNZ R7,DEL1RET;//=============按鍵名稱表================================================KEYTAB:DB 3fH ;掃描碼0 *****************************************DB 06H ;掃描碼1 **DB 5bH ;掃描碼2 I/O口 P1.0 P1.1 P1.2 P1.3 **DB 4fH ;掃描碼3 **DB 66H ;掃描碼4 P1.4 0 1 2 3 **DB 6dH ;掃描碼5 **DB 7dH ;掃描碼6 P1.5 4 5 6 7 **DB 07H ;掃描碼7 **DB 7fH ;掃描碼8 P1.6 8 9 A B **DB 6fH ;掃描碼9 **DB 77H ;掃描碼A P1.7 C D E F **DB 7cH ;掃描碼B **DB 39H ;掃描碼C *****************************************DB 5eH ;掃描碼DDB 79H ;掃描碼EDB 71H ;掃描碼FDB 00HDB 00HEND 


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 绥棱县| 平乡县| 鲜城| 江山市| 安丘市| 合作市| 徐水县| 泾川县| 应用必备| 岳西县| 娄底市| 吉水县| 海安县| 临泉县| 晋江市| 新密市| 惠水县| 大连市| 长泰县| 宁津县| 富阳市| 中宁县| 会理县| 明光市| 甘孜| 从江县| 沈阳市| 乐山市| 扎兰屯市| 玉龙| 镇江市| 巴东县| 新源县| 福州市| 信阳市| 台东市| 绥化市| 栾川县| 来凤县| 梧州市| 安乡县|