㈠ 單片機中 的矩陣鍵盤問題
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
uint temp,num,temp1;
void delay (uint );
void main()
{
P0=0;
P2=0x08;
while(1)
{
P3=0xfd; //A=10、B=11、C=12、D=13 這里肯定不對,看你的圖應該是拉低第一行,那麼應該是 1111 1011 所以應該是FD
temp=P3; // 8421 8+4+1 =13
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
P3=0xfd; //這里也要改
temp=P3;
temp=temp&0xf0;
while (temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed: num=1;break;
case 0xdd: num=2;break;
case 0xbd: num=3;break;
case 0x7d: num=4;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
P0=table[num-1];
}
}
P3=0xfa;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
// P3=0xfc;
temp=P3;
temp=temp&0xf0;
while (temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xea: num=5;break;
case 0xda: num=6;break;
case 0xba: num=7;break;
case 0x7a: num=8;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
P0=table[num-1];
}
}
P3=0xf6;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
// P3=0xfc;
temp=P3;
temp=temp&0xf0;
while (temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe6: num=9;break;
case 0xd6: num=10;break;
case 0xb6: num=11;break;
case 0x76: num=12;break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
P0=table[num-1];
}
}
}
}
void delay (uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
;
}
㈡ 普中51單片機 矩陣鍵盤
你可以嘗試使用switch case語句代替if語句,這樣可以避免程序出現參差上的錯誤(不用套那麼多的if)
你可以嘗試把key置零總覺得你用table1【1】有點不大好
我也是新手,希望能幫到你
㈢ 單片機矩陣鍵盤
這個沒問題,看自己編程習慣了,你這個是列舉出每個按鍵的值,一般是查詢法
㈣ 51單片機2X2矩陣鍵盤的實現,求指點。
在每個內部循環都添加keyScan()函數不就行了。
檢測到按鍵反饋的數字不符合內嵌的while循環時肯定會跳出內循環去執行外部的while循環。
㈤ 51單片機矩陣鍵盤
第一個程序,在定時中斷函數中,延時,並不合適。
第二個程序,不穩定,還是按鍵檢測,太拖拉了。
4*4 矩陣鍵盤的檢測,不用寫這么多的程序。
我的網路空間裡面有實用的程序。
㈥ 矩陣鍵盤與單片機怎麼連接
矩陣鍵盤是行x列,需要看你矩陣的多少而定,接單片機IO口P0、P1都可以
矩陣鍵盤就是個按鍵陣列,不需要電源和地,電源和地是接單片機的
㈦ 怎樣知道單片機的矩陣鍵盤每個按鍵的地址
1、比如是一個4行×4列的矩陣鍵盤。
2、將4行和4列共8根線分別接到單片機的I/O口,比如接P1口,行接低4位(P1.0~P1.3),列接高4位(P1.4~P1.7)。
3、單片機先將行置第電平0,列置高電平1.
4、在鍵盤掃描程序中,判斷是否有任意按鍵按下:if((P1&0xf0)!=0xf0),表示有按鍵按下,延時消抖後,再次判斷,如果(P1&0xf0)!=0xf0,則表示有按鍵按下。
5、然後開始逐行掃描:
P1=0xfe; //第一行置為低電平「0」(P1.0輸出低電平「0」)
if(P14==0) keyval=1; //如果檢測到接P1.4引腳的列線為低電平「0」,可判斷是S1鍵被按下
if(P15==0) keyval=2; //如果檢測到接P1.5引腳的列線為低電平「0」 ,可判斷是S2鍵被按下
if(P16==0) keyval=3; //如果檢測到接P1.6引腳的列線為低電平「0」,可判斷是S3鍵被按下
if(P17==0) keyval=4; //如果檢測到接P1.7引腳的列線為低電平「0」,可判斷是S4鍵被按下
P1=0xfd; //第二行置為低電平「0」(P1.1輸出低電平「0」)
if(P14==0) keyval=5; //如果檢測到接P1.4引腳的列線為低電平「0」,可判斷是S5鍵被按下
if(P15==0) keyval=6; //如果檢測到接P1.5引腳的列線為低電平「0」,可判斷是S6鍵被按下
if(P16==0) keyval=7; //如果檢測到接P1.6引腳的列線為低電平「0」,可判斷是S7鍵被按下
if(P17==0) keyval=8; //如果檢測到接P1.7引腳的列線為低電平「0」,可判斷是S8鍵被按下
P1=0xfb; //第三行置為低電平「0」(P1.2輸出低電平「0」)
if(P14==0) keyval=9; //如果檢測到接P1.4引腳的列線為低電平「0」,可判斷是S9鍵被按下
if(P15==0) keyval=10; //如果檢測到接P1.5引腳的列線為低電平「0」,可判斷是S10鍵被按下
if(P16==0) keyval=11; //如果檢測到接P1.6引腳的列線為低電平「0」,可判斷是S11鍵被按下
if(P17==0) keyval=12; //如果檢測到接P1.7引腳的列線為低電平「0」,可判斷是S12鍵被按下
P1=0xf7; //第四行置為低電平「0」(P1.3輸出低電平「0」)
if(P14==0) keyval=13; //如果檢測到接P1.4引腳的列線為低電平「0」,可判斷是S13鍵被按下
if(P15==0) keyval=14; //如果檢測到接P1.5引腳的列線為低電平「0」,可判斷是S14鍵被按下
if(P16==0) keyval=15; //如果檢測到接P1.6引腳的列線為低電平「0」,可判斷是S15鍵被按下
if(P17==0) keyval=16; //如果檢測到接P1.7引腳的列線為低電平「0」,可判斷是S16鍵被按下
依次類推,得到4×4=16個按鍵的鍵值。就知道哪個按鍵被按下。
㈧ 請問如何用單片機 獲取矩陣鍵盤各按鍵的按下與松開的狀態
/* 鍵掃描函數 */
uchar keyscan(void)
{
uchar scancode,tmpcode;
P1 = 0xf0; // 發全0行掃描碼
if ((P1&0xf0)!=0xf0) // 若有鍵按下
{
delay(10); // 延時去抖動
if ((P1&0xf0)!=0xf0) // 延時後再判斷一次,去除抖動影響
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行掃描
{
P1 = scancode; // 輸出行掃描碼
if ((P1&0xf0)!=0xf0) // 本行有鍵按下
{
tmpcode = (P1&0xf0)|0x0f;
/* 返回特徵位元組碼,為1的位即對應於行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行掃描碼左移一位
}
}
}
return(0); // 無鍵按下,返回值為0
以上是4x4 矩陣鍵盤的哪一個鍵按下 的判斷方法
㈨ 單片機 行列矩陣鍵盤
這是一種常見的4*4矩陣鍵盤掃描按鍵的方法。其原理是先把4條列線設置為低電平,然後掃描行線,如有按鍵被按下,必定有一條行線為低電平;再把為低電平的行線設置為低電平,然後掃描列線,如有按鍵被按下,必定有一條列線為低電平。
倒數第3句(不算括弧)的 P3=x; 這里的x中的值是對應行線為低電平,其他7位為高電平。x是P3和0x0f按位或,也就是高四位(行)不變,低四位(列)全置1。但key_code重新讀取P3後,由於前面的操作中把高四位(行)的某一條線置為低電平,按下的鍵導致與該行線接觸的列線必定被拉低為低電平,所以這里key_code的低四位不是 1111,而是有一位是0,這樣結合高四位的值就可以確定鍵碼了。
51單片機中需要注意,雖然向單片機的引腳輸出1,但接著讀回的數據完全受引腳外部電平控制。原則上讀取51單片機的I/O之前必須向向對應I/O寫1,而讀回的數據完全決定於引腳外接電平。
㈩ 誰能給我講明白單片機的4x4矩陣鍵盤工作原理
給P1賦值0xf0,這時P1^4,P1^5,P1^6,P1^7為高電平,P1^0,P1^1,P1^2,P1^3為低電平。如果這時候有按鍵按下那麼P1^4,P1^5,P1^6,P1^7就有一個會變成低電平。因此P1的值就不等於0xf0,這是就可以判斷有按鍵按下。
4x4矩陣鍵盤的工作原理是在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,通過讀入輸入線的狀態就可得知是否有鍵被按下。
(10)單片機矩陣鍵盤擴展閱讀:
在鍵盤中按鍵數量較多時,為了減少I/O口的佔用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。
這樣,一個埠(如P1口)就可以構成4*4=16個按鍵,比之直接將埠線用於鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用埠線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,採用矩陣法來做鍵盤是合理的。