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

單片機鍵盤44

發布時間:2022-09-21 15:07:02

單片機獨立鍵盤和4*4矩陣鍵盤中鬆手檢測的區別

可不可以這樣認為:你以鬆手後執行指令,但鬆手後與未按鍵都是同一電平,相當於一直判定為你不按鍵在執行,那你的鍵盤當然失去了作用,要明白,鍵盤識別都是靠電平變化來實現的

Ⅱ 單片機4x4按鍵中斷掃描法中的鍵盤編碼的問題

嗯,想法很不錯..
我試著幫你解釋下第一個吧..
這應該是選用的線掃法(好像這么說的吧).
比如說,鍵盤口為,P1
在一開始輸出,01111111B,再判斷P1口值是否變化..
若沒變化再換成,10111111B,再判斷P1口值是否變化..
這樣依次到,11101111B,
在有變化時就可以得到把描碼了..就像是你那個表中所示.的數值就經過這四次都可以得出其中一種....
#include<reg51.h>
#define uchar unsigned char
#define KeyPad P0
code uchar key_tab[17]=
{0xed,0x7e,0x7d,0x7b,
0xbe,0xbd,0xbb,0xde,
0xdd,0xdb,0x77,0xb7,
0xee,0xd7,0xeb,0xe7,0XFF};
code uchar key_show[]=
{1,2,3,0x0a,
4,5,6,0x0b,
7,8,9,0x0e,
0x0c,0,0x0d,0x0f,0xff};
uchar Keyscan()
{
uchar i=0x01,j,k;
KeyPad=~i;
j=~i;
for (k=0;k<4;k++)
{
if(KeyPad==j)
{
i*=2;
KeyPad=~i;
j=~i;
}
else
k=KeyPad;//取出掃描碼.
}
i=0;
if(k!=4)
{
while(key_tab[i++]!=0xff)
{
if(k==key_tab[i])
k=i;
else
k=16;
}
}
return key_show[k];
}
以上是整個掃描鍵盤子程序..
程序編譯通過,不知道實際怎麼樣..
其中未用中斷..
不過,方法是一樣的...
明白思想才是最重要的..
祝你好運!
^_^

Ⅲ 為什麼單片機接矩陣按鍵都是4*4的不能接4*5嗎如果可以,該接哪些引腳

當然可以接成4*5的,只是相對剛好8bit的埠來說4*4正好且容易些。其實矩陣鍵盤都一個樣,比如P1接4行,P2接5列,先將P2的5列全置1,讀取P1的4行存儲到一個位元組,然後將P1的4行全置1,讀取P2的5列到另一個位元組,這兩個位元組組合起來就是對應的按鍵,原因是如果有鍵按下,那麼4行中有一個是0,5列中有一個是0,組合起來就確定唯一按鍵了。其實還有一個方法,就是在4*4矩陣上再加一個4*1矩陣,按照相同的檢測方法也是可以的。

Ⅳ 單片機4*4鍵盤輸入4位LED顯示,

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitBEEP=P3^7;

ucharcodeDSY_CODE[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00

};

ucharPre_KeyNO=16,KeyNO=16;

voidDelayMS(uintms)

{

uchart;

while(ms--)

{

for(t=0;t<120;t++);

}

}

voidKeys_Scan()

{

ucharTmp;

P1=0x0f;

DelayMS(1);

Tmp=P1^0x0f;

switch(Tmp)

{

case1:KeyNO=0;break;

case2:KeyNO=1;break;

case4:KeyNO=2;break;

case8:KeyNO=3;break;

default:KeyNO=16;

}

P1=0xf0;

DelayMS(1);

Tmp=P1>>4^0x0f;

switch(Tmp)

{

case1:KeyNO+=0;break;

case2:KeyNO+=4;break;

case4:KeyNO+=8;break;

case8:KeyNO+=12;

}

}

voidBeep()

{

uchari;

for(i=0;i<100;i++)

{

DelayMS(1);

BEEP=~BEEP;

}

BEEP=1;

}

voidmain()

{

P0=0x00;

while(1)

{

P1=0xf0;

if(P1!=0xf0)

Keys_Scan();

if(Pre_KeyNO!=KeyNO)

{

P0=~DSY_CODE[KeyNO];

Beep();

Pre_KeyNO=KeyNO;

}

DelayMS(100);

}

}

Ⅳ 使用單片機的P1口擴展4*4鍵盤矩陣,實現在鍵盤上每按一個數字鍵用靜態顯示或動態顯

P1.0~P1.3為列線,P1.4~P1.7為行線;列線和行線的交叉點接按鍵。先在列線上依次輸出1,然後再在行線上讀取;可根據行線的輸入和列線的輸出來判定是哪個按鍵按下。具體的顯示部分,應該很簡單吧。

Ⅵ 關於單片機c語言4*4小鍵盤程序

借用一下你的程序~
char
keypad_scan()
{
char
key,i;
P2=0xf0;
//定義高四位輸出,低四位輸入
while(P2!=0xf0)

//等待按鍵按下
do
{
for(i=0;i<3;i++)
{
P2=ksp[i];
//掃描出是哪一行(列)
-->但錯了,變成賦值運算了~
if(P2!=ksp[i])
//掃描出是哪一列(行)
-->但錯了~
{
delay();//延時消抖後再判斷該行有無鍵按下
key=P2;
//掃描出按鍵
-->本可以到這里了就可以直接得出按鍵值的~~~~
if(key!=ksp[i])
return
(key);
}
}
}while(1);
//是死循環,退不出來~~~
}
思路很好~~編得有點亂~~~

Ⅶ 單片機中的4×4矩陣鍵盤的鍵值怎麼求

單片機書上應該有講的哦,多查資料。
既然是4x4,即4行4列了,共需要8個I/O口,有8bit數據(如高四位為行4bit,低四位為列4bit)位:xxxx xxxx。還要結合你的程序來編碼鍵值,如果有鍵按下了,查詢所有按鍵的所連接的I/O口電平狀態,每個按鍵需要兩個I/O口,一端連接行(行4bit之一),一端連接列(列4bit之一);若此時按鍵的電平狀態為0010 0001,即十六進制數據0x21,按下的按鍵所對應的鍵值編碼即為0x21。當然為了使用方便,在確定了按下按鍵的編碼後,可對其賦值,我要將它賦值為數字鍵8,方便後續編程使用。例:

//獲取鍵值編碼,由於確定哪個按鍵按下
uchar keyscan(void)//鍵盤掃描函數,使用行列反轉掃描法
{
uchar cord_h,cord_l;//行列值
P3=0x0f; //行線輸出全為0
cord_h=P3&0x0f; //讀入列線值
if(cord_h!=0x0f) //先檢測有無按鍵按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //讀入列線值
P3=cord_h|0xf0; //輸出當前列線值
cord_l=P3&0xf0; //讀入行線值
return(cord_h+cord_l);//鍵盤最後組合碼值
}
}return(0xff); //返回該值
}

while(1)
{
key=keyscan();//調用鍵盤掃描,

//keyVal=0~15表示按鍵對應的功能
switch(key)
{
case 0x7e:keyVal=0;break;//0 按下相應的鍵顯示相對應的碼值
case 0x7d:keyVal=1;break;//1
case 0x7b:keyVal=2;break;//2
case 0x77:keyVal=3;break;//3
case 0xbe:keyVal=4;break;//4
case 0xbd:keyVal=5;break;//5
case 0xbb:keyVal=6;break;//6
case 0xb7:keyVal=7;break;//7
case 0xde:keyVal=8;break;//8
case 0xdd:keyVal=9;break;//9
case 0xdb:keyVal=10;break;//a
case 0xd7:keyVal=11;break;//b
case 0xee:keyVal=12;break;//c
case 0xed:keyVal=13;break;//d
case 0xeb:keyVal=14;break;//e
case 0xe7:keyVal=15;break;//f
}

Ⅷ 單片機4*4矩陣鍵盤,求高手

程序有問題:1、沒有按鍵按下時,你的鍵盤掃描程序並沒有返回值;
2、主函數一直在對key值進行掃描,當你按下按鍵時,顯示鍵值,這個沒問題;但是,當你松開按鍵時,掃描沒有按鍵按下,也就沒有返回值,key值應該是一個隨機的數! 我還沒搞明白為什麼會是4。

Ⅸ 誰能給我講明白單片機的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矩陣鍵盤的工作原理是在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。當按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,通過讀入輸入線的狀態就可得知是否有鍵被按下。

(9)單片機鍵盤44擴展閱讀:

在鍵盤中按鍵數量較多時,為了減少I/O口的佔用,通常將按鍵排列成矩陣形式。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。

這樣,一個埠(如P1口)就可以構成4*4=16個按鍵,比之直接將埠線用於鍵盤多出了一倍,而且線數越多,區別越明顯,比如再多加一條線就可以構成20鍵的鍵盤,而直接用埠線則只能多出一鍵(9鍵)。由此可見,在需要的鍵數比較多時,採用矩陣法來做鍵盤是合理的。

Ⅹ 單片機 4*4矩陣鍵盤

這個電路圖,只是你使用哪幾個口在程序中對應上就可以了

程序

//行列掃描程序,可以自己定義埠和掃描方式,這里做簡單介紹

#include<reg52.h>//包含頭文件

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

ucharkeyscan(void);

voiddelay(uinti);

voidmain()

{

ucharkey;

P2=0x00;//1數碼管亮按相應的按鍵,會顯示按鍵上的字元

while(1)

{

key=keyscan();//調用鍵盤掃描,

switch(key)

{

case0x7e:P0=dofly[0];break;//0按下相應的鍵顯示相對應的碼值

case0x7d:P0=dofly[1];break;//1

case0x7b:P0=dofly[2];break;//2

case0x77:P0=dofly[3];break;//3

case0xbe:P0=dofly[4];break;//4

case0xbd:P0=dofly[5];break;//5

case0xbb:P0=dofly[6];break;//6

case0xb7:P0=dofly[7];break;//7

case0xde:P0=dofly[8];break;//8

case0xdd:P0=dofly[9];break;//9

case0xdb:P0=dofly[10];break;//a

case0xd7:P0=dofly[11];break;//b

case0xee:P0=dofly[12];break;//c

case0xed:P0=dofly[13];break;//d

case0xeb:P0=dofly[14];break;//e

case0xe7:P0=dofly[15];break;//f

}

}

}

ucharkeyscan(void)//鍵盤掃描函數,使用行列反轉掃描法

{

ucharcord_h,cord_l;//行列值

P3=0x0f;//行線輸出全為0

cord_h=P3&0x0f;//讀入列線值

if(cord_h!=0x0f)//先檢測有無按鍵按下

{

delay(100);//去抖

if(cord_h!=0x0f)

{

cord_h=P3&0x0f;//讀入列線值

P3=cord_h|0xf0;//輸出當前列線值

cord_l=P3&0xf0;//讀入行線值

return(cord_h+cord_l);//鍵盤最後組合碼值

}

}return(0xff);//返回該值

}

voiddelay(uinti)//延時函數

{

while(i--);

}

不明白的在聯系我,也可以直接訪問我的Blog:hi..com/lyzhangxiang

閱讀全文

與單片機鍵盤44相關的資料

熱點內容
浙江標准網路伺服器機櫃雲主機 瀏覽:587
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:801
倩女幽魂老伺服器如何玩 瀏覽:561
電子鍾單片機課程設計實驗報告 瀏覽:999
看加密頻道 瀏覽:381
程序員算不算流水線工人 瀏覽:632
三星電視我的app怎麼卸載 瀏覽:44
簡述vi編譯器的基本操作 瀏覽:507
讓程序員選小號 瀏覽:91
加強數字貨幣國際信息編譯能力 瀏覽:584
購買的app會員怎麼退安卓手機 瀏覽:891
程序員的種類及名稱 瀏覽:293
美國程序員薪資 瀏覽:13