你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

学习STM32库开发----简单按键驱动

[复制链接]
流水源 发布时间:2018-12-9 21:14
    学习了《STM32库开发实战指南》的GPIO库函数操作,简单写了个按键驱动练习一下,实现了按键按下,按键弹起,按键短按弹起,按键长按,按键长按弹起,按键循环机打。有兴趣的可以看看。
主要代码如下:

  1. void wo_key_scan(wo_key_t *key)
  2. {
  3.         BOOL                new_state;

  4.         if((key == NULL) ||
  5.            (key->key_para == NULL)||
  6.            (key->key_gpio == NULL))        return ;

  7.         if(key->key_para->loop_time == 0)        return ;

  8.         new_state = key->key_gpio->get_state();
  9.         if(new_state != key->old_state)        //边沿
  10.         {
  11.                 if(new_state == key->key_gpio->init_state)        //
  12.                 {
  13.                         if(key->short_relese != NULL)                       
  14.                         {
  15.                                 if(key->press_time < key->key_para->short_time)               
  16.                                         key->short_relese();        //短按弹起
  17.                         }

  18.                         if(key->long_relese != NULL)
  19.                         {
  20.                                 if(key->press_time >= key->key_para->long_time)
  21.                                         key->long_relese();        //长按弹起               
  22.                         }

  23.                          if(key->relese != NULL)       
  24.                                 key->relese();        //弹起

  25.                         key->press_time = 0;
  26.                 }else        //按下
  27.                 {
  28.                          key->press_time = 1;

  29.                         if(key->press != NULL)       
  30.                                 key->press();        //按下触发
  31.                 }                        
  32.         }else
  33.         {
  34.                  if((key->press_time > 0) && (key->press_time < 0xffff))
  35.                 {
  36.                         if(key->long_press != NULL)
  37.                         {
  38.                                  if(key->press_time == key->key_para->long_time)       
  39.                                         key->long_press();        //长按       
  40.                         }

  41.                         if((key->press_loop != NULL)&&(key->press_time >= key->key_para-

  42. >short_time))       
  43.                         {
  44.                                 if(((key->press_time - key->key_para->short_time) % key-

  45. >key_para->loop_time) == 0)
  46.                                 {
  47.                                         key->loop_count ++;
  48.                                         key->press_loop();        //按下连续                                
  49.                                 }
  50.                         }

  51.                         if(key->press_time >= (key->key_para->long_time+key->key_para-

  52. >loop_time))
  53.                         {
  54.                                  key->press_time -= key->key_para->loop_time;       
  55.                         }
  56.                         key->press_time++;        //按下时间累加
  57.                 }                                               
  58.         }
  59.         key->old_state = new_state;
  60. }
复制代码
QQ截图20181209210935.jpg

工程代码:
GPIO_Key.rar (353.2 KB, 下载次数: 26)

评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20 活动奖励

查看全部评分

收藏 1 评论2 发布时间:2018-12-9 21:14

举报

2个回答
zts329547875 回答时间:2018-12-9 23:46:57
看看再说
happyavr128 回答时间:2020-2-4 21:04:50
学习一下

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版