一、设计任务
1.模式控制
通过KEY1键控制RGB-LED中的红灯的亮度,将亮度分为三级,第一级:亮度100%,第二级:亮度50%,第三级:亮度0,按动KEY1实现三种亮度循环切换。
2.对位模式控制
通过KEY1和KEY2的配合,控制RGB-LED的颜色。KEY1负责切换RGB-LED每个像素的亮度(如上题所示),KEY2负责切换KEY1对哪个LED进行操作。以实现每个像素均可独立调整亮度的级别,实现RGB-LED整体颜色的变换。
注:可连续进行设置,不能发生逻辑混乱。按键对震动和按键时间具有鲁棒性。
3.应用预热
利用两个全彩LED中的一个指示当前操作的像素状态,一颗全彩LED应红、绿、蓝三种颜色对应当前处于操作态的RGB-LED三个像素,另外一个全彩标记该像素处于的亮度(不同等级的亮度可以用不同颜色表示)。
二、任务分解及设计思路
2-1
任务拆分:
(1)设定灯一个全局变量,用按键KEY1控制灯的三个模式,分别为,灭, 亮,闪烁
(2)设定一个常量fre给定一个小于100的值(需要距离0和100的距离较远的数值,比如50),将此变量视为标志变量。再设定一个全局变量pwm,每进入定时器1,pwm+1。
(3)设置pwm在0到fre区间LED灭,在fre到100区间LED亮,因为单 片机扫描频率非常快,人眼所看到的便会感受到LED处于半亮的情况。
(4)将LED半亮进行函数封装,代替闪烁模式
程序流程图:如2-2流程图所示,去除对KEY1判断的函数,便是在while循环下只循环对KEY2的操作判断
2-2
任务拆分: (1)通过按键KEY2进行灯色选择
(2)添加2-1灯亮度控制函数,配置GPIO的输入输出
程序流程图:
2-3
任务拆分: (1)点亮左上角和右上角的灯(ws2812b)
(2)通过按键选择左上角和右上角灯的颜色
(3)将选灯位和选灯色打包封装成一个全彩灯选择函数,在主程序调用灯显 示函数时调用ws2812b的封装函数,即可在灯对应模式下选择左上角和右上角全彩灯的颜色和亮灭。
程序流程图:
三、设计中解决的关键问题
知识点:
PWM占空比控制灯亮度:
图来源于CSDN论坛:
当 CNT=CCRx 时输出 1。当 CNT <CCRx 的时候, IO(输出口)输出低电平,当 CNT 值大于等于 CCRx 的时候,IO 输出高电平(1), 当 CNT 达到 ARR 值的时候,重新归零,然后重新向上计数,依次循环。改变 CCRx 的值,就可以改变 PWM 输出的占空比,改变 ARR 或CCRx的值,就可以改变 PWM 输出的频率。
在本实验中我使用fre全局变量代替上文中的CCRx,fre变量是可以自行选定的,pwm全局变量代替上文中的ARR,并以此来设定上限。当pwm>fre时,LED输出低电平;当pwm<fre时,LED输出高电平。在这里100为扫描的次数,而STC8H的频率为24MHz,以高低电平驱动的LED处于闪烁状态,但是人眼无法分辨,这样便让灯处于亮和灭的中间状态。
ws2812b全彩灯:
通过DIN和DOUT(DO)对ws2812b输入0码和1码
0码和1码输入需要配置合适的高低电平,如下图所示
而输入DIN的数据需要编写成24bit编码的形式,分别为绿色、红色、蓝色的8位数据,按照顺序进行传输,所以编写输入数据的时候也需要按照这种格式进行编写。
所以编码采取的格式如下:
将r、g、b三颜色的8位数据分别存储,在输入的时候再组合成24位进行输入。
技术难点:
PWM占空比控制灯亮度:
在设置扫描函数的时候,需要使用定时器,如果单一的在while循环中对pwm状态进行判断,可能会受到其他已有程序所包含的延时函数影响,例如按键消抖中存在的延时。
ws2812b全彩灯:
给ws2812b发送数据的时候需要一定的c语言编程基础。
例如,发送绿色码元的八位数据如图中代码所示:
for循环内,每循环一次,G8位进行一次左移,当循环8次后,G8位数据也全部以0、1码的形式输入给ws2812b。如下图G8位的输入和输出入下图所示:
四、关键程序流程图及程序说明
pwm调亮度:根据按键KEY1改变KEY1_count全局变量值,调整高低电平的占空比,以此来选择亮度。以下为流程图和代码:
ws2812b全彩灯调色:
五、课程设计的收获
对于pwm:
了解到关于芯片扫描可以通过设置pwm、改变高低电平占空比对灯处于亮和灭之间半亮的表达。这是我第一次了解到芯片扫描的应用功能,以及观察到了其介于两者之间状态的效果。
对于ws2812b:
需要对说明书以及模块原理进行仔细的了解,是学习单片机模块编程的第一步,也是最重要的一步。
本文发布于:2024-01-29 11:59:08,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170650074915119.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |