找回密码
 立即注册

QQ登录

只需一步,快速开始

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

TM1650按键的长按短按识别

[复制链接]
跳转到指定楼层
楼主
小弟初学者,基本功不行,请教各位大神不吝赐教,TM1650扫描按键,单片机怎么来识别短按,长按和双击来实现不同的功能



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-12-18 14:16 来自手机 | 只看该作者


1000


20()1000
回复

使用道具 举报

板凳
ID:433219 发表于 2022-12-19 08:23 | 只看该作者
长按键很简单啊。
void Key_Act(void)
{
    uchar key_num=0;
   
    if(ms200_ok_flag==1)
    {
        ms200_ok_flag=0;
        
        key_num=KeyScan();
        if(last_key != key_num)//键值有变
        {
            Key_Fun(last_key);//短按->执行

            last_key = key_num;//键值更新
        }
        else//last_key == key_num//键值无变化
        {
            if(key_num != 0)//有效长按键
            {
                switch(key_num)
                {
                    case 1 ://启停:长按3s清零
                            break;
                    case 2 ://++
                            break;
                    case 3 ://--
                }
            }
        }
    }
}
回复

使用道具 举报

地板
ID:1056945 发表于 2022-12-22 12:41 | 只看该作者
wkman 发表于 2022-12-19 08:23
长按键很简单啊。
void Key_Act(void)
{

我试试看,迷糊了几天,搞死了
回复

使用道具 举报

5#
ID:1056945 发表于 2022-12-22 13:59 | 只看该作者

你的意思是不是用定时器计时然后再判断
回复

使用道具 举报

6#
ID:161164 发表于 2022-12-23 11:31 | 只看该作者
菜鸟123321 发表于 2022-12-22 13:59
你的意思是不是用定时器计时然后再判断

审批AI把我的代码删了

定时器产生1ms中断
每1ms读取TM1650的键值一次以下是示范代码


回复

使用道具 举报

7#
ID:996773 发表于 2023-1-6 09:18 | 只看该作者
不要用中断,中断留给更重要的显示部件用,读一次1650返回的键值确认按下的话用软件延时0.5秒再读键如果再按下再回头读键,反复七八次就达到几秒长按的要求。如果一个读键都用到中断的话会影响扫描方式的显示状态。
回复

使用道具 举报

8#
ID:161164 发表于 2023-1-6 10:07 | 只看该作者
hi等你 发表于 2023-1-6 09:18
不要用中断,中断留给更重要的显示部件用,读一次1650返回的键值确认按下的话用软件延时0.5秒再读键如果再 ...

1650内置扫描显示驱动
不需要用中断来更新
回复

使用道具 举报

9#
ID:996773 发表于 2023-1-9 15:27 | 只看该作者
lkc8210 发表于 2023-1-6 10:07
1650内置扫描显示驱动
不需要用中断来更新

对对对,我居然忘记1650是个显示驱动,发送一次显示数据就能亮,我用长按短按并没有用到中断
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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