内容介绍
内容介绍
背景介绍:
圣诞将至,形如雪花板的单片机给予硬禾学堂的学习增添了不少乐趣。然而对于初学者而言,本次项目依旧困难重重,如硬件结构尚未清晰,嵌入式编程知识尚存缺漏等等。当然,本次项目的意义就在于掌握对单片机的结构和理论知识,尝试嵌入式编程。
原理讲解:
从硬件层面上看,本次项目雪花板主要采用STC15W204S单片机作为控制器,CH340作为USB转串口芯片,外加37个WS2812型号的LED灯。从软件角度来说,本次项目利用C语言实现主要的嵌入式编程,在一定程度上采用汇编语言实现硬件的调用和调试。
在讲述详细代码之前,理解和掌握WS2812型号LED灯的传输方式是必要前提。
如上图所示,本款三色LED灯采用单线归零的通讯方式,当连续输入数据的时候,第一个WS2812会清除24Bit的数据,后面以此类推,从而实现了每一个WS2812闪烁不同颜色的灯光。
在本次项目中,由于学生尚处初学者状态,纵使对相关性能和知识有所了解,但是实在难以实现完全创新的编程,因此本人在本次项目中的代码以调用马骥老师原创代码为主,在此基础上结合个人想法和思路,修改部分数据。
本人的构想是将由外到内流水点亮,并实现颜色变化。由于马骥老师颜色变化的函数中的延时是固定的,效果差强人意,所以我采用重复流水变化时,改变颜色的方式。
代码展示:
include "STC15W.h"
#include "ws2812.h" //包含LED驱动程序
#include "delay.h" //包含延时程序
#include "uart.h" void LED_Water(unsigned char *p);//由外而内流水点亮
unsigned char green[3]={25,0,0};//绿
unsigned char red[3]={0,25,0};//红
unsigned char blue[3]={0,0,25};//蓝
unsigned char white[3]={10,10,10};//白
unsigned char org[3]={25,2,20};//橘
unsigned char close[3]={0,0,0};
xdata unsigned char buffer[64];
unsigned char buf_data=0x00;
void main()
{
DelayMs(1000); //上电延时
UartInit();
UART1_SendString("STC15W204S\r\nUart is ok !\r\n");//发送字符串检测是否初始化成功
DelayMs(1000);
ResetDataFlow();
WS2812_Close();
//主循环
while(1)
{
LED_Water(red);
WS2812_Close();
LED_Water(org);
WS2812_Close();
LED_Water(white);
WS2812_Close();
LED_Water(green);
WS2812_Close();
LED_Water(blue);
WS2812_Close();
}
}
void LED_Water(unsigned char *p)//由外而内流水点亮
{
WS2812_1_5Line_Single(p,5);//37点不给新的数据,所以一直保持之前的状态
WS2812_1_5Line_Single(p,4);
// LED_3count(p);
// LED_4count(p);
// LED_5count(p);
WS2812_LineIn_Single(p,3);
WS2812_LineIn_Single(p,2);
WS2812_LineIn_Single(p,1);
}
void WS2812_Close(void)
{
unsigned char count_sum;
for(count_sum=0;count_sum<37;count_sum++)
{
SendOnePix(close);
}
ResetDataFlow();
}
void DelayMs(unsigned char m)
{
unsigned char i,j,k;
for(k=0;k<m;k++)
{
for(i=0;i<60;i++)
{
for(j=0;j<78;j++)
{
;
}
}
}
}
void UartInit(void) //9600bps@33MHz
{
SCON = 0x50;
AUXR |= 0x01;
AUXR |= 0x04;
T2L = 0xA5;
T2H = 0xFC;
AUXR |= 0x10;
ES=1;
EA=1;
}
void UART1_SendString(unsigned char *s)
{
while(*s != 0)
{
UART1_SendData(*s++);
}
}
void ResetDataFlow(void)
{
unsigned char i,j;
DI=0; //DI置为0后,延时50us以上,实现帧复位
for(i=0;i<50;i++) //此处33Mhz时延时65us
{
for(j=0;j<20;j++)
{
;
}
}
}
软硬件
附件下载
带单片机8位全彩流水灯程序模板V1.0.rar
团队介绍
个人尝试
团队成员
宋昀泽
西交利物浦大学学生
评论
0 / 100
查看更多
猜你喜欢
雪花板亮灯设计本项目目的是完成雪花灯亮灯的设计。本项目旨在学习用kile-4 对STC8051单片机进行编程,从而控制输入输出来达到不同的亮灯效果。我们还通过这次项目学习了项目报告的书写流程。顺便,正值圣诞节,我们用自己的灯装饰了自己的宿舍。
姜宇航
1300
从零开始“雪花板”该项目是为零基础的孩子学习嵌入式而设计的,通过阅读此项目,你可以实现对于雪花板灯光的简单控制。因为本次项目的目标群体是10-15岁的初学者,项目会较少的涉及编程的讲解,而更偏重于程序的使用。
TiankuoJiao
1641
雪花板学习心得本项目是在学习基于8051单片机控制的WS2812全彩LED 雪花板时的一些心得体会,以及最终小小的项目分享。本次分享中会包含一些学习过程中debug的过程,以便更加清晰的解释WS2812内部的工作原理,以及记录一些仍然存在的困惑。
Thrshbia
1258