|
当使用独立按键的连续扫描时,这个LED灯,在按键连续按下时,有时会持续亮松开按键灭;有时松开按键还是一直亮,多操作几次才会灭。请问这是什么原因啊?
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED1=P2^0;
u8 gsmg_code[17]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴0~F
#define lcd P0
void Timedelay(u8 count_us)
{
while(count_us--);
}
u8 key_scan(u8 mode)
{
static u8 key=1;
if(mode) key=1;
if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))
{
Timedelay(1000);//这里按键采用机械键盘,需要消抖,通过延时滤过这段时间5~10ms
key=0;
if(KEY1==0) return 1;
else if(KEY2==0) return 2;
else if(KEY3==0) return 3;
else if(KEY4==0) return 4;
}
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)
key=1;
return 0;
}
void main()
{
u8 key=0,i=0;
while(1)
{
key=key_scan(1);
if(key==1) LED1=!LED1;
}
}
|
|