单片机c语言识别长按短按,STM8 S003 按键识别 长按 短按 处理

该代码实现了一个基于STM32的按键检测功能,通过GPIO初始化和延时函数进行消抖处理。根据按键按下的时间和次数,区分长按键和短按键,并通过定时器TIM2设置不同的响应动作,如LED闪烁或者执行特定序列。
摘要由CSDN通过智能技术生成

[mw_shl_code=c,true] /**** KEY--PD5

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

#include "key.h"

extern void Delay(u32 nCount);

extern void Delays(unsigned int S);

u16 num=0;

void KEY_Init(void)

{

// GPIO_Init(GPIOD,GPIO_PIN_5,GPIO_MODE_IN_PU_NO_IT);

GPIO_Init(GPIOD, GPIO_PIN_5, GPIO_MODE_IN_FL_NO_IT);

}

u16 Key_Scan(void)

{

u16 key_press_num=0;

if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))

{

Delay(0x3ff);/* 消抖 */

if(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))

{

while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5))

{

key_press_num++;

Delay(0x3ff); //10x200=2000ms=2s

//while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出

}

}

}

return key_press_num;//按键按下 key_press_num计数松手后返回

}

void Hand_key(void)

{

u16 a,key_press_num=0;

key_press_num=Key_Scan();

if(key_press_num>405) //大约2s

{

key_press_num=0; //如果达到长按键标准 //则进入长按键动作

while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出

TIM2_SetCompare2(0);

Delays(1);

TIM2_SetCompare2(100);

Delays(1);

TIM2_SetCompare2(0);

Delays(1);

TIM2_SetCompare2(100);

Delays(10);

for(a=100;a>0;a--)

{

Delay(0xfff);

TIM2_SetCompare2(a);

}

TIM2_SetCompare2(0);

}

else if(key_press_num>0&&key_press_num<400)

{

key_press_num=0; //如果达到短按键标准 //则进入短按键动作

while(GPIO_ReadInputPin(GPIOD,GPIO_PIN_5));//这里用于识别是否按键还在按下执行相关动作,否则退出

num++;

// TIM2_SetCompare2(90);

if(num==1)

{

Delay(0xfff);

for(a=0;a<=99;a++)

{

Delay(0xfff);

Delay(0xfff);

TIM2_SetCompare2(a);

}

TIM2_SetCompare2(100);

}

if(num==2)

{

Delay(0xfff);

for(a=100;a>70;a--)

{

Delay(0xfff);

Delay(0xfff);

TIM2_SetCompare2(a);

}

TIM2_SetCompare2(70);

}

if(num==3)

{

num=0;

Delay(0xfff);

for(a=70;a>10;a--)

{

Delay(0xfff);

Delay(0xfff);

TIM2_SetCompare2(a);

}

TIM2_SetCompare2(10);

}

}

}[/mw_shl_code]

产品使用有效。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值