从零开始“雪花板”
该项目是为零基础的孩子学习嵌入式而设计的,通过阅读此项目,你可以实现对于雪花板灯光的简单控制。因为本次项目的目标群体是10-15岁的初学者,项目会较少的涉及编程的讲解,而更偏重于程序的使用。
标签
嵌入式系统
显示
8051
TiankuoJiao
更新2021-01-01
1271

  首先,我们是用的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

附件下载
Snowflake_SCH.PDF
雪花灯的电路图
团队介绍
私人设计
团队成员
焦天阔
西交利物浦电子科学与技术专业学生,硬禾学堂学员
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号