标题: 求分享 stm32f0304FP6单片机按键消抖程序 [打印本页]

作者: sr861126    时间: 2023-3-2 17:38
标题: 求分享 stm32f0304FP6单片机按键消抖程序
   stm32 的按键程序消抖的发一下,谢谢大侠

作者: 111111yfyf    时间: 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;
}

这个嘛

作者: sr861126    时间: 2023-3-2 19:41
111111yfyf 发表于 2023-3-2 18:57
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;

很卡,用不了
作者: 暖西夏    时间: 2023-3-9 15:21
if(POWER_KEY)//按键扫描
                {
                        Key_Count++;
                        if(Key_Count >= 20)
                        {

                        }
                }
作者: 天ノ忆    时间: 2023-3-9 17:03
这也有必要问?但凡去看一下百度一下原理也不至于会在这发帖问,您是一点脑子都不想动吗?
作者: 13872888583    时间: 2023-3-10 08:28
sr861126 发表于 2023-3-2 19:41
很卡,用不了

很卡正常,我一般用中断。
作者: Hephaestus    时间: 2023-3-10 19:48
用systick中断来判断呗。
作者: hzsweet    时间: 2023-3-11 11:25
延时函数
作者: lkc8210    时间: 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. }
复制代码



作者: Y_G_G    时间: 2023-3-17 20:05
想认真学的,就用状态机去消抖
不想认真学的,直接延时,简单省事
连一个延时代码都不想自己写的............
作者: rayin    时间: 2023-3-18 09:32
软件层面做消抖处理之外, 可以在按键与GND之间并联一个0.1nF的电容, 本人实测效果更好.
作者: nimrod    时间: 2023-3-19 09:51
判断两次读取,然后中间加delay就行
作者: a399288395    时间: 2023-3-20 11:22
能不用延时就千万不要用延时;从开始就打好基础;杜绝任何会堵塞程序的无意义延时;论坛里搜一下;有很多高手写范例  有用读按键标志位的方法;有用定时扫描的方法;一个按键消抖而已;只要搞懂原理了; 51 或者32 都通用;
http://www.51hei.com/bbs/dpj-133523-1.html




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1