- ;=================================================================
- ;程序編寫人:蘭建
- ;編寫地點:51hei培訓機構
- ;時間:6月4日上午星期四
- ;功能:矩陣鍵盤在P1口,利用反轉法讀取鍵值,16個獨立按鍵中的1-15號
- ;按鍵均有兩個功能,定義16號按鍵為功能鍵,按下不顯示任何數字,當按
- ;住這個案件不松,再按下1-15號按鍵時,數碼顯示16-30.
- ;=======================開始初始化================================
- SHUCHU EQU P0 ;定義P0口為輸出口
- PIANXUAN EQU P2 ;設置P2.0為片選
- JIANPAN EQU P1 ;鍵盤接口
- ;========================程序開始================================
- ORG 00H ;程序開始
- JMP START ;跳到START
- ORG 0030H ;入口地址
- START:
- MOV PIANXUAN,#05 ;片選
- MOV SHUCHU,#0FFH ;上電默認不顯示
- MOV R0,#00H ;順序碼清零
- MOV 30H,#00H ;鍵值存儲單元清零
- LOOP:
- MOV JIANPAN,#0F0H ;把P1口高四位設為輸入,同時把低四位設為0
- MOV A,JIANPAN ;讀P1口高四位列線
- ANL A,#0F0H ;屏蔽低四位
- MOV B,A ;保存高四位列線
- MOV JIANPAN,#0FH ;把P1口低四位設為輸入,同時把高四位設為0
- MOV A,JIANPAN ;讀取P1口低四位行線
- ANL A,#0FH ;屏蔽高四位
- ORL A,B ;列線和行線合并
- CJNE A,#0FFH,KEY ;判斷是否右鍵按下,右則跳到按鍵處理
- JMP LOOP ;沒有返回繼續查詢
- KEY:
- MOV 30H,A ;保存鍵值
- MOV DPTR,#TAB1 ;指向鍵值表
- MOV R0,#0FFH ;FF+1=0所以R0里面放FF,既可以顯示0
- L1:
- INC R0 ;順序碼加1
- MOV A,R0 ;
- MOVC A,@A+DPTR ;查鍵值表
- CJNE A,#77H,L2 ;判斷是否鍵值為表格最后一個
- JMP LOOP ;相等表示沒按鍵按下或者查到最后了,返回重新查詢
- L2:
- CJNE A,30H,L1
- CALL JISUAN ;計算處理分離十位和個位
- CALL DISPLAY ;動態顯示十位和個位
- JMP LOOP ;返回、重新查詢
- ;========================計算子程序=========================
- ;輸入:30H
- ;輸出:"A和B"
- ;實現的功能:把30H的數據的十位和個位分離出來
- ;============================================================
- JISUAN:INC R0
- MOV A,R0 ;數據放在A中
- MOV B,#10 ;除數放在B中
- DIV AB ;商放在A中,余數放在B中
- RET
- ;========================顯示子程序==========================
- ;輸入:"A"
- ;輸出:"P0口"
- ;實現的功能:把A的數輸出到P0口顯示,十位和個位分開顯示
- ;============================================================
- DISPLAY:MOV DPTR,#TAB
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;顯示十位
- MOV PIANXUAN,#02H ;片選
- CALL DELAY
- MOV SHUCHU,#0FFH
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;顯示個位
- MOV PIANXUAN,#03H ;片選
- CALL DELAY ;延時
- MOV SHUCHU,#0FFH
- RET
- ;========================延時程序============================
- ;輸入;無
- ;輸出: 無
- ;實現的功能:延時一段時間
- ;============================================================
- DELAY:
- MOV R6,#80
- L7:MOV R5,#80
- DJNZ R5,$
- DJNZ R6,L7
- RET
- ;=======================共陽查表數據==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H, 82H,0F8H,80H,90H ;0-9共陽極數據
- ;=======================共陽查表數據==============================
- TAB1:DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
- DB 0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H ;反轉描碼表
- DB 66H,56H,36H,76H,65H,55H,35H,75H,63H
- DB 53H,33H,73H,67H,57H,37H,77H
- ;=========================程序結束================================
- END
復制代碼
|