51单片机矩4X4阵键盘的第一排按键没反应。

大家好。
想请问一个问题。我在看郭天祥的视频,看到第五讲,矩阵键盘这一部份。。
写了程序(程序跟郭天祥写的是一样的)下载到实验板上。。但4X4矩阵键盘的第一排的4个键按了都没有反应。其他三排都有反应。请问这是怎么回事呢?键盘本身是没有问题的,因为我用了另外一块实验去试了一下。
请大家帮帮我啊。。谢谢
下面是电路图
还有代码
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num, temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17;
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;

while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
dula=1;
P0=table[aa-1];
dula=0;
}
uchar keyscan()
{
char i;
for(i = 0; i< 4; i++)
{
switch(i)
{
case 0: P3 = 0xfe;
break;
case 1: P3 = 0xfd;
break;
case 2: P3 = 0xfb;
break;
case 3: P3 = 0xf7;
break;
}
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
temp = P3 & 0xf0;
while(temp!=0xf0)
{
temp = P3 & 0xf0;
}
}
}
}
return num;
}

你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-24
P3^0被强行置高了,接地线也没用,只能把下载线拔了。

51单片机矩4X4阵键盘的第一排按键没反应。
你仔细看一下资料就会发现这个问题是开发板的问题,就是他用到的一个芯片会把单片机P3口的某个引脚置高,导致键盘不好使,解决方法是下载完程序之后拔掉下载USB线,只保留供电USB线再做测试

关于51单片机矩阵键盘的问题。
(1)P3口是准双向IO口(注意与双向IO口的区别),它 的硬件结构决定着,读取之前先写1,再读取,读取的结果才可能是正确的,你可以区域查查书。(2)4X4 矩阵键盘的8根线直接连在IO上,而独立按键有一根线固定是接地的,这就意味着必须采取扫面或者线反转的方法。比如其中一根行线赋0,相当于...

4x4矩阵键盘的工作原理是什么?
4x4矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,通过读入输入线的状态就可得知是否有键被按下。

谁能给我讲明白单片机的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矩阵键盘的工作原理是在矩阵式键盘中,每条水平线和垂直线在交...

C51单片机用IO口做为几个按键的控制,现在想用4X4键盘控制,请问下面显示...
这样我们可以先识别K01、K02、K03、K04、K05,若没有按键按下然后再和思路四的设计一样去识别其他按键。但这样存在一个问题,如果IO1配置为0,IO5读到0,那么怎么知道是K51按下还是K05按下呢,这里只需要在程序里做下判断,先判断下是不是K05按下,若不是就是K51,因为按键K01、K02、K03、K04、...

C语言,4X4矩阵键盘怎么判断有再次按键发生?
你在程序检测到按键后,加个延时去抖,不要加松手检测。然后执行第一个按键相对应的程序。然后继续按键扫描。注意这里说的是继续,也就是继续往下检测。否则你的程序就只能执行第一个按键所对应的程序了。这样,就能检测到你第二次按键的键值了。当然,这个扫描是循环的。也就是说即使你第二次按的按...

单片机中的4×4矩阵键盘的键值怎么求?
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); \/\/返...

单片机矩形键盘扫描程序那里出问题了?
这是用的4x4无源键盘,P1口依次0x0f和0xf0,根据对应输入情况判断按键,方法可行。下面是修改后的程序:\/* 这是用的4x4无源键盘,P1口依次0x0f和0xf0,根据对应输入情况判断按键,方法可行。 *\/unsigned char dis_buf;void keyscan(void){unsigned char b,M,temp;P1=0x0f;delay(10);if(P1!...

有没有高手能写写4*4的矩阵按键程序啊,还要加蜂鸣器的那种程序,急用...
如图4.14.2所示,用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。对应的按键的序号排列如图4.14.1所示图4.14.1硬件电路原理图图4.14.2系统板上硬件连线把“单片机系统“区域中的P3.0-P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的...

关于单片机4X4键盘电路?
如果C键不按下,P03仍然是高电平,哪来的低电平。所以,图上没写错,是你理解错了。你的理解:应该是列线输出高电平,如果行线上检测到高电平,说明按键被按下,这是错误的。别忘了,单片机引脚正常状态下就是高电平,按键按不按都是高电平,那怎么区分是按下了还是没按下。

相似回答
大家正在搜