找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1146|回复: 12
收起左侧

求分享 stm32f0304FP6单片机按键消抖程序

  [复制链接]
ID:302293 发表于 2023-3-2 17:38 | 显示全部楼层 |阅读模式
   stm32 的按键程序消抖的发一下,谢谢大侠
回复

使用道具 举报

ID:1064961 发表于 2023-3-2 18:57 | 显示全部楼层
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;
        if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0)) //任意一个按键按下
        {
                delay_ms(10);  //消抖
                key=0;
                if(K_UP==1)
                {
                        return KEY_UP;
                }
                else if(K_DOWN==0)
                {
                        return KEY_DOWN;
                }
                else if(K_LEFT==0)
                {
                        return KEY_LEFT;
                }
                else
                {
                        return KEY_RIGHT;
                }
        }
        else if(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)    //无按键按下
        {
                key=1;
        }
        if(mode==1) //连续按键按下
        {
                key=1;
        }
        return 0;
}

这个嘛
回复

使用道具 举报

ID:302293 发表于 2023-3-2 19:41 | 显示全部楼层
111111yfyf 发表于 2023-3-2 18:57
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;

很卡,用不了
回复

使用道具 举报

ID:807182 发表于 2023-3-9 15:21 | 显示全部楼层
if(POWER_KEY)//按键扫描
                {
                        Key_Count++;
                        if(Key_Count >= 20)
                        {

                        }
                }
回复

使用道具 举报

ID:139866 发表于 2023-3-9 17:03 | 显示全部楼层
这也有必要问?但凡去看一下百度一下原理也不至于会在这发帖问,您是一点脑子都不想动吗?
回复

使用道具 举报

ID:731755 发表于 2023-3-10 08:28 来自手机 | 显示全部楼层
sr861126 发表于 2023-3-2 19:41
很卡,用不了

很卡正常,我一般用中断。
回复

使用道具 举报

ID:883242 发表于 2023-3-10 19:48 | 显示全部楼层
用systick中断来判断呗。
回复

使用道具 举报

ID:206581 发表于 2023-3-11 11:25 | 显示全部楼层
延时函数
回复

使用道具 举报

ID:161164 发表于 2023-3-11 12:03 | 显示全部楼层

  1. u8 key_Value = 0;//全局变量,用完置零
  2. void key_Proc()//单键短按,1ms中断内运行
  3. {
  4.         static u8 Delay_XD=0; //消抖计数
  5.         if(!Key_XX)
  6.         {
  7.                 if(!Delay_XD)
  8.                 {
  9.                         key_Value = 1;
  10.                 }
  11.                 Delay_XD = 50;//消抖时间
  12.         }
  13.         else //按键抬起
  14.         {
  15.                 if(Delay_XD)Delay_XD--;//消抖
  16.         }
  17. }
复制代码


回复

使用道具 举报

ID:401564 发表于 2023-3-17 20:05 | 显示全部楼层
想认真学的,就用状态机去消抖
不想认真学的,直接延时,简单省事
连一个延时代码都不想自己写的............
回复

使用道具 举报

ID:517951 发表于 2023-3-18 09:32 | 显示全部楼层
软件层面做消抖处理之外, 可以在按键与GND之间并联一个0.1nF的电容, 本人实测效果更好.
回复

使用道具 举报

ID:404675 发表于 2023-3-19 09:51 | 显示全部楼层
判断两次读取,然后中间加delay就行
回复

使用道具 举报

ID:230500 发表于 2023-3-20 11:22 | 显示全部楼层
能不用延时就千万不要用延时;从开始就打好基础;杜绝任何会堵塞程序的无意义延时;论坛里搜一下;有很多高手写范例  有用读按键标志位的方法;有用定时扫描的方法;一个按键消抖而已;只要搞懂原理了; 51 或者32 都通用;
http://www.51hei.com/bbs/dpj-133523-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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