STC8H1K28实现训练——2.逻辑能力训练

阅读: 评论:0

STC8H1K28实现训练——2.逻辑能力训练

STC8H1K28实现训练——2.逻辑能力训练

一、设计任务

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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23