谁能给我一郭天祥按键消抖的C程序

2020-01-13 18:36发布

谁能给我一郭天祥按键消抖的C程序,会用汇编写,但不会用C
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
45条回答
mingyitao2052
2020-01-17 12:07
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
    for(j=127;j>0;j--);
}
void display(uchar num)
{
  P0=table[num];           
}
void matrixkeyscan()
{
  uchar temp,key;
  P3=0xfe;       //将第一行置于低电平
  temp=P3;
  temp=temp&0xf0;   
  if(temp!=0xf0)
  {
    delay(10);
    temp=P3;               
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      temp=P3;
      switch(temp)
      {
        case 0xee:key=0;break;   // 第1个按键
        case 0xde:key=1;break;   // 第2个按键
        case 0xbe:key=2;break;   // 第3个按键
        case 0x7e:key=3;break;   // 第4个按键                                                                              
      }                                                                                                                                            
      while(temp!=0xf0)                                                                                       
      {                                                                                                                        
        temp=P3;                                                                                                   
        temp=temp&0xf0;                                                                                                        
      }                                                                                                                          
      display(key);                                                                                             
    }                                                                                                                
  }                                                                                                                
  P3=0xfd;      //将第二行置于低电平                                                  
  temp=P3;                                                                                            
  temp=temp&0xf0;                                                                         
  if(temp!=0xf0)                                                                             
  {
    delay(10);
    temp=P3;
    temp=temp&0xf0;                                                                                                          
    if(temp!=0xf0)
    {                                                                                                                             
      temp=P3;
      switch(temp)
      {
        case 0xed:key=4;break;  //第5个按键                   
        case 0xdd:key=5;break;  //第6个按键       
        case 0xbd:key=6;break;  //第7个按键       
        case 0x7d:key=7;break;  //第8个按键       
      }
      while(temp!=0xf0)
      {
        temp=P3;                                                                                           
        temp=temp&0xf0;                                               
      }
      display(key);
    }
  }
   P3=0xfb;     //将第三行置低电平
  temp=P3;
  temp=temp&0xf0;   
  if(temp!=0xf0)
  {
    delay(10);
    temp=P3;               
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      temp=P3;
      switch(temp)
      {
        case 0xeb:key=8;break;   // 第9个按键
        case 0xdb:key=9;break;   // 第10个按键
        case 0xbb:key=10;break;  // 第11个按键
        case 0x7b:key=11;break;  // 第12个按键                                                                             
      }                                                                                                                                            
      while(temp!=0xf0)                                                                                       
      {                                                                                                                        
        temp=P3;                                                                                                   
        temp=temp&0xf0;                                                                                                        
      }                                                                                                                          
      display(key);                                                                                             
    }                                                                                                                
  }
   P3=0xf7;     //将第四行置低电平
  temp=P3;
  temp=temp&0xf0;   
  if(temp!=0xf0)
  {
    delay(10);
    temp=P3;               
    temp=temp&0xf0;
    if(temp!=0xf0)
    {
      temp=P3;
      switch(temp)
      {
        case 0xe7:key=12;break;  // 第13个按键
        case 0xd7:key=13;break;  // 第14个按键
        case 0xb7:key=14;break;  // 第15个按键
        case 0x77:key=15;break;  // 第16个按键                                                                             
      }                                                                                                                                            
      while(temp!=0xf0)                                                                                       
      {                                                                                                                        
        temp=P3;                                                                                                   
        temp=temp&0xf0;                                                                                                        
      }                                                                                                                          
      display(key);                                                                                             
    }                                                                                                                
  }                                                                                                   
}
void main()
{
  P0=0x00;
  P2=0xff;
  P2=0x00;
while(1)
    matrixkeyscan();

}

一周热门 更多>