『壹』 矩陣鍵盤多鍵按下的單片機(51)程序及電路
加二極體可以的
要加在選通線上(如低電平選通)4選通1
這時可回以讀
4
個鍵的狀態答,循環一次
16
鍵的狀態
都有了
最後看有
幾個鍵按下
就可以了。加二極體
是為了4
選通線互相不幹擾。
對了
不加二極體
應該
也可以的,我加二極體
是選通線
還要去驅動數碼管
的選通。
『貳』 4*4矩陣鍵盤控制6位數碼管電路圖及程序
^#include<reg51.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitla=P2^6;
sbitwela=P2^7;
sbitkey1=P3^4;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
ucharnum,temp,num1;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
ucharkeyscan();
voiddisplay(ucharaa);
voidmain()
{
num=17;
la=1;
P0=0;
la=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
display(keyscan());
}
}
voiddisplay(ucharaa)
{
la=1;
P0=table[aa-1];
la=0;
}
ucharkeyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:num=1;
break;
case0xde:num=2;
break;
case0xbe:num=3;
break;
case0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xed:num=5;
break;
case0xdd:num=6;
break;
case0xbd:num=7;
break;
case0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xeb:num=9;
break;
case0xdb:num=10;
break;
case0xbb:num=11;
break;
case0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case0xe7:num=13;
break;
case0xd7:num=14;
break;
case0xb7:num=15;
break;
case0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
returnnum;
}
『叄』 矩陣鍵盤掃描法和線反轉法的電路圖有什麼不同
第一行後三個按鈕和P2.0口沒連上,按第二個鍵當然不會亮了 ,另外,最好每列都接一個上拉電阻加強防干擾能力
『肆』 用單片機設計一個矩陣鍵盤電路
^尼瑪,剛做好。
sbit scan_H0=P0^0;
sbit scan_H1=P0^2;
sbit scan_H2=P0^1;
sbit scan_L0=P0^3;
sbit scan_L1=P5^4;
sbit scan_L2=P5^5;
uchar Keycan() //按鍵掃描程序
{
unsigned char rcode, ccode ;
unsigned char which_key = 0;
write_scan_define(0x70); // 發全0行掃描碼,列線輸入
if((read_scan_define()&0x70) != 0x70) // 若有鍵按下
{
delay(10);// 延時去抖動
if((read_scan_define()&0x70) != 0x70)
{
rcode = 0xfe; // 逐行掃描初值
while((rcode&0x08) != 0)
{
write_scan_define(rcode); // 輸出行掃描碼
if((read_scan_define()&0x70) != 0x70) // 本行有鍵按下
{
ccode = (read_scan_define()&0x70)|0x07;
// GUI_sprintf_chartohex(0,0,rcode,0x07e0,0xf800);
// GUI_sprintf_chartohex(0,16,ccode,0x07e0,0xf800);
delay(1000);// 延時去抖動
while((read_scan_define()&0x70) != 0x70); //等待鍵釋放
which_key = (~(rcode|0x88) + ~(ccode|0x88));
// GUI_sprintf_chartohex(0,32,which_key,0x07e0,0xf800);
}
else
rcode = (rcode<<1)|0x01;
}
switch(which_key)
{
case 0x11: which_key=1; break;
case 0x21: which_key=2; break;
case 0x41: which_key=3; break;
case 0x12: which_key=4; break;
case 0x22: which_key=5; break;
case 0x42: which_key=6; break;
case 0x14: which_key=7; break;
case 0x24: which_key=8; break;
case 0x44: which_key=9; break;
default: break;
}
}
}
//GUI_sprintf_chartohex(0,48,which_key,0x07e0,0xf800);
return which_key; // 無鍵按下,返回值為0
}
有注釋的地方,可以加顯示,方便調試,這是3*3的,4*4的更簡單
『伍』 51單片機數碼管顯示矩陣鍵盤的按鍵,電路圖如下:
我的網路空間復裡面,有雷制同的東西。可以參考。
--同理顯示一百二十三,一千二百三十四,
其實,輸入數字,能移位顯示出來 123、1234,這就可以了。
只有當按下+-×÷=的時候,才需要把顯示的各個數碼,組合成一個數字,用來計算。
『陸』 誰能看懂這個電路圖,是個矩陣鍵盤
鍵盤是行列反轉掃描法,P3口高、低半位元組分別控制行與列,掃描分兩次完成,版下面的鏈接介紹的很權詳細。
http://wenku..com/view/42d12fc60c22590102029dd2.html
顯示部分沒啥好說了,ls244是數碼管段緩沖器,三極體是位驅動器。
『柒』 設計用2×2矩陣鍵盤,一位數碼管和8051單片機的介面電路
2×2矩陣鍵盤,共四個鍵,需要四條I/O線。如果用獨立按鍵,也是四條I/O線。所以,在按鍵較少時,是沒有必要用矩陣鍵盤的。
『捌』 設計一個4X4矩陣鍵盤鍵信號檢測電路 EDA
這個做起來抄不難的,關鍵是把內部變數想清楚。但是你要求設計完整的EDA程序,還要詳細解釋。這要求有點過了,除非有現成的,否則誰閑著蛋疼花這么多時間來做這種事情。知道上問問題最好還是具體一點的--連我這種最近看起來像是閑的蛋疼的都不想回答啊。:(