微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 矩阵键盘检测

矩阵键盘检测

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. sbit key=P3^4;
  3. sbit dula=P2^6;
  4. sbit wela=P2^7;
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. uchar num=0,temp;
  8. uchar code table[]={
  9. 0x3f,0x06,0x5b,0x4f,
  10. 0x66,0x6d,0x7d,0x07,
  11. 0x7f,0x6f,0x77,0x7c,
  12. 0x39,0x5e,0x79,0x71};
  13. int main()
  14. {
  15.         void delay(uint z);
  16.         dula=1;
  17.         P0=0;
  18.         dula=0;
  19.         wela=1;
  20.         P0=0xc0;
  21.         wela=0;  //段选位选锁存器
  22.         while(1)
  23.         {
  24.                 P3=0xfe;   //P3口的八根接口与4X4矩阵键盘链接。
  25.                 temp=P3;
  26.                 temp=temp&0xf0;
  27.                 while(temp!=0xf0)  //判断有无按键按下
  28.                 {
  29.                         delay(5);
  30.                         temp=P3;
  31.                     temp=temp&0xf0;
  32.                         while(temp!=0xf0)
  33.                         {
  34.                                 temp=P3;    //这一行是我所不能理解的。具体理由看文末
  35.                                switch(temp)
  36.                                 {
  37.                                         case  0xee:num=1;
  38.                                                 break;
  39.                                         case  0xde:num=2;
  40.                                                 break;
  41.                                         case  0xbe:num=3;
  42.                                                 break;
  43.                                         case  0x7e:num=4;
  44.                                                 break;
  45.                                 }
  46.                                 
  47.                                 dula=1;
  48.                                 P0=table[num];
  49.                                 dula=0;
  50.                         }
  51.                         
  52.                 }
  53.                
  54.         }
  55.         return 0;
  56. }
  57. void delay(uint z)
  58. {
  59.         uint t1,y;
  60.         for(t1=z;t1>0;t1--)
  61.                 for(y=110;y>0;y--);
  62. }

复制代码

请大伙看代码段的第34行那个while循环语句,按照我自己的理解,无论P3怎么变化。temp=P3,即P3不会等于0xfe,那么while语句始终成立,但是,结果却是,它居然可以跳出那个while循环,求解为什么。

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

网站地图

Top