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

2023-11-22 20:52

本文主要是介绍基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制总结版(11.22),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.任务需求

基于MS16F3211芯片实现功能一个按键通过长按可以控制当前处于亮状态的灯的亮度,当灯从最亮达到最暗时,所用时为3s。现有三盏颜色分别为红绿蓝的灯,在处于关机状态时红灯亮,处于开机状态时红灯灭。点按第一次仅绿灯亮,点按第二次仅蓝灯亮,点按第三次绿灯和蓝灯齐亮,点按第四次回到初始状态。

实现效果:当仅绿灯亮时,第一次长按按键绿灯状态改变,再次长按按键绿灯会往相反的方向变化,并且在达到极点时,停止调节。蓝灯与绿灯的亮度相互独立,互不影响。在两灯均亮的时候,此时长按按键依旧会造成亮度的改变,但是会由于亮度在前面单独调节不同导致调节所到极点的时间不一样。但是共同点在调节到极点时如果不松开按键亮度均不发生变化。直至双灯亮度均达到极点,此时系统亮度恒定。

2.系统流程拆分

2.1 了解原理图

2.2实现短按按键控制灯的亮灭

判断按键按下或者释放主要使用的是基于触摸库衍生出来的用户函数

基于这个初步对GPIO初始化,并且在按键执行函数内进行对GPIO的高低电平进行翻转就可以实现了

2.3 实现长按按键控制灯的亮度变化

因为要需要根据按键按下的时间长短来控制亮度值变化的大小,所以采用TP0定时器进行PWM波的输出。按下的时间越久,进入定时器中断的次数越多,此时亮度就会相较初始值变化得越大。

当配置好TP0寄存器时,然后将INTEN中的bit4置1,那么在定时器计数溢出时INTFLAG寄存器的中断标志位bit4TP0IF会置1。根据这个原理我们就可以在按键按下时将TPOIE置1,开启定时器中断,对亮度进行控制。在松开按键时将TPOIE置0.此时停止对亮度的控制

当TP0在计数值达里将FFF时会溢出,此时溢出标志位会置1。

此时在定时器中断里对TP0IF这个标志位进行软件复位,那么就可以达到每发生一次定时器中断就可以进行一次亮度调节。

ps:提供每个 PWM 周期溢出中断,但中断共用同一个向量入口

2.4实现3s控制灯的亮度可以由一个极点达到零、另一个极点

如果需要控制灯的亮度变化那么就要控制这个定时器的时钟频率,然后再设定这个PWM的时钟周期,就可以设定这个占空比的变化时间了。

比如这个定时器所用时钟频率根据控制寄存器的CK0[3:0]位来进行控制,这里我采用的是采用输入时钟源为Fosc,二分频。输入时钟频率为1.95kHZ,也就是一秒钟可以计数1950次,3s计数1950乘3次。因为根据占空比寄存器占空比为100%时计数值最大值的设置只能为0X0FFF=4095比这个值小。所以对这个时钟源进行二分频。也就是1秒钟计数975次。所以把初始值设置为1170=4095-975x3。也就是只要1s中会中断975次,在中断中对占空比的值进行加一或者减一。既可以达到3s钟对占空比的值由最高变到最低了。

2.4 实现短按控制灯的状态切换

其实第一步通过GPIO来控制的置1或者0来控制灯的亮灭是可行的,但是在控制灯的亮灭的同时需要控制在灯亮灭亮的变化的同时还需要保持灯的亮度不变。这个时候就需要通过PWM来控制了。

其实主要也是通过寄存器来控制PWM的使能和失能

2.5实现根据当前灯的状态来控制当前灯的亮度,也就是分隔开来

在中断服务函数内进行对灯状态的判断来执行相应的操作

2.6 实现长按时两次长按会让灯的亮度往不同方向变化

其实也就是在下一次接收到按键按下的数据的时候判断上一次按键是否释放来判断是否完成了一次按键的的长按操作。如果完成了的话就对标志位进行改变

2.7 分隔长按和短按

在检测到按键按下使对一个变量累加,然后根据变量的数值来判断是长按还是短按。

这篇关于基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制总结版(11.22)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/412857

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放