欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于51內核單片機對WS2811的RGB彩燈控制程序
[打印本頁]
作者:
zhuxiao
時間:
2019-3-30 13:29
標題:
關于51內核單片機對WS2811的RGB彩燈控制程序
本程序基于stm32的ws2811例程修改,細節在于T1H與T1L的間隔時間
單片機源程序如下:
/****************************************************************************************
* WS2811 彩燈驅動函數
*
* 調用方法:
* 修改宏定義: #define nWs 1 // 有多少顆WS2811級聯
* WS_Init(); // IO初始化
* WsDat[0] = 0x808080;//顯存賦值
* WS_SetAll(); // 發送數據
* ColorToColor(unsigned long color0, unsigned long color1);// 顏色漸變算法
*
* 作者:星希望(已校驗)
* 日期:2015年6月24日
****************************************************************************************/
#include <STC8.H>
#include "WS2811.h"
#include "delay.h"
#include <intrins.h>
#define u32 unsigned long
#define DAT_OUT_h P1M0=0X00;DAT_OUT=1
#define DAT_OUT_l P1M0=0X00;DAT_OUT=0
sbit DAT_OUT=P1^0;
/* 顯存 */
unsigned long WsDat[nWs];
/**************************************************************************************
* IO初始化(移植時請修改)
**************************************************************************************/
void WS_Init()
{
P1M1=0X00;
P1PU=0XFF;
}
/**************************
* 內部延時
***************************/
void delay2us()
{
unsigned char i;
i = 14;
while (--i);
}
void delay05us()
{
unsigned char i;
i = 2;
while (--i);
}
void delay1_2us()
{
unsigned char i;
i = 8;
while (--i);
}
void delay1_3us()
{
unsigned char i;
i = 9;
while (--i);
}
/***************************
* 發送一比特
****************************/
void TX0() { DAT_OUT_h; delay05us(); DAT_OUT_l; delay2us(); } // 發送0
void TX1() { DAT_OUT_h; delay1_2us(); DAT_OUT_l; delay1_3us(); } // 發送1
void WS_Reset() { DAT_OUT_l; delay_us(60); DAT_OUT_h; DAT_OUT_l; }
/**************************************************************************************
* 發送一字節
**************************************************************************************/
void WS_Set1(unsigned long dat)
{
unsigned char i;
for(i=0; i<24; i++)
{
if(0x800000 == (dat & 0x800000) ) TX1();
else TX0();
dat<<=1; //左移一位
}
}
/**************************************************************************************
* 發送所有字節
**************************************************************************************/
void WS_SetAll()
{
unsigned char j;
for(j=0; j<nWs; j++)
{
WS_Set1(WsDat[0]); // j / 0
}
WS_Reset();
}
void WS_SET(unsigned long color,unsigned char num)
{
unsigned char j;
for(j=0;j<nWs;j++)
{
if(j<num)
{
WS_Set1(color);
}
else
{
WS_Set1(Black);
}
}
WS_Reset();
}
void WS_SET_Water_lamp(unsigned long color,unsigned int time)
{
unsigned char j,x;
for(x=0;x<nWs;x++)
{
for(j=0;j<nWs;j++)
{
if(j==x)
{
WS_Set1(color);
}
else
{
WS_Set1(Black);
}
}
WS_Reset();
delay_ms(time);
}
}
void WS_SET_Water_lamp_two(unsigned long color,unsigned int time)
{
unsigned char j,x;
for(x=0;x<nWs;x++)
{
for(j=0;j<nWs;j++)
{
if(j<x)
{
WS_Set1(color);
}
else
{
WS_Set1(Black);
}
}
WS_Reset();
delay_ms(time);
}
}
void Breathing_lamp(unsigned long color,unsigned int time)
{
unsigned char j,x,r,g,b,move;
unsigned long color0,color1;
r=color>>8;
g=color;
b=color>>16;
if(r!=0)
{
color0=r;move=8;
}
if(g!=0)
{
color0=g;move=0;
}
if(b!=0)
{
color0=b;move=16;
}
for(x=0;x<127;x++)
{
color1=color0<<move;
for(j=0;j<nWs;j++)
{
WS_Set1(color1);
}
color0=color0-2;
WS_Reset();
delay_ms(time);
}
for(x=0;x<127;x++)
{
color1=color0<<move;
for(j=0;j<nWs;j++)
{
WS_Set1(color1);
}
color0=color0+2;
WS_Reset();
delay_ms(time);
}
}
void Breathing_lamp_Alternate(unsigned int time)
{
unsigned char j,x,num,move;
unsigned long color0,color1;
for(num=0;num<3;num++)
{
color0=0;
move=8*num;
for(x=0;x<127;x++)
{
color1=color0<<move;
for(j=0;j<nWs;j++)
{
WS_Set1(color1);
}
color0=color0+2;
WS_Reset();
delay_ms(time);
}
for(x=0;x<127;x++)
{
color1=color0<<move;
for(j=0;j<nWs;j++)
{
WS_Set1(color1);
}
color0=color0-2;
WS_Reset();
delay_ms(time);
}
}
}
/********************************************
* 求絕對值
********************************************/
unsigned char abs0(int num)
{
if(num<0)
num = -num;
return (unsigned char) num;
}
/***********************************************************************************
* 顏色漸變算法
* 誤差 <= 2
************************************************************************************/
u32 ColorToColor(unsigned long color0, unsigned long color1,unsigned int time)
{
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;
// 綠 紅 藍 三原色分解
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;
if(( abs0(RedMinus) > abs0(GreenMinus) ))
NStep=abs0(RedMinus);
else
NStep=abs0(GreenMinus);
if(( 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[0] = color;
WS_SetAll(); // 輸出
delay_ms(time); // 漸變速度
}
// 漸變結束
return color;
}
復制代碼
所有資料51hei提供下載:
RGB彩燈調試.zip
(65.47 KB, 下載次數: 202)
2019-3-30 13:29 上傳
點擊文件名下載附件
關于51內核單片機對WS2811的RGB彩燈控制
下載積分: 黑幣 -5
作者:
51hei團團
時間:
2019-3-31 02:15
樓主能分享下源程序嗎?
作者:
zhuxiao
時間:
2019-4-2 13:56
51hei團團 發表于 2019-3-31 02:15
樓主能分享下源程序嗎?
源程序不是在附件里嘛?你看看
作者:
xiexugang
時間:
2019-11-13 01:36
用STC8單片控制不錯.
作者:
qiaoyuemin
時間:
2019-12-9 16:37
兄弟 可不可以給我郵箱發個程序包啊 感謝大哥
我的郵箱
804551172@qq.com
有些定義我看的不太明白
作者:
被寧神的小Y
時間:
2020-3-16 16:21
用STC8單片控制不錯.
作者:
yuren1984
時間:
2021-6-20 16:54
你這晶振頻率是多少啊?
作者:
qq506370359
時間:
2021-8-2 19:06
非常不錯的內容,在學習中!!!!!!!!!!!!!!!!!!!!!!!!!
作者:
xuyisoso
時間:
2021-11-24 15:11
親測可用,我呀,只會調用不會自己寫
作者:
lids
時間:
2022-5-11 11:14
yuren1984 發表于 2021-6-20 16:54
你這晶振頻率是多少啊?
void Delay1ms() //@24.000MHz
{
unsigned char i, j;
_nop_();
i = 32;
j = 40;
do
{
while (--j);
} while (--i);
}
作者:
雪玉寐影
時間:
2022-5-12 12:11
這是STC8系列的,學習下時序怎么控制的,60路燈帶看看能不能改成PWM的
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1