/****************************************************************************************

* WS2811 彩灯驱动函数

*

* 调用方法:

*        修改宏定义: #define nWs 1        // 有多少颗WS2811级联

*        WS_Init();        // IO初始化

*        WsDat[0] = 0x808080;//显存赋值

*        WS_SetAll();  // 发送数据

*        ColorToColor(unsigned long color0, unsigned long color1);// 颜色渐变算法

*

* 作者:星希望(已校验)

* 日期:2015年6月24日

****************************************************************************************/

#include "includes.h"

#define RCC_PAout                 RCC_AHBPeriph_GPIOB

#define PORT_PAout                GPIOB

#define PIN_PAout                GPIO_Pin_15

#define RCC_PEN                 RCC_AHBPeriph_GPIOB

#define PORT_PEN                 GPIOB

#define PIN_PEN                 GPIO_Pin_9

#define PAout_0()                PORT_PAout->BRR = PIN_PAout

#define PAout_1()                PORT_PAout->BSRR = PIN_PAout

#define PEN_0()                PORT_PEN->BRR = PIN_PEN

#define PEN_1()                PORT_PEN->BSRR = PIN_PEN

/* 显存 */

unsigned long WsDat[nWs];

uint32_t WsCol[nWs];

/*

*********************************************************************************************************

*        函 数 名: WS_Init

*        功能说明: 初始化WS2811输出GPIO

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_Init()

{

GPIO_InitTypeDef  GPIO_InitStruct;

//端口时钟,使能

RCC_AHBPeriphClockCmd(RCC_PAout | RCC_PEN, ENABLE);

// 端口配置

GPIO_InitStruct.GPIO_Pin = PIN_PAout;                                // PIN

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;                 // 推挽输出

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                // IO口速度为50MHz

GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;

GPIO_Init(PORT_PAout, &GPIO_InitStruct);                                        // 根据设定参数初始化

GPIO_InitStruct.GPIO_Pin = PIN_PEN;                                // PIN

GPIO_Init(PORT_PEN, &GPIO_InitStruct);                                        // 根据设定参数初始化

PEN_1();

}

/*

*********************************************************************************************************

*        函 数 名: delay2us

*        功能说明: 延时2us

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void delay2us(void)

{

unsigned char i;

for(i=0; i<12; i++);

}

/*

*********************************************************************************************************

*        函 数 名: delay05us

*        功能说明: 延时0.5us

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void delay05us(void)

{

unsigned char i;

for(i=0; i<2; i++);

}

/*

*********************************************************************************************************

*        函 数 名: TX0,TX1

*        功能说明: 高速模式(最快)发送码值0 ,1

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void TX0() { PAout_1(); delay05us; PAout_0(); delay_us(2); } // 发送0

void TX1() { PAout_1(); delay_us(2);  PAout_0(); delay05us; } // 发送1

/*

*********************************************************************************************************

*        函 数 名: TXL0,TXL1

*        功能说明: 速度降一倍发送码值0 ,1

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void TXL0(void) { PAout_1();  delay2us;         PAout_0(); delay_us(5); } // 发送0

void TXL1(void) { PAout_1();  delay_us(5);  PAout_0(); delay2us; } // 发送1

/*

*********************************************************************************************************

*        函 数 名: WS_Reset

*        功能说明: 发送码值 帧单位

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/void WS_Reset() {PAout_0()        ; delay_us(60);  PAout_1();}//PAout_0();

/*

*********************************************************************************************************

*        函 数 名: WS_Set1

*        功能说明: 高速发送24Bit数据

*        形    参:dat,发送的数据

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_SetH(unsigned long dat)

{

unsigned char i;

for(i=0; i<24; i++)

{

if(0x800000 == (dat & 0x800000) )        TX1();

else                                                                TX0();

dat<<=1;                                                        //左移一位

}

}

/*

*********************************************************************************************************

*        函 数 名: WS_SetL

*        功能说明: 低速发送24Bit数据

*        形    参:dat,发送的数据

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_SetL(unsigned long dat)

{

unsigned char i;

for(i=0; i<24; i++)

{

if(0x800000 == (dat & 0x800000) )        TXL1();

else                                                                TXL0();

dat<<=1;                                                        //左移一位

}

}

/*

*********************************************************************************************************

*        函 数 名: WS_SetAll

*        功能说明: 发送数组内全部数据

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_L_SetAll()

{

unsigned char j;

for (j=0; j<20; j++)

{

//WsCol[j]  = SpiData.SpiData[j * 3]<<16 | SpiData.SpiData[j * 3 + 1]<<8 | SpiData.SpiData[j * 3 + 2];

WsCol[j] = WsDat[j];

WS_SetH(WsCol[j]);  // j 级联个数/ 0

}

WS_Reset();

}

/*

*********************************************************************************************************

*        函 数 名: WS_SetAll

*        功能说明: 发送数组内全部数据

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_H_SetAll()

{

unsigned char j;

for (j=0; j

{

//WsCol[j]  = SpiData.SpiData[j * 3]<<16 | SpiData.SpiData[j * 3 + 1]<<8 | SpiData.SpiData[j * 3 + 2];

WsCol[j] = WsDat[j];

WS_SetH(WsCol[j]);  // j 级联个数/ 0

}

WS_Reset();

}

/*

*********************************************************************************************************

*        函 数 名: abs0

*        功能说明: 求绝对值

*        形    参:num,比较后的数据

*        返 回 值: num,形参的绝对值

*********************************************************************************************************

*/

unsigned char abs0(int num)

{

if (num>0) return num;

num = -num;

return (unsigned char) num;

}

/*

*********************************************************************************************************

*        函 数 名: ColorToColor

*        功能说明: 颜色渐变算法(正向)

*        形    参:color0、color1 从一种颜色变到别一种颜色

*        返 回 值: color        变化后的颜色

*********************************************************************************************************

*/

void ColorToColor(unsigned long color0, unsigned long color1)

{

unsigned char Red0, Green0, Blue0;  // 起始三原色

unsigned char Red1, Green1, Blue1;  // 结果三原色

int                          RedMinus, GreenMinus, BlueMinus;        // 颜色差(color1 - color0)

unsigned char NStep;                                                         // 需要几步

float                  RedStep, GreenStep, BlueStep;                // 各色步进值

unsigned long color;                                                        // 结果色

unsigned char i;

uint8_t Pack = 0;

// 绿 红 蓝 三原色分解

Red0   = color0>>8;

Green0 = color0>>16;

Blue0  = color0;

Red1   = color1>>8;

Green1 = color1>>16;

Blue1  = color1;

// 计算需要多少步(取差值的最大值)

RedMinus   = Red1 - Red0;

GreenMinus = Green1 - Green0;

BlueMinus  = Blue1 - Blue0;

NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);

NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);

// 计算出各色步进值

RedStep   = (float)RedMinus   / NStep;

GreenStep = (float)GreenMinus / NStep;

BlueStep  = (float)BlueMinus  / NStep;

// 渐变开始

for (i = 0; i < NStep; i++)                        //灯点亮的个数可变

{

Red1   = Red0   + (int)(RedStep   * i);

Green1 = Green0 + (int)(GreenStep * i);

Blue1  = Blue0  + (int)(BlueStep  * i);

color  = Green1<<16 | Red1<<8 | Blue1;         // 合成  绿红蓝

WsDat[Pack] = color;                                        //这里只第一个灯

WS_L_SetAll();                                                        // 输出

delay_ms(20);                                                // 渐变速度

if (Pack > nWs)

{

Pack = 0;

}

else

{

Pack++;

}

}

// 渐变结束

//        return color;

}

/*

*********************************************************************************************************

*        函 数 名: ColorToColor1

*        功能说明: 颜色渐变算法        (反向)

*        形    参:color0、color1 从一种颜色变到别一种颜色

*        返 回 值: color        变化后的颜色

*********************************************************************************************************

*/

void ColorToColor1(unsigned long color0, unsigned long color1)

{

unsigned char Red0, Green0, Blue0;  // 起始三原色

unsigned char Red1, Green1, Blue1;  // 结果三原色

int                          RedMinus, GreenMinus, BlueMinus;        // 颜色差(color1 - color0)

unsigned char NStep;                                                         // 需要几步

float                  RedStep, GreenStep, BlueStep;                // 各色步进值

unsigned long color;                                                        // 结果色

unsigned char i;

int8_t Pack = nWs;

// 绿 红 蓝 三原色分解

Red0   = color0>>8;

Green0 = color0>>16;

Blue0  = color0;

Red1   = color1>>8;

Green1 = color1>>16;

Blue1  = color1;

// 计算需要多少步(取差值的最大值)

RedMinus   = Red1 - Red0;

GreenMinus = Green1 - Green0;

BlueMinus  = Blue1 - Blue0;

NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);

NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);

// 计算出各色步进值

RedStep   = (float)RedMinus   / NStep;

GreenStep = (float)GreenMinus / NStep;

BlueStep  = (float)BlueMinus  / NStep;

// 渐变开始

for (i = 0; i < NStep; i++)                                //灯点亮的个数可变

{

Red1   = Red0   + (int)(RedStep   * i);

Green1 = Green0 + (int)(GreenStep * i);

Blue1  = Blue0  + (int)(BlueStep  * i);

color  = Green1<<16 | Red1<<8 | Blue1;         // 合成  绿红蓝

WsDat[Pack] = color;                                        //这里只第一个灯

WS_H_SetAll();                                                        // 输出

delay_ms(2);                                                // 渐变速度

if (Pack > 0)

{

Pack--;

}

else

{

Pack = nWs;

}

}

// 渐变结束

//        return color;

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol1

*        功能说明: 从前向后移动(单组)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol1(uint32_t _uColor, uint16_t _uTime)

{

uint8_t i;

//        for (i = 0; i < 3; i++)

//        {

//                _uColor = g_tSpi.RxBuf[0]<<16 | g_tSpi.RxBuf[1]<<8 | g_tSpi.RxBuf[2];

//

//                //_uColor = _uColor + 0xfffff*i;

//                WsDat[ i] = _uColor;

//        //        delay_ms(_uTime);

[i]//                //memset(WsDat, 0, sizeof(WsDat));[/i]

[i]//[/i]

[i]//        }[/i]

[i]        WS_L_SetAll();[/i]

[i]        //delay_ms(_uTime);[/i]

[i]}[/i]

[i]/*[/i]

[i]*********************************************************************************************************[/i]

[i]*        函 数 名: WaterLampToCol2[/i]

[i]*        功能说明: 单组灯移位显示[/i]

[i]*        形    参:_uColor         点亮颜色[/i]

[i]*                          _uTime        移位速度[/i]

[i]*        返 回 值: 无[/i]

[i]*********************************************************************************************************[/i]

[i]*/[/i]

[i]void WaterLampToCol2(uint32_t _uColor, uint16_t _uTime)[/i]

[i]{[/i]

[i]        uint8_t i, j;[/i]

[i]        uint8_t Red2, Green2, Blue2;  // 三原色[/i]

[i]        Red2  = _uColor>>8;[/i]

[i]        Green2 = _uColor>>16;[/i]

[i]        Blue2  = _uColor;[/i]

[i]        for (i = 0; i < nWs; i++)[/i]

[i]        {[/i]

[i]                for (j = 0; j < i; j++)[/i]

[i]                {[/i]

[i]                        Red2 = Red2 + 0x22;[/i]

[i]                        //Green2 = Green2 + 0x22;[/i]

[i]                        //Blue2 = Blue2 + 0x22;[/i]

[i]                        _uColor = Green2<<16 | Red2<<8 | Blue2;[/i]

[i]        //                _uColor = _uColor + 0xfffff*i;[/i]

[i]                        WsDat[j] = _uColor;[/i]

[i]                }[/i]

[i]                WS_L_SetAll();[/i]

[i]                delay_ms(_uTime);[/i]

[i]//                memset(WsDat, 0, sizeof(WsDat));[/i]

[i]        }[/i]

[i]}[/i]

[i]/*[/i]

[i]*********************************************************************************************************[/i]

[i]*        函 数 名: WaterLampToCol5[/i]

[i]*        功能说明: 与模式2反向[/i]

[i]*        形    参:_uColor         点亮颜色[/i]

[i]*                          _uTime        移位速度[/i]

[i]*        返 回 值: 无[/i]

[i]*********************************************************************************************************[/i]

[i]*/[/i]

[i]void WaterLampToCol5(uint32_t _uColor, uint16_t _uTime)[/i]

[i]{[/i]

[i]        uint8_t i, j;[/i]

[i]        uint8_t Red2, Green2, Blue2;  // 三原色[/i]

[i]        Red2  = _uColor>>8;[/i]

[i]        Green2 = _uColor>>16;[/i]

[i]        Blue2  = _uColor;[/i]

[i]        for (i = nWs; i > 0; i--)[/i]

[i]        {[/i]

[i]                for (j = i; j > 0; j--)[/i]

[i]                {[/i]

[i]                        Red2 = Red2 + 0x22;[/i]

[i]                        //Green2 = Green2 + 0x22;[/i]

[i]                        //Blue2 = Blue2 + 0x22;[/i]

[i]                        _uColor = Green2<<16 | Red2<<8 | Blue2;[/i]

[i]        //                _uColor = _uColor + 0xfffff*i;[/i]

[i]                        WsDat[j] = _uColor;[/i]

[i]                }[/i]

[i]                WS_L_SetAll();[/i]

[i]                delay_ms(_uTime);[/i]

[i]//                memset(WsDat, 0, sizeof(WsDat));[/i]

[i]        }[/i]

[i]}[/i]

[i]/*[/i]

[i]*********************************************************************************************************[/i]

[i]*        函 数 名: WaterLampToCol3[/i]

[i]*        功能说明: 从中点向两端移动[/i]

[i]*        形    参:_uColor         点亮颜色[/i]

[i]*                          _uTime        移位速度[/i]

[i]*        返 回 值: 无[/i]

[i]*********************************************************************************************************[/i]

[i]*/[/i]

[i]void WaterLampToCol3(uint32_t _uColor, uint16_t _uTime)[/i]

[i]{[/i]

[i]        uint8_t i;[/i]

[i]        for (i = nWs/2; i < nWs; i++)[/i]

[i]        {[/i]

[i]                _uColor = _uColor + 0xfffff*i;[/i]

[i]                WsDat[i] = _uColor;[/i][/i]

[i][i]                WsDat[nWs/2 -(i - nWs/2)] = _uColor;[/i][/i]

[i][i]                WS_L_SetAll();[/i][/i]

[i][i]                delay_ms(_uTime);[/i][/i]

[i][i]                memset(WsDat, 0, sizeof(WsDat));[/i][/i]

[i][i]        }[/i][/i]

[i][i]}[/i][/i]

[i][i]/*[/i][/i]

[i][i]*********************************************************************************************************[/i][/i]

[i][i]*        函 数 名: WaterLampToCol4[/i][/i]

[i][i]*        功能说明: 从后向前移动(单组)[/i][/i]

[i][i]*        形    参:_uColor         点亮颜色[/i][/i]

[i][i]*                          _uTime        移位速度[/i][/i]

[i][i]*        返 回 值: 无[/i][/i]

[i][i]*********************************************************************************************************[/i][/i]

[i][i]*/[/i][/i]

[i][i]void WaterLampToCol4(uint32_t _uColor, uint16_t _uTime)[/i][/i]

[i][i]{[/i][/i]

[i][i]        int8_t i;[/i][/i]

[i][i]        for (i = nWs-1; i >= 0; i--)[/i][/i]

[i][i]        {[/i][/i]

[i][i]                _uColor = _uColor + 0xff0000*i + 0xff00*i + 0xff*i;[/i][/i]

[i][i]                WsDat[i] = _uColor;[/i][/i][/i]

WS_L_SetAll();

delay_ms(_uTime);

memset(WsDat, 0, sizeof(WsDat));

}

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol6

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol6(uint32_t _uColor, uint16_t _uTime)

{

uint8_t i;

for (i = 0; i < nWs; i++)

{

i = i + 1;

//_uColor = _uColor + 0xfffff*i;

WsDat[i] = _uColor;[/i]

}

WS_L_SetAll();

delay_ms(_uTime);

memset(WsDat, 0, sizeof(WsDat));

for (i = 0; i < nWs; i++)

{

if(i != 0)

{

i = i + 1;

}

//_uColor = Color + 0xfffff*i;

WsDat[i] = _uColor;[/i]

}

WS_L_SetAll();

delay_ms(_uTime);

memset(WsDat, 0, sizeof(WsDat));

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol7(可使用)

*        功能说明: 从后向前移动(单组)

*        形    参:_uColor0         颜色1

*                         _uColor1        颜色2

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol7(uint32_t _uColor0, uint32_t _uColor1, uint16_t _uTime)

{

int8_t i, j, f = 0;

uint8_t NStep;  // 三原色

unsigned char Red0, Green0, Blue0;  // 起始三原色

unsigned char Red1, Green1, Blue1;  // 结果三原色

int                          RedMinus, GreenMinus, BlueMinus;        // 颜色差(color1 - color0)                                                        // 需要几步

float                  RedStep, GreenStep, BlueStep;                // 各色步进值

Red0   = _uColor0>>8;

Green0 = _uColor0>>16;

Blue0  = _uColor0;

Red1   = _uColor1>>8;

Green1 = _uColor1>>16;

Blue1  = _uColor1;

NStep = 3;

// 计算需要多少步(取差值的最大值)

RedMinus   = Red1 - Red0;

GreenMinus = Green1 - Green0;

BlueMinus  = Blue1 - Blue0;

// 计算出各色步进值

RedStep   = (float)RedMinus   / NStep;

GreenStep = (float)GreenMinus / NStep;

BlueStep  = (float)BlueMinus  / NStep;

for(j = -(NStep);j < nWs; j++)

{

for(i = 0; i < NStep; i++)

{

Red1   = Red0   + (int)(RedStep   * i);

Green1 = Green0 + (int)(GreenStep * i);

Blue1  = Blue0  + (int)(BlueStep  * i);

WsDat[i + j] = Green1<<16 | Red1<<8 | Blue1;

}

WS_L_SetAll();

delay_ms(_uTime);

memset(WsDat, 0, sizeof(WsDat));

}

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol8(可用)

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol8(uint32_t _uColor0, uint16_t _uTime)

{

uint8_t i;

for (i = 3; i < nWs/2; i++)

{

WsDat[i] = _uColor0;[/i]

}

for (i = nWs/2; i < nWs - 3; i++)

{

WsDat[i] = 0;[/i]

}

WS_L_SetAll();

delay_ms(_uTime);

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol9(可用)

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol9(uint32_t _uColor0, uint16_t _uTime)

{

uint8_t i;

for (i = 3; i < nWs/2; i++)

{

WsDat[i] = 0;[/i]

}

for (i = nWs/2; i < nWs - 3; i++)

{

WsDat[i] = _uColor0;[/i]

}

WS_L_SetAll();

delay_ms(_uTime);

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol10(可用)

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol10(uint32_t _uColor0,uint32_t _uColor1, uint16_t _uTime)

{

int8_t i, j;

WsDat[1] = _uColor0;

WsDat[0] = _uColor1;

for(i = 0;i < nWs; i++)

{

WsDat[i + 2] = WsDat[i + 1];

WsDat[i + 1] = WsDat[i];[/i]

WsDat[i] = 0;[/i]

WS_L_SetAll();

delay_ms(_uTime);

}

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol11(可用)

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol11(uint32_t _uColor0,uint32_t _uColor1, uint16_t _uTime)

{

int8_t i, j;

WsDat[1] = _uColor0;

WsDat[0] = _uColor1;

WsDat[nWs - 1] = _uColor0;

WsDat[nWs - 2] = _uColor1;

for(i = 0;i < nWs ; i++)

{

WsDat[i + 2] = WsDat[i + 1];

WsDat[i + 1] = WsDat[i];[/i]

WsDat[i] = 0;[/i]

WsDat[nWs - i - 2] =WsDat[nWs - i - 1];

WsDat[nWs - i - 1] = WsDat[nWs - 1];

WsDat[nWs - 1] = 0;

WS_L_SetAll();

delay_ms(_uTime);

}

}

/*

*********************************************************************************************************

*        函 数 名: WaterLampToCol12(可用)

*        功能说明: 从后向前移动(跳一个)

*        形    参:_uColor         点亮颜色

*                          _uTime        移位速度

*        返 回 值: 无

*********************************************************************************************************

*/

void WaterLampToCol12(uint32_t _uColor0,uint32_t _uColor1, uint16_t _uTime)

{

unsigned char Red0, Green0, Blue0;  // 起始三原色

unsigned char Red1, Green1, Blue1;  // 结果三原色

unsigned char Red2, Green2, Blue2;  // 结果三原色

int                          RedMinus, GreenMinus, BlueMinus;        // 颜色差(color1 - color0)

unsigned char NStep;                                                         // 需要几步

float                  RedStep, GreenStep, BlueStep;                // 各色步进值

unsigned long color;                                                        // 结果色

unsigned char i, j;

int8_t Pack = nWs;

for(j = 0; j < 20 ;j++)

{

// 绿 红 蓝 三原色分解

Red0   = _uColor0>>8;

Green0 = _uColor0>>16;

Blue0  = _uColor0;

Red1   = _uColor1>>8;

Green1 = _uColor1>>16;

Blue1  = _uColor1;

// 计算需要多少步(取差值的最大值)

RedMinus   = Red1 - Red0;

GreenMinus = Green1 - Green0;

BlueMinus  = Blue1 - Blue0;

NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);

NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);

// 计算出各色步进值

RedStep   = (float)RedMinus   / NStep;

GreenStep = (float)GreenMinus / NStep;

BlueStep  = (float)BlueMinus  / NStep;

WsDat[j-1] = 0 ;

for(i = 0; i < NStep; i++)

{

Red2   = Red0   + (int)(RedStep   * i);

Green2 = Green0 + (int)(GreenStep * i);

Blue2  = Blue0  + (int)(BlueStep  * i);

color  = Green2<<16 | Red2<<8 | Blue2;          // 合成  绿红蓝

WsDat[j+1] = color ;

WS_L_SetAll();

delay_ms(_uTime);

}

for(i = 0; i < NStep; i++)

{

Red2   = Red1   - (int)(RedStep   * i);

Green2 = Green1 - (int)(GreenStep * i);

Blue2  = Blue1  - (int)(BlueStep  * i);

color  = Green2<<16 | Red2<<8 | Blue2;          // 合成  绿红蓝

WsDat[j] = color ;

WS_L_SetAll();

delay_ms(_uTime);

}

}

}

幻彩灯 html5,WS2811幻彩灯程序相关推荐

  1. 涂鸦Wi-FiBLE SoC开发幻彩灯带(5)----烧录授权

    涂鸦Wi-Fi&BLE SoC开发幻彩灯带.5----烧录授权 视频开发 烧录准备工作 PMS 账号 生成产物 上传固件 授权设置 使用云模组烧录授权平台烧录 Wi-Fi&BLE So ...

  2. 涂鸦Wi-FiBLE SoC开发幻彩灯带(6)----幻彩灯带功能演示

    涂鸦Wi-Fi&BLE SoC开发幻彩灯带.6----幻彩灯带功能演示 视频开发 涂鸦APP Wi-Fi&BLE SoC NANO主控板(BK7231N)接口说明 烧录授权接线方式 上 ...

  3. Arduino+涂鸦云,教你制作幻彩灯带

    大家好,我是程序员小哈.前一阵参加了涂鸦智能[幻彩灯带]Arduino开发实战训练营,参与完整个过程,收获颇丰,今天对本次制作的幻彩灯带进行一下小结,希望以后可以再次参与其他内容的训练营活动. 概况 ...

  4. 【嵌入式物联网实战项目】涂鸦幻彩灯带SDK商用项目

    最近,我在刷视频的时候,偶然间刷到一个很有趣的视频,是涂鸦智能发布的智能幻彩灯带控制方案. https://www.bilibili.com/video/BV1vr4y1q7Sn?spm_id_fro ...

  5. (一)幻彩灯珠-SK6812

    文章目录 一.简介 二.SK6812特性 三.详细设计 3.1. 硬件设计 3.2. 固件设计 3.2.1 时序分析 3.2.2 数据结构分析 3.2.3 源码 一.简介 幻彩灯珠其内置IC,可显示2 ...

  6. 客户端跳转代码html5,HTML5跳转小程序wx-open-launch-weapp的示例代码

    注意事项 微信开放标签有最低的微信版本要求,以及最低的系统版本要求. 微信版本要求为:7.0.12及以上. 系统版本要求为:iOS 10.3及以上.Android 5.0及以上. 绑定域名 微信安全域 ...

  7. I/0口输入输出实验 流水灯程序 P0、P1、P2、P3口作为输出口,连接八只发光二极管,编写程序,使发光二极管从左至右循环点亮。

    P0.P1.P2.P3口作为输出口,连接八只发光二极管,编写程序,使发光二极管从左至右循环点亮.流水灯程序 程序: #include<reg51.h> //包含单片机定义寄存器的头文件 s ...

  8. dsp呼吸灯C语言编程,DSP28335 呼吸灯程序

    DSP28335呼吸灯程序 //########################################################################### // // FI ...

  9. 单片机c语言小灯闪烁,单片机c语言闪烁灯程序.doc

    单片机c语言闪烁灯程序 1. 闪烁灯 1. 实验任务 如图4.1.1 所示:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮 灭,一亮一灭的时间间隔为0.2 秒. 2. 电路原理图 图4. ...

  10. ## STM32——闪烁灯程序

    STM32--闪烁灯程序 单片机的闪烁灯是继点灯后的一个简单的程序,这也是每一个初学者的必经路程,也并没有我们想象的那么难,我们要相信自己.人生难得几回搏,此时不搏待何时. --至每一个为自己的理想而 ...

最新文章

  1. Surface Shading in Tiger Book
  2. Opencv开闭运算去除反光噪声
  3. iOS判断是模拟器还是真机
  4. 全球19家值得关注的物联网安全初创企业
  5. 【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)
  6. C++远航之封装篇——深拷贝、浅拷贝
  7. 高并发处理方案_高并发系统下的缓存解决方案
  8. 【AI视野·今日NLP 自然语言处理论文速览 第十九期】Mon, 5 Jul 2021
  9. 虚拟机如何连接服务器系统,Horizon 连接服务器最大连接数和虚拟机配置
  10. creo如何更改打开时显示方式_图纸打开显示问号时的一种快捷更改方法【AutoCAD教程】...
  11. 引领架构创新之路第八届系统架构师大会撼世来袭
  12. sqlite的交叉编译及移植 -转
  13. php 上传图片 预览 多张,uploadify插件实现多个图片上传并预览
  14. INVENTOR结构件生成器,新建型材
  15. vue 编写H5项目使用BScroll “better-scroll“;两边都滚动,并且联系
  16. Linux删除其中一行的快捷键,Linux 命令快捷键
  17. 51nod-1429 巧克力
  18. 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
  19. 人之最美,纯朴初心,有所不为
  20. 寒霜系列引擎技术解析

热门文章

  1. Java架构师 JD汇总
  2. iostream头文件
  3. mysql建表与oracle_mysql和oracle建表语句以及数据类型的区别
  4. SSH隧道putty使用
  5. 物料编码的制定(资料收集)
  6. 如何降低视频文件大小而又不影响视频清晰度
  7. 直接选择排序到堆排序做的那些改进
  8. 网易教程python_麻瓜编程Python Web 开发工程师微专业基础教程 - 网易云课堂
  9. 微信小程序调出选择好友聊天窗口
  10. matlab将日线编成周线,通达信公式日线10周线调用,请教通达信日线数据上引用周线数据需要用到的函数和方法...