C51按键识别,等待释放
扫描二维码
随时随地手机看文章
#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
}
}
}
}
}
***************************************************//////////////////////////////////////