微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么这个键盘扫描它只有第一行成功,,,第二行没有...

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

时间:10-02 整理:3721RD 点击:
为什么这个键盘扫描它只有第一行成功,并进入读取键盘值,,第二行却没有?

  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. }

复制代码

没有人

第一行后,加一个锁定试试,不行的话把电路图发上,看一下

谢谢分享

电路图,,本来打算做4*4的,,,就是看见不成功就先用2*4的进行试水



感谢   我弄成功了   就加了几句h=P2;


嗯,加油吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top