按键程序连按与不支持连按

关于按键程序连按与不支持连按的解析。

#u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按 如果mode=1则使得标志位为1,否则不复位 。
if(key_up&&(KEY00||KEY10||KEY20||WK_UP1))//如果有按键按下
{
delay_ms(10);//去抖动 等待10ms消抖
key_up=0; //标志位清零
if(KEY00)return KEY0_PRES; //如果是key0按下则,返回值为KEY0_PRES 1
else if(KEY10)return KEY1_PRES;//如果是key1按下则,返回值为KEY1_PRES 2
else if(KEY20)return KEY2_PRES;//如果是key2按下则,返回值为KEY2_PRES 3
else if(WK_UP1)return WKUP_PRES;//如果是KW_UP按下则,返回值为KWUP_PRES 4
}else if(KEY01&&KEY11&&KEY21&&WK_UP0)key_up=1; //如果没有按键按下,则按键标志位置1;
return 0;// 无按键按下
}

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。

支持连按的设置从四处代码来实现。
1.static u8 key_up=1;//按键按松开标志
2if(mode)key_up=1; //支持连按 如果mode=1则使得标志位为1
3.key_up=0; //标志位清零
4.else if(KEY01&&KEY11&&KEY21&&WK_UP0)key_up=1; //如果没有按键按下,则按键标志位置1;

原理是程序运行时只有在标志位为1时才会检测按键

第一句代码给 按键标志初始化。标志位第一次运行时一定是1。同时与硬件对应的是,程序开始运行时没有按键按下。

第二句代码,选择支持连按 1 ,不支持为零。

第三句每次程序检测到有按键按下时,在读取前会将标志位清零。所以在每次读取完按键后标志位为零表示有按键按下了。

第四局如果检测没有按键按下,则标志位为1。

按着不放时:
在程序检测到有值按下的时候 kw_up=0 ,在读完按键值后直接跳出按键函数,不回执行第四句。 第一句是一个静态定义只在第一次分配内存时运行定义一次,所以也不会执行。此时我们选择的时模式 0的话,标志位直到下一次检测时还保持为 0.所以就不回检测键值。直接跳到 第四句。 第四句只检测没有按下的情况才会重置标志位。所以直接跳过。 结果就是连按时也只会检测一次键值。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43745493/article/details/108869827

posted @   xiaoberber  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示