找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1116|回复: 7
收起左侧

发一个按键检测程序的经典写法

[复制链接]
ID:598611 发表于 2023-10-27 09:45 | 显示全部楼层 |阅读模式
  1. void scankey(void)
  2. {
  3.            if(pin_key)
  4.            {
  5.                       if(key.up&2)
  6.                       {
  7.                                  if ((key.cnt>=2)&&(key.cnt<=50)){key.data=2;}  //短按
  8.                                  key.cnt=0;
  9.                       }
  10.                       else    {key.up++;}          
  11.            }
  12.   else
  13.   {
  14.            if(key.cnt<255){key.cnt++;}           
  15.            if(key.cnt>=2)
  16.            {
  17.                       key.up=0;
  18.                       if(key.cnt==120) { key.data=1;}  //长按3S
  19.            }
  20.   }  
  21. }

  22. /*=========================================================*/
  23. void scankey(void)
  24. {
  25.         u8 i=0;
  26.         if(key.buf&1) {i++;}
  27.         if(key.buf&2) {i++;}
  28.         if(i==0)
  29.         {               
  30.           if(key.up&4)
  31.           {
  32.                   if((key.cnt>=3)&&(key.cnt<=100)&&key.onoff_flag){key.data=1;}
  33.                   key.cnt=0;
  34.                   key.all=0;
  35.                   key.onoff_flag=0;
  36.                  }
  37.                 else        {key.up++;}                       
  38.         }
  39.         else if(i>=2)
  40.   {
  41.                 if(key.all&4){key.cnt=0;key.up=0;key.onoff_flag=0;}
  42.                 else        {key.all++;}       
  43.   }       
  44.   else
  45.   {
  46.     if(key.cnt<255){key.cnt++;}
  47.           if(key.cnt>=3)
  48.           {
  49.                   key.up=0;
  50.                   if(key.all<3)
  51.                   {
  52.                           if(key.buf==1){key.onoff_flag=1;}
  53.                           if((key.cnt==150)&&(key.buf==1)){key.data=3;}
  54.                           if((key.cnt==3)&&(key.buf==2))  {key.data=2;}       
  55.                   }                                                       
  56.           }       
  57.   }                         
  58. }
  59.        



复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:227818 发表于 2023-10-27 13:33 | 显示全部楼层
楼主您好,您能补充一下程序的执行思路吗?
回复

使用道具 举报

ID:1097455 发表于 2023-10-27 14:08 | 显示全部楼层
newlined 发表于 2023-10-27 13:33
楼主您好,您能补充一下程序的执行思路吗?

私信我手把手教学,包教包会
回复

使用道具 举报

ID:672792 发表于 2023-10-27 15:03 | 显示全部楼层
如果有注释就更好了
回复

使用道具 举报

ID:276663 发表于 2023-10-27 16:11 | 显示全部楼层
我有一个问题请教一下,四个按键分别控制四个灯,四个按键又都有长按和短按,还有双击,这个程序末班支持吗?
回复

使用道具 举报

ID:1097455 发表于 2023-10-27 17:41 | 显示全部楼层
IdeaMing 发表于 2023-10-27 16:11
我有一个问题请教一下,四个按键分别控制四个灯,四个按键又都有长按和短按,还有双击,这个程序末班支持吗 ...

当然支持,变则通
回复

使用道具 举报

ID:598611 发表于 2023-10-27 19:15 | 显示全部楼层
IdeaMing 发表于 2023-10-27 16:11
我有一个问题请教一下,四个按键分别控制四个灯,四个按键又都有长按和短按,还有双击,这个程序末班支持吗 ...

这个程序有短按,长按,双击
回复

使用道具 举报

ID:275826 发表于 2023-10-28 08:47 | 显示全部楼层
写的不错,不过有点复杂了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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