找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1680|回复: 5
打印 上一主题 下一主题
收起左侧

大家能帮我看一下这个单片机按键长按程序的问题吗

[复制链接]
跳转到指定楼层
楼主
ID:691676 发表于 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;  //连续触发
                }
        }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:682002 发表于 2020-2-28 16:16 | 只看该作者
这个就要看写程序的人想达到什么目的了,不知道目的这样看也看不出什么,随便怎么写都可以。
回复

使用道具 举报

板凳
ID:682002 发表于 2020-2-28 16:20 | 只看该作者
这要看写程序的人想要达到什么目的了,就这样随便怎么写都是可以的。
回复

使用道具 举报

地板
ID:235200 发表于 2020-2-28 17:03 | 只看该作者
如果是短按,没等到计数到1100,按键就松开了,此时KeyCode = 1,主程序会对该按键进行处理(仅一次),当计数大于1100时,说明你的按键一直没松开,这时KeyCode = 1,同样是1,但第一次为1时仅是计数到10次,主程序处理完后,计数还在增加,增加到1100时,又KeyCode = 1,主程序同样要处理,还处理完后,设置计数为1000,再计数100次,又KeyCode = 1,……这样就实现按键不松开,该键一直是有效的,且每计数100次有效一次,即所谓连续触发
回复

使用道具 举报

5#
ID:699551 发表于 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;  //连续触发
                }
        }
回复

使用道具 举报

6#
ID:33544 发表于 2020-3-7 08:31 来自手机 | 只看该作者
每次按键都是从0到N次,也就是说,长按也要从短按所设定的识别数经过,这样,就算长按,短按也触发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表