本文引用地址:http://www.ex-cimer.com/article/201611/321762.htm=====================================================
矩陣鍵盤鍵值查找程序
鍵值存入30H單元
=====================================================
KEY_SCAN:;識別鍵盤有無鍵按下子程序
MOVP1,# 0F0H;置列線為0,行線為1
MOVA,P1;讀P1口
ANLA,#0F0H;取出高四位
MOVB,A;暫存到B
MOVP1,#0FH;置列線為1,行線為0
MOVA,P1;讀P1口
ANLA,#0FH;取出低四位
ORLA,B;高四位與低四位邏輯或運(yùn)算重新組合
CJNEA,#0FFH,KEY_IN1;0FFH為無按鍵按下
RET
KEY_IN1:;識別具體按鍵值子程序
MOVB,A;將按鍵的特征編碼暫存于B
MOVDPTR,#KEYTABLE
MOVR3,#0FFH
KEY_IN2:
INCR3;順序碼加1
MOVA,R3
MOVCA,@A+DPTR;查表
CJNEA,B,KEY_IN3;比較,若相同則找到按鍵的特征編碼。
MOVA,R3;找到特征編碼后,取順序碼
MOV30H,A;存入30H單元
RET
KEY_IN3:
CJNEA,#00H,KEY_IN2;末完,繼續(xù)查
RET;00H為結(jié)束碼
;特征編碼與順序編碼的對應(yīng)關(guān)系表
KEY_TABLE:
DB0EEH,0EDH,0EBH,0E7H,0DEH;0,1,2,3,4,順序碼
DB0DDH,0DBH,0D7H,0BEH,0BDH;5,6,7,8,9,順序碼
DB0BBH,0B7H,07EH,07DH,07BH, 077H;A,B,C,D,E,F順序碼
DB00H;結(jié)束碼
2、8位數(shù)碼管顯示程序的編程方法
根據(jù)要使用的數(shù)碼管的具體位置來確定掃描初值和掃描方向。
根據(jù)使用數(shù)碼管的個(gè)數(shù)來確定掃描的位數(shù)。
準(zhǔn)備好要顯示的數(shù)據(jù),放入相應(yīng)的顯示單元中。
===========================================================
8位數(shù)碼管顯示子程序
;從右至左依次點(diǎn)亮8個(gè)數(shù)碼管
===========================================================
DISPLAY:
MOV R1,#07FH;掃描初值送入R1
MOV R2,#08H;掃描位數(shù)送入R2
MOV R0,#30H;開始填充顯示單元
DISP1:MOV A,@R0;顯示內(nèi)容送入A
MOV DPTR,#TABLE;獲得表頭
MOVC A,@A+DPTR;查表獲得顯示數(shù)據(jù)
MOV P0,A;顯示單元數(shù)據(jù)
MOV P2,R1;開始顯示當(dāng)前位
MOV A,R1;準(zhǔn)備顯示下一位
RR A
MOV R1,A
INC R0;取下一個(gè)單元地址
LCALL DELAY2MS;延時(shí)2 MS
DJNZ R2,DISP1;重復(fù)顯示下一個(gè)
RET;顯示完成,返回
因鍵值顯示只需用一位數(shù)碼管,可將上面的顯示程序進(jìn)行優(yōu)化,得到下面的顯示程序。
====================================================
鍵值顯示子程序
====================================================
KEY_PLAER:
MOVA,30H;鍵值數(shù)據(jù)送入A
MOVDPTR,#TABLE;取段碼表地址
MOVCA,@A+DPTR;查顯示數(shù)據(jù)對應(yīng)段碼
MOVP0,A;段碼送入P0口
CLRP2.7;第一個(gè)數(shù)碼管顯示
CALLDELAY2MS
SETBP2.7
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH;0-F
三、演示程序的功能
當(dāng)你按下矩陣鍵盤中的任何一個(gè)鍵,蜂鳴器響一聲,并在數(shù)碼管上顯示相應(yīng)的鍵值。圖4為ME300B開發(fā)系統(tǒng)的實(shí)際演示圖片。
圖4ME300B開發(fā)系統(tǒng)顯示鍵值“E”
評論