幻彩灯 html5,WS2811幻彩灯程序
/****************************************************************************************
* 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幻彩灯程序相关推荐
- 涂鸦Wi-FiBLE SoC开发幻彩灯带(5)----烧录授权
涂鸦Wi-Fi&BLE SoC开发幻彩灯带.5----烧录授权 视频开发 烧录准备工作 PMS 账号 生成产物 上传固件 授权设置 使用云模组烧录授权平台烧录 Wi-Fi&BLE So ...
- 涂鸦Wi-FiBLE SoC开发幻彩灯带(6)----幻彩灯带功能演示
涂鸦Wi-Fi&BLE SoC开发幻彩灯带.6----幻彩灯带功能演示 视频开发 涂鸦APP Wi-Fi&BLE SoC NANO主控板(BK7231N)接口说明 烧录授权接线方式 上 ...
- Arduino+涂鸦云,教你制作幻彩灯带
大家好,我是程序员小哈.前一阵参加了涂鸦智能[幻彩灯带]Arduino开发实战训练营,参与完整个过程,收获颇丰,今天对本次制作的幻彩灯带进行一下小结,希望以后可以再次参与其他内容的训练营活动. 概况 ...
- 【嵌入式物联网实战项目】涂鸦幻彩灯带SDK商用项目
最近,我在刷视频的时候,偶然间刷到一个很有趣的视频,是涂鸦智能发布的智能幻彩灯带控制方案. https://www.bilibili.com/video/BV1vr4y1q7Sn?spm_id_fro ...
- (一)幻彩灯珠-SK6812
文章目录 一.简介 二.SK6812特性 三.详细设计 3.1. 硬件设计 3.2. 固件设计 3.2.1 时序分析 3.2.2 数据结构分析 3.2.3 源码 一.简介 幻彩灯珠其内置IC,可显示2 ...
- 客户端跳转代码html5,HTML5跳转小程序wx-open-launch-weapp的示例代码
注意事项 微信开放标签有最低的微信版本要求,以及最低的系统版本要求. 微信版本要求为:7.0.12及以上. 系统版本要求为:iOS 10.3及以上.Android 5.0及以上. 绑定域名 微信安全域 ...
- I/0口输入输出实验 流水灯程序 P0、P1、P2、P3口作为输出口,连接八只发光二极管,编写程序,使发光二极管从左至右循环点亮。
P0.P1.P2.P3口作为输出口,连接八只发光二极管,编写程序,使发光二极管从左至右循环点亮.流水灯程序 程序: #include<reg51.h> //包含单片机定义寄存器的头文件 s ...
- dsp呼吸灯C语言编程,DSP28335 呼吸灯程序
DSP28335呼吸灯程序 //########################################################################### // // FI ...
- 单片机c语言小灯闪烁,单片机c语言闪烁灯程序.doc
单片机c语言闪烁灯程序 1. 闪烁灯 1. 实验任务 如图4.1.1 所示:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮 灭,一亮一灭的时间间隔为0.2 秒. 2. 电路原理图 图4. ...
- ## STM32——闪烁灯程序
STM32--闪烁灯程序 单片机的闪烁灯是继点灯后的一个简单的程序,这也是每一个初学者的必经路程,也并没有我们想象的那么难,我们要相信自己.人生难得几回搏,此时不搏待何时. --至每一个为自己的理想而 ...
最新文章
- Surface Shading in Tiger Book
- Opencv开闭运算去除反光噪声
- iOS判断是模拟器还是真机
- 全球19家值得关注的物联网安全初创企业
- 【Gym - 101612C】【2017-2018NEERC】Consonant Fencity(状压枚举,预处理)
- C++远航之封装篇——深拷贝、浅拷贝
- 高并发处理方案_高并发系统下的缓存解决方案
- 【AI视野·今日NLP 自然语言处理论文速览 第十九期】Mon, 5 Jul 2021
- 虚拟机如何连接服务器系统,Horizon 连接服务器最大连接数和虚拟机配置
- creo如何更改打开时显示方式_图纸打开显示问号时的一种快捷更改方法【AutoCAD教程】...
- 引领架构创新之路第八届系统架构师大会撼世来袭
- sqlite的交叉编译及移植 -转
- php 上传图片 预览 多张,uploadify插件实现多个图片上传并预览
- INVENTOR结构件生成器,新建型材
- vue 编写H5项目使用BScroll “better-scroll“;两边都滚动,并且联系
- Linux删除其中一行的快捷键,Linux 命令快捷键
- 51nod-1429 巧克力
- 如何打开计算机控制面板,控制面板怎么打开 快速打开控制面板方法大全-电脑教程...
- 人之最美,纯朴初心,有所不为
- 寒霜系列引擎技术解析