为什么这个键盘扫描它只有第一行成功,,,第二行没有...

2019-07-16 01:53发布

为什么这个键盘扫描它只有第一行成功,并进入读取键盘值,,第二行却没有???
  1. #include   <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4.    
  5.    //子函数
  6. void delay(int i)        //延时函数
  7. {
  8. while(i--);
  9. }   
  10. uchar key(void)         
  11. {       
  12.    uchar h,numl;
  13.     h=P2;
  14.         while(1){
  15.            P2=0xfe;
  16.         {
  17.         if(h!=0xfe)
  18.             delay(20);
  19.             if(h!=0xfe)
  20.                    {
  21.                            switch(h)
  22.                           {
  23.                           case 0xee:numl=1;break;
  24.                           case 0xde:numl=2;break;
  25.                           case 0xbe:numl=3;break;
  26.                           case 0x7e:numl=4;break;
  27.                           }
  28.                           return(numl);
  29.                    }  }

  30.         P2=0xfd;
  31.         {
  32.                 if(h!=0xfd)
  33.             delay(20);
  34.             if(h!=0xfd)
  35.                    {
  36.                            switch(h)
  37.                           {
  38.                           case 0xed:numl=5;break;
  39.                           case 0xdd:numl=6;break;
  40.                           case 0xbd:numl=7;break;
  41.                           case 0x7d:numl=8;break;
  42.                           }
  43.                            return(numl);
  44.                    } }


  45.           

  46.   
  47.        
  48.         }

  49. }

  50. void main()
  51. {       
  52. uchar a;
  53.     a=key();
  54.     switch (a)
  55.       {          
  56.           case 1:P0=0x01;delay(20000);break;
  57.           case 2:P0=0x02;delay(20000);break;
  58.           case 3:P0=0x03;delay(20000);break;
  59.           case 4:P0=0x0c;delay(20000);break;
  60.           case 5:P0=0x04;delay(20000);break;
  61.           case 6:P0=0x05;delay(20000);break;
  62.           case 7:P0=0x06;delay(20000);break;
  63.           case 8:P0=0x0d;delay(20000);break;
  64.           }
  65. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。