微控制器鍵盤掃瞄問題,初學微控制器矩陣鍵盤逐行掃瞄,問題困擾好久

時間 2022-09-29 11:45:40

1樓:阿嚦噶禱

樓主的意思是用把鍵盤連線到匯流排上吧,然後利用匯流排的時序去掃瞄鍵盤?

那樣的話鍵盤掃瞄部分的原理並沒有改動啊,還是兩鍵導通來確定鍵值的啊。

採用行列倒置的掃瞄方式是最有效的。程式裡面可能就是操作匯流排埠吧。

2樓:匿名使用者

你是不是用的擴充套件晶元。這樣的程式也不難,只要你給出你的硬體電路。

3樓:匿名使用者

請問大哥把你的題目講清楚,

一般的4乘4鍵盤不用外部擴充套件晶元都可以搞定,如果是像複雜的電腦鍵盤估計c51的4k的rom裝入後沒有什麼空間裝其他功能的程式了(如果是單一的鍵盤,沒有其他硬體是沒有意義的),下面是乙個4乘4的矩陣鍵盤程式給你參考參考(其實如果理解的話可以把它修改縮短成為20多句命令的):

#include

#define uint unsigned int#define uchar unsigned charuchar num,temp;

uint x,y,z;

uchar code table=;

void delay(uint z)

void main()

delay(5);

p3=table[num];

while(temp!=0xf0)}}

p1=0xfb;

temp=p1;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)

delay(5);

p3=table[num];}}

p1=0xfd;

temp=p1;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)

delay(5);

p3=table[num];}}

p1=0xfe;

temp=p1;

temp=temp&0xf0;

while(temp!=0xf0)

while(temp!=0xf0)

delay(5);

p3=table[num]; }}}}

4樓:銳霏符梓倩

--又掃瞄列植取反,..,

你說的,不是掃瞄法,而是反轉法。

-------------------

掃瞄法,讀出行列式鍵盤,可認為是逐行檢測。

檢測每一行之中,各個按鍵的狀態。

沒有發現按下鍵,再檢測下一行。

如果有鍵按下,就不檢測下一行了。

怎麼可能有《第一次按下鍵是否無效》?

5樓:桑軼焦冬萱

看不懂。給個程式你

//鍵盤掃瞄子函式

unsigned

char

keyscan()

while(key!=0xf0)}}

p1=0xfd;

key=p1;

key=key&0xf0;

if(key!=0xf0)

while(key!=0xf0)}}

p1=0xfb;

key=p1;

key=key&0xf0;

if(key!=0xf0)

while(key!=0xf0)}}

p1=0xf7;

key=p1;

key=key&0xf0;

if(key!=0xf0)

while(key!=0xf0)}}

return

num;}

初學微控制器矩陣鍵盤逐行掃瞄,問題困擾好久

6樓:匿名使用者

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,說明有按鍵按下

7樓:

程式是與硬體電路相關的,不知你的電路看程式只是猜。無法給出確切的回答。

一般掃瞄鍵盤,需要給一組高電位,而後掃瞄鍵盤有無按下,如有延時再判斷此鍵確實按下,才跳轉分析鍵值。

51微控制器矩陣鍵盤掃瞄問題

8樓:做而論道

/*************鍵盤掃瞄******錯誤*********/

void scan()

p2 口,如果外接的獨立按鍵,這麼做,就是對的。

p2 口,如果外接的矩陣按鍵,這麼做,就是錯的。

因為讀入前,並沒有輸出0。

9樓:

#include //_nop_();所需標頭檔案

/*************鍵盤掃瞄******錯誤*********/

void scan()

10樓:匿名使用者

因為你第乙個p2=p2|0xf0;中間這個p2不代表乙個16進製制的數,所以微控制器無法把它拿來和乙個16進製制的數進行運算!

11樓:匿名使用者

第乙個其實也是可以的,如果你在每條指令間加個nop的話。

微控制器行列式鍵盤掃瞄原理?

12樓:滴擺的火龍果

微控制器行列式鍵盤掃瞄原理如下:

1、行線p10~p13為輸出線,列線p14~p17為輸入線。一開始微控制器將行線(p10~p13)全部輸出低電平,此時讀入列線資料,若列線全為高電平則沒有鍵按下,當列線有出現低電平時呼叫延時程式以此來去除按鍵抖動。

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

3、微控制器將p10輸出為低電平,其它p11~p13輸出高電平,此時讀取列線的資料全為高電平,說明沒有在第一行有鍵按下;其次,微控制器將p11輸出低電平,其它p10、p12、p13仍為高電平。

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

擴充套件資料

微控制器學習方法

1、基礎理論知識學習

基礎理論知識包括模擬電路、數位電路和c語言知識。。在學習微控制器之前,覺得模擬電路和數位電路基礎不好的話,不要急著學習微控制器,應該先回顧所學過的模擬電路和數位電路知識,為學習微控制器加強基礎。

2、微控制器實踐

13樓:向天致信

現在的筆記本鍵盤一般都是16+8的方式,即16個pin輸出,對應列;8個輸入pin腳,對應行。

鍵盤輸入與輸出的結構如下:

在idel狀態下,ec把16條輸出線全部拉低,使能鍵盤掃瞄中斷,這樣當任意乙個按鍵按下時,就會觸發中斷(icu的int11h),然後ec就開始逐列掃面,比如out(0,1,……,15)輸出(1,1,……,1,0),(1,1,……,0,1)……(0,1,……,1,1),當數乙個列掃瞄碼,得到的行如輸入訊號為有乙個為0的時候,這是得到的列掃瞄碼與行掃瞄碼就是這個鍵的掃面碼。比如上圖按下s6的時候,列與行掃瞄碼就分別為1101,1011。然後通過掃瞄碼在scan table裡面找對應的鍵碼,傳給os,確定是哪個鍵。

在上面的圖中,我們看到,在輸入訊號每個上面都有上拉電阻,這個電阻必須有除非ec的輸入pin腳上面的有足夠的上拉能力,否則掃瞄就會出現錯誤。

下圖中,是乙個正常的鍵盤矩陣圖。鍵盤上面的數字就與下面矩陣裡面相同的數字對應。

普通鍵盤結構及工作原理

鍵盤一般有獨立式和行列式(矩陣式)兩種。當然還有其它的結構,比如交 互式結構等等,不過其它的結構比較少用,在這裡就不介紹了。在中穎的微控制器 中,有些微控制器的lcd 驅動引腳的segment 口可以共享按鍵掃瞄口,當選擇為按 鍵掃瞄口時,可以使用這些口來掃瞄按鍵,所以在外部電路可以連線lcd 和按鍵 矩陣,採用分時掃瞄進行處理。

14樓:匿名使用者

一般是在行(或列)的4 引腳上,用低電平掃瞄,然後測列(或行)的4 引腳,看哪個腳低電平,就是那個腳的行列交點的按鍵按下.

15樓:

行線與按鍵的乙個引腳相連,列線與按鍵的另乙個引腳相連。平時列線被置成低電平,沒有按鍵被按下時,行線保持高電平,而有按鍵被按下時,行線被拉成低電平。這時候控制器知道有按鍵被按下,但只能判斷出在哪一行,不能判斷出在哪一列,因此接下來就要進行鍵盤掃瞄,以確定具體是哪個按鍵被按下。

微控制器方面學習問題,微控制器學習問題

我剛畢業時也和你一樣困惑,但是要相信自己的能力,看得出來你很好學,也很上進,很多公司都會覺得你不錯的,以後找到工作在工作中相關的知識你會了解的更多,不要想幾個月就成為哪一方面的高手,慢慢積累,不斷學習,不論工作 讀本 讀碩都是在學習的過程,當你工作一段時間後,你會發現你和你身邊的同事,不論是本科還是...

微控制器問題,微控制器的問題有哪些?

理論上定時器0的中斷優先順序要比串列埠的高,你對中斷優先順序的理解有誤。在預設情況下,微控制器的5個中斷源都是同級的優先順序,只在同時申請中斷時,先響應定時器t0的中斷,但不等於t0的優先順序比串列埠高,而是同級的。在響應了同級的中斷時,是不能再響應其它同級的中斷的。你的問題解決的辦法是 在響應串列...

微控制器的延時問題,微控制器延時問題

具體說你用的8位微控制器 處理int型別時需要做兩次減法指令 而char型只需要一次 你想想在你的函式裡一共減法做了20 20 248次那也就是說換為char型資料 就相當於至少少了20 20 248條語句 按常用51微控制器,12m振盪頻率算 一條語句1微妙 加起來就可觀了吧。你仔細看看你的c語言...

關於微控制器長時間定時問題, 微控制器 微控制器的定時時間是怎樣計算?

這很簡單啊,程式我就不寫了,我說一下理論,如果說得好請把分給我,呵呵!首先是建立乙個時鐘,定義time 125us,time 1ms,time 100ms,time 1s,time 1min,time 1hour這幾個變數,利用定時器每125us產生一次中斷 最好是自動過載,這樣誤差就比較小 中斷裡...

微控制器學習問題,微控制器學習問題,迷茫啊!

彙編和c是不同的語言。學習沒有先後順序。彙編語句比較多,不容易記,c常用的才20幾個關鍵字。學習彙編可以使你更了解微控制器結構及工作原理。學習c可以使你把精力放到頂層設計上,可以把程式移植到不同的微控制器框架中。我是先學的彙編再學的c,這樣,什麼c語言指標啦,變數啦,那種迴圈效率高啦都很容易理解。但...