微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我写了一个4*4矩阵按键识别的程序,可是按那个键都不亮...

我写了一个4*4矩阵按键识别的程序,可是按那个键都不亮...

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
unsigned table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char X;
unsigned char scan_key(void)
{
unsigned i,temp,m,n;
bit find=0;
P1=0Xff;
for(i=0;i<4;i++)
{
   P1=0xef<<i;
   temp=~P1;
   temp=temp&0x0f;
   while(temp!=0x00)
   {
    m=i;
    find=1;
    switch(temp)
    {
     case 0x01:n=0;break;
     case 0x02:n=1;break;
     case 0x04:n=2;break;
     case 0x08:n=3;break;
     default:break;
    }
   }
}
if(find==0) return -1;
   else return(n*4+m);
}
void main()
{
while(1)
{
   X=scan_key();
   P0=table[X];
}
}

P1口高四位是行,低四位是列,我是初学,也不知道对不对,请帮我看看

P3=0xfe;
    temp=P3;                  //temp为中间变量
    temp=temp&0xf0;    //temp和P3按位与
    if(temp!=0xf0)          //如果有键被按下的话,执行if语句
    {
      delay(10);             //延时,去抖动
      if(temp!=0xf0)     //在此判断,此事是否还按下
      {
        temp=P3;
        switch(temp)
        {
          case 0xee:
               key=0;
               break;
          case 0xde:
               key=1;
               break;
          case 0xbe:
               key=2;
               break;
          case 0x7e:
               key=3;
               break;
         }
         while(temp!=0xf0)
         {
           temp=P3;
           temp=temp&0xf0;
           beep=0;
         }
         beep=1;
        display(key);
         P1=0xfe;
      }
    }
这只是令第一行为低电平的,其他的照着写写就行了

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

网站地图

Top