導航:首頁 > 操作系統 > 單片機鍵盤掃描操作

單片機鍵盤掃描操作

發布時間:2022-10-09 17:22:43

『壹』 簡述單片機鍵盤掃描工作過程

鍵盤由行線列線交叉而成。列線接有上拉電阻。對第一行的行線置0,然後讀取列線碼,如果所有列線都是1說明買有被按下的鍵,繼續掃描下一行。直到能讀到0為止,讀到0時所掃描的行就是該鍵的行碼,而0所在的位是列碼。一般的鍵盤掃描都做成中斷形式,把列線所有線相與,只要有一個0就輸出0,將這個信號送給中斷,就可以實現在有鍵被按下時開啟掃描了。

『貳』 單片機鍵盤掃描。

兄弟,你好

void key()
{uchar key1,key2,key3; 這條語句後就key1=key2=key3=0了,肯定就一直在key()函數中一直不出來了撒,你的key1等是按鍵,怎麼沒有分配一個IO口呢

你如果這樣的話就可以了
void key()
{uchar key1,key2,key3;
key1=key2=key3=1;這樣的話就不會一直在key()中了

要想達到效果,估計你還的弄幾個按鍵
添幾句

sbit key1=P3^0;
。。。。。。
再把 uchar key1,key2,key3;這一句刪了,

你試一下,祝你成功

『叄』 單片機矩陣鍵盤按鍵行列逐級掃描法

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; }

『肆』 C51單片機按鍵掃描

1.設置一個狀態變數,如flag,定義flag=0為開狀態,flag=1為關狀態。
2.因為是按鍵(不是開關),所以實際上單片機讀取的應該是脈沖形式的輸入。設按鍵接單片機P01引腳,故可採用以下程序實現按鍵掃描
if(P01==0)//按下按鍵,進入下降沿
{
delay2();//20ms延時去按鍵前抖動
while(P01==0);//等待上升沿到
來,即按鍵彈起
flag=~flag;//flag取反,實現狀態切換
}
void
delay2()//20ms延時子程序
{
unsigned
char
i,k;
for(i=0;i<100;i++)
for(k=0;k<100;k++);
}
註:根據按鍵的具體接法,若按下按鍵向單片機輸入低電平,則採用以上程序;若按下按鍵向單片機輸入高電平,則將兩處P01==0均改為P01==1。

『伍』 用單片機編寫的鍵盤掃描程序怎樣編寫它的求鍵號程序

要不要我幫你寫一段,你後面沒掃描,當然無法獲取鍵值
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鍵盤掃描程序時如何開啟的

按照行順序,一行一行的開啟,如下圖:4*4共16鍵,假設P0.0-P0.3為H0-H3,P0.4-P0.7為L0-L3
(列)
L0
L1
L2
L3
(行)
H0
0
1
2
3
H1
4
5
6
7
H2
8
9
A
B
H3
C
D
E
F
首先讓
H0
=
0,然後依次檢測L0-L3,看那個鍵按下了
,則對應的L0-L3為0,這樣第一行檢測結束。比如掃描H0
行時
第一個鍵按下了,則L0=0,獲得的P0=0xee,你也可以返回一個值,比如就是0,來代表第一個鍵(0)被按下,這樣依次檢測就掃描滿16個鍵就行了。

『柒』 單片機矩陣鍵盤按鍵行列逐級掃描法

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;
}

『捌』 單片機匯編矩陣鍵盤實驗(掃描法)

關於掃描按鍵的原理,可以看下面這篇文章。

本文以循序漸進的思路,引導大家思考如何用最少的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個。

最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?

『玖』 單片機鍵盤掃描程序

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;
}

本程序,使用的變數最少,也不涉及其它介面。
代碼最少,執行效率最高。

『拾』 單片機掃描電路原理

單片機行列式鍵盤掃描原理如下:

1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。

2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。

3、單片機將P10輸出為低電平,其它P11~P13輸出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。

4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。

(10)單片機鍵盤掃描操作擴展閱讀

單片機學習方法

1、基礎理論知識學習

基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。

2、單片機實踐

准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。

閱讀全文

與單片機鍵盤掃描操作相關的資料

熱點內容
伺服器軟路由怎麼做 瀏覽:289
冰箱壓縮機出口 瀏覽:225
OPT最佳頁面置換演算法 瀏覽:642
網盤忘記解壓碼怎麼辦 瀏覽:852
文件加密看不到裡面的內容 瀏覽:651
程序員腦子里都想什麼 瀏覽:430
oppp手機信任app在哪裡設置 瀏覽:185
java地址重定向 瀏覽:268
一年級下冊摘蘋果的演算法是怎樣的 瀏覽:448
程序員出軌電視劇 瀏覽:88
伺服器系統地址怎麼查 瀏覽:54
解壓游戲發行官 瀏覽:601
國外小伙解壓實驗 瀏覽:336
頂級大學開設加密貨幣 瀏覽:437
java重載與多態 瀏覽:528
騰訊應屆程序員 瀏覽:942
一鍵編譯程序 瀏覽:129
語音加密包哪個好 瀏覽:341
有什麼學習高中語文的app 瀏覽:284
安卓手機的表格里怎麼打勾 瀏覽:411