⑴ 用單片機編寫的鍵盤掃描程序怎樣編寫它的求鍵號程序
要不要我幫你寫一段,你後面沒掃描,當然無法獲取鍵值
t1:mov
p1,#0fh
;p1介面高4位為0,低4位輸入
mov
a,p1
;讀p1
anl
a,#0fh
;屏蔽高4位
cjne
a,#0fh,t2
;有鍵按下轉t2
sjmp
t1
;無鍵按下轉回
t2:lcall
delay10;延時10ms,去抖
mov
a,p1
;重新掃描p1口
anl
a,#0fh
cjne
a,#0fh,t3
sjmp
t1
t3:mov
r0,#00
;行計數值
mov
r1,#00
;列計數值
mov
r3,#0efh
;掃描初值
t4:mov
a,r3
mov
p1,a;輸出行掃描字
mov
a,p1
mov
r1,a
anl
a,#0fh
cjne
a,#0fh,t5
;該行有鍵按下
inc
r0
;行計數器加1
,掃下一行
MOV
A,R3
RLC
A
MOV
R3,A
MOV
A,R0
CJAE
A,#04H,t4
;掃到最後一行?
t6:
ret
;結束
t5:mov
a,r1
jnb
acc.0,t7
jnb
acc.1,t8
jnb
acc.2,t9
jnb
acc.3,t10
sjmp
t6
t7:
mov
r2,#00
;0列號
sjmp
t11
t8:mov
r2,#01
;1列號
sjmp
t11
t9:mov
r2,#02
;2列號
sjmp
t11
t10:mov
r2,#03
;3列號
t11:mov
a,r0
mov
b,#04
mul
ab
;行號乘4
add
a,r2
;鍵值在A中
ret
⑵ 求單片機4*4矩形鍵盤行掃描法的掃描過程和原理!
反轉法鍵盤掃描過程:1)P3高4位為列低4位為行讓高4位為1低4位為0。2)判斷是否有按鍵按下,如果有按鍵按下則高4位上的有一位為低電平。3)去抖動程序。4)繼續判斷。5)保存高4位上的按鍵情況。6)判斷是否有按鍵按下,如果有按鍵按下則低4位上的有一位為低電平。7)去抖動。8)繼續判斷。9)保存低4位上的按鍵情況。
⑶ 單片機矩陣鍵盤按鍵行列逐級掃描法
unsigned
char
KeyScan(void)
//鍵盤掃描函數,使用行列逐級掃描法{
unsigned
char
Val;
KeyPort=0xf0;//這句其實就是整體看看是否有鍵按下,四行全送0,有鍵按下,高四位肯定不為全1
if(KeyPort!=0xf0)//表示有按鍵按下
{
DelayMs(10);
//去抖
if(KeyPort!=0xf0)
{
//表示有按鍵按下
KeyPort=0xfe;
//檢測第一行
if(KeyPort!=0xfe)
{
Val=KeyPort&0xf0;
Val+=0x0e;
//相當於檢測到第一行有鍵按下,鍵值=列(高四位)+行(低四位)
while(KeyPort!=0xfe);
DelayMs(10);
//去抖
while(KeyPort!=0xfe);
return
Val;
}
⑷ 單片機鍵盤掃描程序
2*3的鍵盤,太簡單了,不值得用循環,特別是雙重循環。
最簡明、高效的程序如下:
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
char scan_key(void)
{
P13 = 0;
if (!P10) return 0;
if (!P11) return 1;
if (!P12) return 2;
P13 = 1;
P14 = 0;
if (!P10) return 3;
if (!P11) return 4;
if (!P12) return 5;
}
本程序,使用的變數最少,也不涉及其它介面。
代碼最少,執行效率最高。
⑸ 單片機匯編矩陣鍵盤實驗(掃描法)
關於掃描按鍵的原理,可以看下面這篇文章。
本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。
首先通常想到的可能是下面這樣的設計:
這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。
總結
綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:
假設有N個IO口按照思路三可以識別N*(N-1)/2個;
按照思路四可識別N*(N-1)個;
按照思路5可以識別N*(N-1)+N個。
最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?