关于按键程序连按与不支持连按的解析。
#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