求高手幫忙!! 7乘8的矩陣鍵盤掃瞄程式,微控制器編寫的,類似51的。 急,拜謝

2025-01-28 23:50:20 字數 4385 閱讀 7071

1樓:網友

7個腳作掃瞄輸出(比如0000001做左移或1111110做左移;當然也可以做右移),8個腳做採集輸入。每掃瞄輸出乙個腳,就檢查下采集輸入腳有無變化,有變化,再查出是哪個按鈕按下去了就ok了。

電路網上面有,簡單得很。當然你也可以用4094做輸出,只用乙個4094,佔三個i/o口。用4021做輸入檢測,也只佔三個i/o口。

希望對你有幫助。

51微控制器矩陣鍵盤掃瞄程式分析?

2樓:網友

我給你乙個我自己寫的吧 有註釋。

假設按下的是s1鍵進行如下檢測(4*4鍵盤)先在p3口輸出。

p3 00001111

低四位 行會有變化。

if !=00001111

延時if !=00001111

p3再輸出11111110

p3 =00001110|11110000=11111110輸出高四位。

cord_l=p3&0xf0 //此時p3口就是輸入值01111110 而不是上面的11111110

cord_h+cord_l=00001110+01110000=01111110=0x7e //此編碼即為s1的編碼。

#include //包含標頭檔案。

#define uchar unsigned char#define uint unsigned intunsigned char const table=;//0-fuchar keyscan(void);

void delay(uint i);

void main()}

uchar keyscan(void)//鍵盤掃瞄函式,使用行列反轉掃瞄法。

return(0xff); //返回該值}void delay(uint i)//延時函式在p3口做的鍵盤。

你的去抖檢測沒有做好。

3樓:做而論道

你這函式也沒有寫全,返回值錯誤,看不太明白。

建議看看:

4樓:網友

返回值錯誤時,有多個按鍵同時按下的結果。

多看看書,簡單說,將乙個埠置為高電平,此時按鍵接通,必然另一埠的電平為高,否則按鍵關斷。

51微控制器。4*4矩陣鍵盤掃瞄程式

5樓:情鍾綠茶

首先微控制器引腳預設輸出高電瓶的。令控制某一行(假設第n行)鍵盤的引腳為0,然後按下該行的某一鍵,然後一列一列的檢查低電平(假設檢測出為第m列),由此判斷出按下的為第nm鍵。思路就是令行為低電平,檢查列(當然反之也可以)

6樓:網友

建議看一下行列式鍵盤的使用原理。

51微控制器矩陣鍵盤程式問題求解

7樓:網友

這個我知道有個類似的,你的意思就是按1下,執行函式1;按第2下,執行函式2你在檢測按鍵按下的時候。設定個變數sum=0;按1次就sum++然後就可以區分按下兩次的不同了。

void keyscan()

if(snum==1)

if(snum==2)

比如,我寫的乙個暫停的函式,按1下,執行乙個函式1,暫停;

再按1下,執行另一函式2,開始工作。

不懂的說吧 ,另外你發問題不給分,這個態度是不對滴^-^

51微控制器鍵盤矩陣掃瞄**的理解

8樓:網友

本人是學c的,但還看得懂組合語言。

mov p2,a 是把掃瞄碼賦給p2口,其實是賦給p2口的低四位,進行掃瞄;

mov a,p2 是讀取p2口的值,後面一句把低四位遮蔽了,最終還是讀取了高四位。

9樓:網友

這兩條語句就是掃瞄按鍵用的啊,這個是乙個迴圈掃瞄按鍵子程式(4*4的鍵盤),如先給p2口乙個值(11110111),如果有按鍵去讀p2口的值就看是不是(11110111),如有鍵按下這個值有可能是),是其中乙個的時候我們就認為有鍵按下。

10樓:網友

語句 mov a,p2 就是在讀鍵盤,如果沒有鍵按下,則a的值就是取反(cpl)後的值,如果有鍵按下,就要看按下的是哪個鍵了,不同的鍵按下返回不同的值,這些值也就是鍵盤的編碼。

11樓:做而論道

將累加器a的值傳送到p2口,--在p2低四位輸出一位0;

又將p2口的值傳送到累加器a,那現在a的值到底應該是多少,--a的內容取決於p2外接按鍵的狀態。

12樓:網友

如果是c語言就好了!個人建議你還是學用c語言寫程式!c語言比彙編好多了!

求51微控制器最簡單的矩陣按鍵程式

13樓:微控制器技術宅

uchar x[16]=;

uchar scan() //掃瞄鍵值的子程式} }return(key);}

求。用89c51微控制器設計4*4矩陣式鍵盤計算器程式,

14樓:網友

我剛做了乙個,不過是用c語言寫的,1602液晶顯示的。

15樓:樹清稱思楠

/*我寫的這個計算器可以算255範圍以內的整數計算,本打算再加入小數與做最後的處理工作。可是又太費時間,所以就放那裡了。看見了你的提問,也懶得改一改,你看看能不能用。*/

#include

unsigned char line,row,val;

void delay()

void delay1()

void initialcpu(void)

unsigned char leddata=; //"0-9"

unsigned char ledbai(unsigned char dat)

unsigned char ledshi(unsigned char dat)

void ledge(unsigned char dat)

unsigned char bin=1;

void ledplay(unsigned char dat)

else if(bin==2)

else if(bin==3)

unsigned char futemp=0,data1=0,data2=0;

void initialtimer0(void)

void timer0(void) interrupt 1 using 3

有值了,顯示data1,ledplay(data1);

有兩種可能,1、資料data1為零;2、直接data1沒有給它值。總之顯示data1

ledplay(data1);

輸入的是符號,接著顯示data1

ledplay(data1);

顯示的是data2

ledplay(data2);

th0=(65536-100)/256;

tr0=1;

void denghou()

unsigned char keytemp,checkvalue,key1=0x00,key2=0x00;

void dispose()

else else if(val>9&&val<16)

else if(val==13)

else if(futemp==11)

else if(futemp==14)

else if(futemp==15)

else}}

elsewhile(1) //顯示錯誤。

unsigned char getkey1(void)

unsigned char getkey2(void)

void main()}

51微控制器矩陣鍵盤問題

16樓:網友

這問題問得還是可以,scan1&0xf0 就是為了防止其他因素干擾了p1的低四位,用你說的scan1!=0xf0 程式就會認為有按鍵按下,實際則沒有。只不過在不嚴格要求下用 scan1!

0xf0 也是可以的。順便提醒你一下,程式改了,實踐下就知道了。

17樓:生活如歌

在這裡scan1就是p1口,而p1口接了矩陣式鍵盤,四行四列。在這條語句之前已經通過p1口送出了四個低電平:p1=0xf0.

這條語句p1&0xf0就是遮蔽先送出去的低四位的四個低電平。然後再通過(p1&0xf0)!=0xf0來判斷是不是有鍵按下。

18樓:網友

scan1&0xf0 應該是用來遮蔽低四位用的。

19樓:網友

是的,p口也包括其他輸入口的讀取,如果不是用全部位都需要這樣來處理,因為你不知道其他位處於什麼狀態,所以需要把不要得位遮蔽掉。

7乘8減36,這道題算式表示7乘8的積,再減去36,差是多少

由題意得式子為7 8 36 56 36 20 7 8 36 56 36 20 一個數先加上8,再乘以8,再減去8,最後除以8,結果還是8,這個數是多少 這個數是1。解題過程如下 解 設這個數為x。x 8 8 8 8 8 8 x 8 8 64 8 x 8 72 x 8 9 x 1使方程左右兩邊相等的未...

用c語言求兩個矩陣的乘積,求高手

這個不算,沒看清楚0 0 這下看清楚了,是少了再就是你是怎麼初始化的,初始化不對也會出問題 include int main printf n printf array c n for i 0 i 3 i 列印二維陣列要用二層for迴圈巢狀 return 0 你的陣列都沒有進行初始化就運算了?問題一...

數乘08的積比45乘06少7,求這個數是多少?列方程

0.8x 7 45 0.6 0.8x 45 0.6 7 0.8x 27 7 0.8x 20 x 25 設這個數位x 0.8x 45 0.6 7 0.8x 20 x 25 x 0.8 45 0.6 7 x 25 一個數乘0.8的積比45個0.6少7,這個數是多少 設這個數是x 0.8x 7 45 0....