『壹』 矩阵键盘多键按下的单片机(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程序,还要详细解释。这要求有点过了,除非有现成的,否则谁闲着蛋疼花这么多时间来做这种事情。知道上问问题最好还是具体一点的--连我这种最近看起来像是闲的蛋疼的都不想回答啊。:(