标题: 大家能帮我看一下这个单片机按键长按程序的问题吗 [打印本页]

作者: gaoky    时间: 2020-2-28 15:07
标题: 大家能帮我看一下这个单片机按键长按程序的问题吗
之前请教过大家,单自己想了好久都没想明白,是如果计数器累加,当10和计数器相同时,按键码为1,当计数器加到大于1100时,按键码也为1,然后给计数器赋值1000,这里就想不通了if(KEY1 == 0)              //如果KEY1键按下
        {
                cntk1++;    //在按下的时间段不断计数(通过循环)
                if(cntk1 == 10)  KeyCode = 1;   //如果程序循环了10次 但按下的时间未达到1100次,属短按 只作为一次按键 单次触发
                if(cntk1 > 1100)                      //如果时间计数大于1100次 (按键一直按下),每计数10次作为一次按键
                {
                        KeyCode = 1; cntk1 = 1000;  //连续触发
                }
        }

作者: sea_blue    时间: 2020-2-28 16:16
这个就要看写程序的人想达到什么目的了,不知道目的这样看也看不出什么,随便怎么写都可以。
作者: sea_blue    时间: 2020-2-28 16:20
这要看写程序的人想要达到什么目的了,就这样随便怎么写都是可以的。
作者: csmyldl    时间: 2020-2-28 17:03
如果是短按,没等到计数到1100,按键就松开了,此时KeyCode = 1,主程序会对该按键进行处理(仅一次),当计数大于1100时,说明你的按键一直没松开,这时KeyCode = 1,同样是1,但第一次为1时仅是计数到10次,主程序处理完后,计数还在增加,增加到1100时,又KeyCode = 1,主程序同样要处理,还处理完后,设置计数为1000,再计数100次,又KeyCode = 1,……这样就实现按键不松开,该键一直是有效的,且每计数100次有效一次,即所谓连续触发
作者: hahayachan    时间: 2020-2-28 17:05
應該 將這個 cntk1 = 1000 改成 cntk1 = 1090;
下面是以改嘅程式.



if(KEY1 == 0)              //如果KEY1键按下
        {
                cntk1++;    //在按下的时间段不断计数(通过循环)
                if(cntk1 == 10)  KeyCode = 1;   //如果程序循环了10次 但按下的时间未达到1100次,属短按 只作为一次按键 单次触发
                if(cntk1 > 1100)                      //如果时间计数大于1100次 (按键一直按下),每计数10次作为一次按键
                {
                        KeyCode = 1; cntk1 = 1090;  //连续触发
                }
        }
作者: wis98    时间: 2020-3-7 08:31
每次按键都是从0到N次,也就是说,长按也要从短按所设定的识别数经过,这样,就算长按,短按也触发了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1