关于51单片机矩阵键盘的问题!!

2019-03-24 20:07发布

#include<reg51.h>
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
                        0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay10ms(int n);
void main()
{
 unsigned char i,j,t;
 while(1)
  {
     P2=table[0];
  P3=0x0F;
  t=P3;
  P3=t;
 while(P3==0x0F);
 delay10ms(1);
 if(P3!=0x0F)
   {
   switch(P3)
     {
       case 0x07:i=4;;break;
       case 0x0B:i=3;break;
       case 0x0D:i=2;break;
       case 0x0E:i=1;break;
       default:i=0;break;
      }
        P3=0xEF;
     t=P3;
     P3=t;
    if(P3!=0xEF) j=1;
        P3=0xDF;
        t=P3;
     P3=t;
     if(P3!=0xDF) j=2;
     P3=0xBF;
     t=P3;
     P3=t;
       if(P3!=0xBF) j=3; 
     P3=0x7F;
     t=P3;
     P3=t;
       if(P3!=0x7F) j=4 ;
     P2=table[5*i-6+j];
 }
 }
}
void delay10ms(int n)
{
 int i,j;
 while(n--)
  {
    for(i=11;i>0;i--)
  for(j=108;j>0;j--);
  }
}
这个是4*4矩阵键盘的源程序 ,我在KEIL和PROTEUS中联调一直单步运行能显示最后结果(要按下的那个键在PROTEUS电路中我连接起来让它短路,说明是这个键按下了),但是为什么在KEIL中生成.HEX文件 加载到PROTEUS中运行时,按下按键又没反应了,是不是上面的程序有问题,希望懂的高手能解答!! [ 本帖最后由 cs350203 于 2011-1-1 20:13 编辑 ]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
inintrovert
2019-03-25 00:00
首先,你应该明白的是,你的主函数一直在运行,那么P2=table[0];和P2=table[5*i-6+j];也一直在运行,你相信他们之间不会有影响。你想要保存你的值,就一定要将他们区分开来,有键按下才改变P2的值,无键则不改变。

一周热门 更多>