51单片机矩阵键盘调试问题

void keyboard(){
char temp,aa; P1=0x7f; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay10ms(); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; keystate=1; switch(temp) { case 0x77:keyvalue=1;break; case 0x7b:keyvalue=2;break; case 0x7d:keyvalue=3;break; case 0x7e:keyvalue=0;break;
} } }
P1=0xbf; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay10ms(); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; keystate=1; switch(temp) { case 0xb7:keyvalue=7;break; case 0xbb:keyvalue=8;break; case 0xbd:keyvalue=9;break; case 0xbe:keyvalue=10;break;
} } }
P1=0xef; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay10ms(); temp=P1; temp=temp&0x0f; if(temp!=0x0f) { temp=P1; keystate=1; switch(temp) { case 0xe7:keyvalue=11;break; case 0xeb:keyvalue=12;break; case 0xed:keyvalue=13;break; case 0xee:keyvalue=14;break;
} } }
P1=0xdf; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay10ms(); temp=P1; P1=temp&0x0f; if(temp!=0x0f) { temp=P1; keystate=1; switch(temp) { case 0xd7:keyvalue=4;break; case 0xdb:keyvalue=5;break; case 0xdd:keyvalue=6;break; case 0xde:keyvalue=0;break; } } }
while(aa<10&&temp!=0x0f) { temp=P1; temp=temp&0x0f; delay10ms(); aa++; }

}
程序调试正确,4*4矩阵键盘只有1,2,4行有效,第三行键盘没有作用,到底是哪里的问题?

……
  P1=0xdf;
  temp=P1;
  temp=temp&0x0f;
  if(temp!=0x0f)
  {
   delay10ms();
   temp=P1;
   P1=temp&0x0f;--错了
   if(temp!=0x0f)
   {
    temp=P1;
……
应为:
   temp=temp&0x0f;

温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机矩阵键盘检测方面的问题
第一个问题,应该是考虑如果先开锁存器,在那一时刻,P0的值还是上一次给P0赋的值,下在一条语句才将这次的值给P0,这样会造成数码管的余辉,静态显示的时候,因为太快看不到,动态显示时,就会比较明显了。第二个问题他的程序应该检测的是高四位,是否被拉低,因为temp和0xf0与,低四位不管是什...

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

单片机矩阵检测时的若干疑问,困扰4年了!
2,P3.0可以控制的话,应该是P3.0-3没有上拉,P3.4-7上拉(没图,不能具体确定,反正不可控的4位全是高,可控的4位可高可低),P3.0是0变1,P3.4还是1 付个矩阵键盘图,图中R26-R29为上拉,P1.0-3是不可控的-全高,P1.4-7为可控的-按键按下后寄存器才变高,...

帮忙看看这个51单片机的计数器程序哪里出问题了吧,用矩阵键盘控制的
1、数码管显示部分的问题,没有消 0 ,C 语言中变量初值都是 0 ,所以一开始就会显示 0 如果你不想让显示 0 ,那就要写消 0 的程序,就加两句话,很简单的 2、键盘处理部分的问题,如果确认你的键盘检测是对的,那么就是键值处理部分的问题了 3、51都是加法计数器,如果你要想进行减法计数的...

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

关于51单片机的问题,独立键盘和矩阵键盘怎么同时使用?懂的来帮帮忙啊...
你可以不要定义在同一个引脚上连起来一个引脚的四个按键,你试试控制8个单片机不同引脚上的按键编程一下试一试。程序上,你的独立按键程序和矩阵键盘程序要分开,独立键盘的程序高低四位判断是相反的,这个一定要注意。你可以让独立按键在那里扫描,矩阵键盘用标志位扫描一下,一旦标志位置位才扫描矩阵,...

一个关于51单片机矩阵键盘的问题。我现在已经能实现矩阵键盘的检测,我 ...
你可以根据程序 自己连接电路图 完全好使 include <AT89X51.H> include<intrins.h> define uint unsigned int define uchar unsigned char uchar code tab[]={0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};uchar code tabl[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x...

51单片机的问题,矩阵键盘和独立键盘混乱了。。。求帮助
你好:这是郭天祥的板子的按键接口。s6、10、14、18与s2接在一起了,s7、11、15、19与s3接在一起了。。。这样使用矩阵键盘时,独立按键对矩阵的影响是非常大的。希望我的回答能帮助到你。

单片机矩阵键盘检测的疑问
temp=temp&0xf0;\/\/这三句跟上面重复,功能是软件消抖 while(temp!=0xf0) \/\/延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。{ temp=P3;switch(temp)...我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。

51单片机的矩阵键盘检测问题
扫描按键有没有释放,如果释放再加个消抖延时,再扫描有没有释放,如果按键释放则确认已经松手了。我是这么做的,可以用

相似回答