导航:首页 > 操作系统 > 单片机矩阵键盘

单片机矩阵键盘

发布时间:2022-01-31 08:35:27

单片机中 的矩阵键盘问题

#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单片机 矩阵键盘

  1. 你可以尝试使用switch case语句代替if语句,这样可以避免程序出现参差上的错误(不用套那么多的if)

  2. 你可以尝试把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键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

阅读全文

与单片机矩阵键盘相关的资料

热点内容
编译后程序块过大不适合 浏览:669
李煜pdf 浏览:843
python写游戏逻辑 浏览:489
pdf转换成word免费版在线转换 浏览:462
荒废了三年还能做程序员吗 浏览:656
阿里云内网vpn服务器 浏览:103
l命令第一个点对第二个点对不上 浏览:829
oracle导出表命令 浏览:909
怎么写域名加密 浏览:1003
手机文件压缩出错 浏览:522
如何登录毒app 浏览:836
汽车中控台加密 浏览:862
海南农村信用社app如何开通短信 浏览:809
phpdns缓存 浏览:415
ipad腾讯视频app如何播放本地视频 浏览:990
虾米服务器关闭如何找到以前的歌 浏览:18
php自动建站 浏览:475
命令与征服3游侠网 浏览:970
腾讯云买哪个地区服务器 浏览:251
香港哪里有app卖内地零食 浏览:685