可以实现短按和长按的按键扫描小程序

#define KEY1 1

#define Cnt_Key1S xxxx // 设置短按的时间,目的是去抖动

#define Cnt_Key1L xxxx // 设置长按的时间

#define Cnt_Val_Key  xxxx // 设置长按时,按键赋值的间隔


sbit Key1 = P0^0; // 设置Key1的端口

extern unsigned char Val_Key  = 0; // 初始化按键值,这个变量是extern类型的,可被工程中的其他文件引用

void Key_Scan(void)

{

static unsigned long key1_cnt = 0; // 初始化按键Key1的计数器

// Scan Key1
if(Key1 != 0) // If Key1 is not pushed
{
if((key1_cnt >= Cnt_Key1S) && (key1_cnt < Cnt_Key1L)) // If short time push
{
Val_Key = KEY1;
}
else;
key1_cnt = 0; // Clear the counter
}
else // If Key1 is pushed
{
key1_cnt++;
if((key1_cnt >= Cnt_Key1L) && (key1_cnt % Cnt_Val_Key == 0)) // If long time push
{
Val_Key = KEY1;
}

}

}

你可能感兴趣的:(单片机开发,c语言,按键)