Ⅰ 单片机 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
Ⅱ 谁能给我讲明白单片机的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矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。
(2)单片机44矩阵键盘扩展阅读:
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
Ⅲ 单片机4x4矩阵键盘
因为只要求P1^0,P1^1,P1^2,P1^3有按键按下,所以让P1^7为低电平就够了啊。你说的也可以的,就是控制其他三排矩阵了嘛。其实看出你明白了矩阵键盘的原理呢~
Ⅳ C51单片机4X4矩阵键盘检测程序问题
可以参考:
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/ef086222268d4f4eac34de59.html
程序中,读取4*4矩阵键盘的函数,可以得到0~f,和16。
当读出为16的时候,即是按键放手了,可以执行对应的功能程序。
Ⅳ 单片机4*4矩阵键盘与数码管连用问题(将某行某列的键盘显示在数码管上)
你用的是静态显示,按下某一銉后,只有列数信号被锁存,因你的行和列数码管共用P0口和同一个锁存器,所以先显示的行数被后面的列数代替,且中间还没有任何延时,所以行数只是一闪而过
即使按住按键不丢,虽行数信号可以被反复显示,但由于按銉识别时有10MS的延时,这期间行数信号是不显示的,所以行数码管看起来还只是微微闪亮
假设按键按住不放其工作过程是这样的
显示行数(可能只有1-2us)--显示列数--延时10ms(列数仍显示)--显示行数....
解决办法,在P0=table_hang[hang];
la=0;之后加延时,
并且在WHILE
(1)大循环未尾加display(hang,lie);
但也带来另外一个问题,即使不按任何按键,也会显示0行0列
可采用给行列赋初值的方法解决(给行和列赋一个不能显示的初值,例如44,然后改table_hang[]={0x06,0x5b,0x4f,0x66,0xff}及table_lie[]={0x06,0x5b,0x4f,0x66,0xff};
另一种方法,将display(hang,lie);改成
for(i=0;i<200;i++)
{
display(hang,lie);
}
在显示程序内部最好还有毫秒级延时,
将两处P0=0xff全换成延时
Ⅵ 单片机中的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
}
Ⅶ 51单片机4×4矩阵键盘,下载程序后LED全亮怎么回事
如果键盘灯亮时,按键无反应这种情况:
是接口插错了,一盘键盘的PS2接口是紫色,鼠标是绿色的,检查你插对了吗;
是断针,PS2接口有6根针,中间是定位点,其中2根是电源,其他4根是数据,你看一下是丌是断针了。
Ⅷ 4x4矩阵键盘的工作原理是什么
4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。
(8)单片机44矩阵键盘扩展阅读:
作为单片机外部设备,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。矩阵式结构的键盘比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
矩阵式结构的键盘比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。