㈠ 單片機 矩陣鍵盤 怎麼掃描多個數
將接鍵盤的埠置為讀狀態,例如接在P1口上的4*4鍵盤就寫:MOV
P1,#0F0H
然後讀P1口的狀態,然後消除鍵抖動,在確定有鍵按下的情況下逐個判斷P1.0,P1.1P,P1.2,P1.3的狀態,再逐個判斷P1.4,P1.5,P1.6,P1.7的狀態,最後的鍵值等於行首號加列號。行首號從上到下依次為:0,4,8,C,列號從左到右依次為0,1,2,3,例如第二列第三個數應該為4+2=6,第三行第二個數應為8+1=9,第一個應為8+0=8.4*4鍵盤最後一個數應為第四行初值C+第四列值3=鍵碼F.讓我們共同進步。
㈡ 單片機行列式鍵盤掃描原理
單片機行列式鍵盤掃描原理如下:
1、行線P10~P13為輸出線,列線P14~P17為輸入線。一開始單片機將行線(P10~P13)全部輸出低電平,此時讀入列線數據,若列線全為高電平則沒有鍵按下,當列線有出現低電平時調用延時程序以此來去除按鍵抖動。
2、延時完成後再判斷是否有低電平,如果此時讀入列線數據還是有低電平,則說明確實有鍵按下。最後一步確定鍵值。當判斷確實有鍵按下之後,行線輪流輸出低電平,根據讀入列線的數據可以確定鍵值。
3、單片機將P10輸出為低電平,其它P11~P13輸出高電平,此時讀取列線的數據全為高電平,說明沒有在第一行有鍵按下;其次,單片機將P11輸出低電平,其它P10、P12、P13仍為高電平。
4、此時再來讀取列線數據,發現列線讀到的數據有低電平,數值為1011(0x0B),如果我們的鍵盤布局已經確定,那麼0x0B就代表S5的值了。轉到S5鍵功能處理子程序就可以達到目的。
(2)單片機掃描鍵盤擴展閱讀
單片機學習方法
1、基礎理論知識學習
基礎理論知識包括模擬電路、數字電路和C語言知識。。在學習單片機之前,覺得模擬電路和數字電路基礎不好的話,不要急著學習單片機,應該先回顧所學過的模擬電路和數字電路知識,為學習單片機加強基礎。
2、單片機實踐
准備一台電腦、一塊單片機開發板、一套視頻教程、一本單片機教材和一本C語言教材。電腦是用來編寫和編譯程序,並將程序代碼下載到單片機上;開發板來運行單片機程序,驗證實際效果。
㈢ 單片機鍵盤掃描怎麼實現一鍵多用
1:鍵值記錄
2:時間記錄
3:是不是同一個鍵。
以上三個條件組合,一個條件用一個變數。
㈣ 單片機匯編矩陣鍵盤實驗(掃描法)
關於掃描按鍵的原理,可以看下面這篇文章。
本文以循序漸進的思路,引導大家思考如何用最少的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個。
最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?
㈤ 初學單片機矩陣鍵盤逐行掃描,問題困擾好久
P3=0x7f;//高4位作為輸出,低4 位為輸入,作為輸入時要先將其置1
每次掃描時高4位中只有一根線是0,如果沒有按鍵按下,高4位中的0就不會傳到低4位上
那麼讀P3的低4位,它將仍保持原狀態4個1(0x0f)
反之,若讀到的不是4個1,說明有按鍵按下了
temp=P3;//將P3口的狀態讀回來
temp=temp&0x0f;//只取低4 位
if(temp!=0x0f)//如果不全為1,說明有按鍵按下
{
Delay1ms(5);//消抖動
temp=P3;//再次將P3口的狀態讀回來
temp=temp&0x0f;//仍然只取低4 位
if(temp!=0x0f)//再次判斷是不是4 個1
{
temp=P3;//是 再次讀回,因高4位送出的是7,讀回也只能是7
switch(temp)//1 根輸出線上(此處是最高位)掛有4 個按鍵,因此讀回的數值只有4 種可能
其它3 根線上也各掛4個按鍵,但你此時按下也不起作用,因它們輸出是1
高4位以很快的速度輪流輸出低電平,且你按任何鍵都要持續幾十到上百ms,因此你按任何鍵都有可被掃描到
7二進制是0111 b二進制是1011 d二進制是1011 e二進制是1110
{
case 0x7e:num=1;xianshi=table[num-1];//num是你自己定義的
break;
case 0x7d:num=2;xianshi=table[num-1];
break;
case 0x7b:num=3;xianshi=table[num-1];
break;
case 0x77:num=4;xianshi=table[num-1];
break;
}