×
单片机 > 单片机程序设计 > 详情

C51按键识别,等待释放

发布时间:2020-06-04 发布时间:
|

#include
unsigned char val;
unsigned char i,j,k;
sbit k1=P3^4;
void delayms(int ms) // 1ms
{
 unsigned char i,j;
 for(;ms>0;ms--)
  for(i=6;i>0;i--)
   for(j=82;j>0;j--);
}

void main()
{
 val=0xff;
 while(1)
 {
  if(k1==0)
  {
   delayms(10);
   if(k1==0)
   {

    P0=val;
    val--;
   }
   while(k1==0); //等待按键释放,要按信一直减,取消这一句即可
  }
   }
}

/***********************************************************************************************************************

多按键识别,

#include
unsigned char val;
unsigned char key_val;
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit k4=P3^5;
void delayms(int ms) // 1ms
{
 unsigned char i,j;
 for(;ms>0;ms--)
  for(i=6;i>0;i--)
   for(j=82;j>0;j--);
}
void scankey()
{
 key_val=0x00;
 key_val |=(!k4); //0x08
 key_val <<=1;
 key_val |=(!k3); //0x04
 key_val <<=1;
 key_val |=(!k2);  //0x02
 key_val <<=1;
 key_val |=(!k1);  //0x01
}

void main()
{
 while(1)
 {
  scankey();
  if(key_val!=0)
  {
   delayms(10);
   scankey();
   if(key_val!=0)  
   {
    switch(key_val)
    {
     case 0x01: P0=0xfe;break;        //k1
     case 0x02: P0=0xfd;break;        //k2
     case 0x04: P0=0xfb;break;        //k3
     case 0x08: P0=0xf7;break;       //k4
     }
   }  
  }
   }
}

 

***************************************************//////////////////////////////////////



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向