• 基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.20)


    1.判断长按短按

    1. u8 Mode_state_flag = 0;
    2. u32 buttonPressTime = 0;
    3. u8 longPressflag = 0;
    4. u8 shortPressflag = 0;
    5. // 普通认证 执行此处函数
    6. void T_Key0_Func(void)
    7. {
    8. if (TKey_Signal.oneBit.b0 == 1)
    9. {
    10. buttonPressTime++;
    11. }
    12. if ((TKey_Signal.oneBit.b0 == 1) && (Pre_TKey_Release.oneBit.b0 == 1)) // 按下执行
    13. {
    14. Pre_TKey_Release.oneBit.b0 = 0; // 为0时代表按键被按下,为1时代表按键松开
    15. F_User_Tkey0 = 1;
    16. FTP0IE = 1;
    17. FTP0EN = 1;
    18. FGIE = 1;
    19. }
    20. else if (TKey_Signal.oneBit.b0 == 0) // 松开执行
    21. {
    22. Pre_TKey_Release.oneBit.b0 = 1; // 无手指 执行
    23. if (F_User_Tkey0 == 1) // 松键执行-在这里
    24. {
    25. F_User_Tkey0 = 0;
    26. if (buttonPressTime <= 1000) //短按切換、
    27. {
    28. PB ^= 0B00010000;
    29. }
    30. else //長按
    31. {
    32. PB ^= 0B00001000; //PB3
    33. }
    34. FTP0IE = 0;
    35. buttonPressTime = 0;
    36. #if (IS_SLEEP_MODE == 1)
    37. F_User_Sleep = ~F_User_Sleep; // 测试使用,用户需要注释,自行根据程序给出该标志位
    38. #endif
    39. }
    40. }
    41. }

    現在的思路是建立一个变量,在按键按下时会进行累加,然后在按键松开的时候对这个变量的值进行判断。就可以判断。但是现在发现短按时灯会短暂熄灭又亮起。测试发现该问题偶发性。

    猜测1:硬件消抖问题

    猜测2:时间应该再弄长一点

    解决:在GPIO初始化中将PB设置为0x00000000就行

    2.给系统增加按键功能,并且独立开长按和短按

    1. case 0:
    2. PB = 0B01001000; // 翻转 PB6 的输出电平
    3. Mode_state_flag = 1;
    4. break;
    5. case 1:
    6. PB = 0B00001100; // 翻转 PB6 的输出电平
    7. Mode_state_flag = 2;
    8. break;
    9. case 2:
    10. PB = 0B00001000; // 翻转 PB6 的输出电平
    11. Mode_state_flag = 3;
    12. break;
    13. case 3:
    14. PB = 0B01000100; // 翻转 PB6 的输出电平
    15. Mode_state_flag = 0;
    16. break;
    17. }

    问题1:现在希望通过switch case这个语句来进行对按键状态的变换,但是发现在点按按键时由PB2输出PWM1控制的LED灯的现象为立马达到最亮,然后继续点按按键无任何反应。

    因为灯的亮度有变化,所以代表程序的控制是起作用的。亮度一下子达到最高,代表着此时PB2的引脚输出的为低电平。但是在控制高电平时灯并没有熄灭,亮度也没发生变化。改了下初始化变化为无反应。

    猜测1:是不是这个口作为PWM的输出口,导致无法通过这种方式控制。注释掉定时器的初始化函数问题解决,所以考虑,问题出在pwm的初始化内。

    在按键扫描函数中

    增加引脚重复初始化的话按键可以响应,但是led灯的亮度每次都是最高

    问题2:现在已经可以实现基本的颜色切换了,但是解决了可以切换的问题后,在长按后的颜色并未保留下来。

    猜测2:应该在定时器内作区分,或者说在按键扫描函数内重新对PWM的输出或者禁止做出改变。

  • 相关阅读:
    TableWidgetItem的flag如何设置,使得它不能被编辑?
    写点什么吧,作为STM32系列的开篇……
    【网络协议详解】——FTP系统协议(学习笔记)
    2023 年 dotnet 仓库社区年度调查已经开始
    rust编程初探-猜数游戏(chapter 2)
    软设之冒泡排序
    快递单号物流揽收后没有信息的单号快速筛选出
    零基础学习HTML5(列表、表格、表单)
    登录超时提示+踢人下线实现(spring security)
    通信工程学习:什么是接入网(AN)中的CF核心功能
  • 原文地址:https://blog.csdn.net/qq_51519091/article/details/134503950