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

news/2023/11/30 8:26:42

1.判断长按短按

u8 Mode_state_flag = 0;
u32 buttonPressTime = 0;
u8 longPressflag = 0;
u8 shortPressflag = 0;
// 普通认证 执行此处函数
void T_Key0_Func(void)
{if (TKey_Signal.oneBit.b0 == 1){buttonPressTime++;}if ((TKey_Signal.oneBit.b0 == 1) && (Pre_TKey_Release.oneBit.b0 == 1)) // 按下执行{Pre_TKey_Release.oneBit.b0 = 0; // 为0时代表按键被按下,为1时代表按键松开F_User_Tkey0 = 1;FTP0IE = 1;FTP0EN = 1;FGIE = 1;}else if (TKey_Signal.oneBit.b0 == 0) // 松开执行{Pre_TKey_Release.oneBit.b0 = 1; // 无手指 执行if (F_User_Tkey0 == 1) // 松键执行-在这里{F_User_Tkey0 = 0;if (buttonPressTime <= 1000)  //短按切換、{PB ^= 0B00010000;}else						 //長按{PB ^= 0B00001000;		//PB3}FTP0IE = 0;buttonPressTime = 0;
#if (IS_SLEEP_MODE == 1)F_User_Sleep = ~F_User_Sleep; // 测试使用,用户需要注释,自行根据程序给出该标志位
#endif}}
}

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

猜测1:硬件消抖问题

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

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

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

				case 0:PB = 0B01001000; // 翻转 PB6 的输出电平Mode_state_flag = 1;break;case 1:PB = 0B00001100; // 翻转 PB6 的输出电平Mode_state_flag = 2;break;case 2:PB = 0B00001000; // 翻转 PB6 的输出电平Mode_state_flag = 3;break;case 3:PB = 0B01000100; // 翻转 PB6 的输出电平Mode_state_flag = 0;break;}

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

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

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

在按键扫描函数中

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

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

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


https://www.xjx100.cn/news/3091661.html

相关文章

B站短视频如何去水印?一键解析下载B站视频!

在浏览B站视频时&#xff0c;我们有时会遇到带有水印的场景。这些水印可能会干扰我们对视频内容的观看体验&#xff0c;特别是在全屏观看时。此外&#xff0c;当我们想要保存或分享这些视频时&#xff0c;水印也会成为一种障碍。因此&#xff0c;去除水印的需求就变得非常迫切。…

计算机类编程课学生编写的代码应该如何管理

管理学生编写的代码是一个重要的任务&#xff0c;以下是几种常见的方式来有效地管理学生的代码&#xff1a; 版本控制系统&#xff1a;使用版本控制系统&#xff08;如Git&#xff09;来管理学生的代码。每个学生都可以在自己的分支上进行开发&#xff0c;并通过提交请求&#…

Java核心知识点整理大全7-笔记

目录 4.1.9. JAVA 锁 4.1.9.1. 乐观锁 4.1.9.2. 悲观锁 4.1.9.3. 自旋锁 4.1.9.4. Synchronized 同步锁 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 4.1.9.5. ReentrantLock Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized …

Linux fork和vfork函数用法

fork和vfork是用于创建新进程的函数&#xff0c;在Linux的C语言编程中非常常见。 fork函数 fork函数是用于创建一个新的进程&#xff0c;新进程是调用进程的副本。新进程将包含调用进程的地址空间、文件描述符、栈和数据。在fork之后&#xff0c;父进程和子进程将并发执行。 …

国外客户要求免费样品?我来教你如何应对

这一次的问题对外贸业务员来说是非常重要。无论你是做什么行业&#xff0c;无论你是做什么产品我相信这个问题对你来说超级有用。 关于发样品给客户我有四个方案来跟大家分享&#xff0c;我希望你能够喜欢希望你很认真的思考一下&#xff1a; 方法一【样品费及运费一起收】&am…

浅谈电动汽车充电桩设计与应用研究

安科瑞 华楠 摘要&#xff1a;目前&#xff0c;随着我国社会经济的快速发展&#xff0c;我国的各个领域都取得了突破性的发展&#xff0c;尤其是在电动汽车充电桩的设计方法&#xff0c;新型的电动汽车充电桩设计已经广泛的受到了人民群众的青睐与认可&#xff0c;而这种发展前…

手机 IOS 软件 IPA 签名下载安装详情图文教程

由于某些应用由于某些原因无法上架到 appStore 或者经过修改过的软件游戏等无法通过 appStore 安装&#xff0c;我们就可以使用签名的方式对相应软件的IPA文件进行签名然后安装到你的手机上 这里我们使用爱思助手进行签名安装&#xff0c;爱思助手支持两种方式&#xff0c;一种…

centos安装指定版本docker

centos7安装指定版本的docker 官方文档 https://docs.docker.com/engine/install/centos/ 1、卸载旧版本 $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、设…