首先,我们是用的Keil4软件对雪花板进行编程,同时,我们也需要下载特定的下载软件来把编写的程序导入到雪花板中。Keil4和下载软件会在描述中提供。我们将会提供一个简单的例子供大家学习。
对于初学者,在下载这两个软件之后,将我们提供的例子打开(文件的后缀是 uVision Project),打开之后,我们首先会看到声明的函数和变量。我们首先找到void main(),这个函数是程序的主程序,我们可以在其中修改和增加函数来达到控制灯光的目的。灯光的亮度和色彩需要修改数组中的数字。数字大小代表灯光闪烁的亮度,改变数值之间的关系可以改变灯光的颜色。
我们需要在while循环中加入或修改我们想要的函数(具体的函数功能介绍在下面),如果我们能力足够的话,也可以修改函数中的代码,但一般不推荐。
函数及其功能:
函数 | 功能 |
void Flash_WS2812(unsigned char *p) | 整体闪烁,传递颜色参数 |
void LED_Water(unsigned char *p) | 由内而外流水点亮 |
void LED_Water_Color(unsigned char *p | 由内而外流水点亮,颜色变化 |
void LED_Single_Flower(void) | 单圈单个灯绽放点亮 |
void Water_lamp(unsigned char *p) | 按1-37顺序点亮 |
void DIY_SNOW(unsigned char *p) | 由外向内,按照数组的颜色顺序显示,最多五个颜色 |
void Flower(void) | 一圈一圈点亮 |
void Flower_In(void) | 一圈圈逐步点亮(外内) |
void Gradual_change(unsigned char *p) | 渐变亮 |
void Breathing_WS2812(unsigned char level,unsigned char Color) | 呼吸渐变,两个参数,第一个表示集中小颜色,第二个表示颜色 |
void WS2812_Close(void) | 将37个灯全部熄灭 |
void WS2812_1_5Line(unsigned char *p,unsigned char line) | 让其整圈一起点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5 |
void WS2812_1_5Line_In(unsigned char *p,unsigned char line) | 让其整圈一起点亮,内圈颜色保持不变,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5 |
void WS2812_1_5Line_Single(unsigned char *p,unsigned char line) | 让对应圈的灯流水点亮,传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数1-5 |
void WS2812_LineIn_Single(unsigned char *p,unsigned char line) | 对应圈数最外层流水,里面全部点亮。传递两个参数,第一个参数为显示颜色,第二个参数是让第几圈点亮,圈数2-5 |
在改过代码后,我们需要在左上角找到Build,点击Build之后,点开下载软件。接下来,我们调试下载软件。
我们首先在单片机型号选择STC15W204S,接下来在输入用户程序运行时的IRC频率选择33MHz,接下来点击打开程序文件,选择刚才Build的程序,然后需要摁一下雪花灯后面的按钮。接下来就可以看到雪花灯闪烁了。
这时候,我们可以看一下雪花板中的程序,由于我们设置buf_data=0x00,因此程序现在在执行 sovle(unsigned char m) 中的 case 0x00 部分,我们可以在case 0x00部分通过删减或增添一些函数来完成想要的效果,例如,我们把case 0x00中的程序改:
DIY_SNOW(color);
Delay100Ms(50);
WS2812_Close();
ResetDataFlow();
接下来我们就可以看到雪花灯一直保持一个状态,我们可以用这个方法完成各种不同的操作。
我们也可以让雪花板执行一些更复杂的亮灯操作,例如让每一种颜色的光循环闪烁一次,就像视频中展示的一样,我们只需要将case00x0中的代码改为:
DIY_SNOW(color);
Delay100Ms(50);
WS2812_Close();
ResetDataFlow();
ResetDataFlow();
WS2812_Close();
Delay100Ms(5);
LED_Water_Color(color);
WS2812_Close();
Delay100Ms(5);
WS2812_Close();
Breathing_WS2812(0,Red);
Breathing_WS2812(1,Red);
Breathing_WS2812(1,Green);
Breathing_WS2812(1,Blue);
通过执行不同颜色的流水灯函数,改变每一次亮灯的颜色,我们就可以做到流水灯的效果,但是要注意延时,和调节相应的IRC频率:33MHz。同时,我们也需要把灯的颜色初始化,以便于检测每一个灯是否处于正常工作状态。完成这些操作后我们就可以实现功能了。
附件:雪花灯特定的下载软件链接:https://pan.baidu.com/s/1DroX7RX2-Ie5mc-RPwvP6A
提取码:k8ef
雪花灯实例链接:链接:https://pan.baidu.com/s/1ewpY3C2D-3emLwiLiMw7Xg
提取码:ld9q