標(biāo)題:
DMX512轉(zhuǎn)WS2812面板燈單片機源程序
[打印本頁]
作者:
18560055829
時間:
2018-5-5 11:52
標(biāo)題:
DMX512轉(zhuǎn)WS2812面板燈單片機源程序
單片機源程序如下:
#include "all.h"
u8 xdata DMX512_Read_Buffer[Pixel_Data_Num];
//**********************************************
// DMX512初始化串口與定時器 24M
//**********************************************
void DMX_Init()
{
S2CON = 0xD0; //9位數(shù)據(jù),波特率可設(shè)置
AUXR &= 0xFB; //定時器2工作在12T模式
T2L = 0xFE; //定時器2初值
T2H = 0xFF; //定時器2初值
AUXR |= 0x10; //啟動定時器2
IE2|=0x01; //串口2中斷允許
}
//**********************************************
// 串口2的中斷服務(wù)函數(shù) S2RI=1才能進入中斷服務(wù)
//**********************************************
void Uart2_Routnie (void) interrupt 8 //using 1
{
static u16 data DMX_count;
TL0 = 0x30; //定時器0重裝初值,防止定時器0中斷發(fā)生
TH0 = 0xF8; //定時器0重裝初值,防止定時器0中斷發(fā)生
switch(S2CON&0x05) //判斷S2RB8以及S2RI
{
case 1:DMX_count=0;S2CON&=0xf0;break; //如果S2RB8是0,S2RI是1,清除S2RI
case 5: //如果S2RB8是1,S2RI是1
{
if(DMX_count<Pixel_Data_Num) //只保存需要的最多字節(jié)數(shù)量
{
DMX512_Read_Buffer[DMX_count]=S2BUF;//保存
}
DMX_count++; //計數(shù)器增加
}
S2CON&=0xf0; //清除S2RI
break;
}
}
復(fù)制代碼
#include "all.h"
u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
//**********************************************
// WS2812初始化
//**********************************************
void WS2812_Init()
{
WS2812_DAT=1; //拉高
}
//**********************************************
// WS2812 發(fā)送數(shù)據(jù) 0.5625us是高電平的界限。發(fā)0高電平不能超過0.5625
//**********************************************
void WS2812_Write_Data(u8 *Point,u8 len)
{
u8 data i,j,k,Value;
for(i=0;i<len;i++) //多少個RGB燈就發(fā)送多少次
{
for(j=0;j<3;j++) //每個燈是R G B 三種顏色數(shù)據(jù)
{
switch(j) //紅綠調(diào)換位置。
{
case 0:Value=*(Point+1);break;
case 1:Value=*(Point);break;
case 2:Value=*(Point+2);break;
}
for(k=0;k<8;k++) //每個數(shù)據(jù)是8位
{
WS2812_DAT=1;
if(Value&0x80) //判斷數(shù)據(jù)是不是1
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
WS2812_DAT=0; //0.35us
//_nop_();_nop_();
}
else
{
WS2812_DAT=0; //1.36us
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
Value<<=1;
}
}
Point+=3;//指針加加
}
}
//**********************************************
// WS2812顯示數(shù)據(jù)
//**********************************************
void WS2812_Display_Ser()
{
WS2812_Write_Data(WS2812_Write_Buffer+1,169);//發(fā)送169個燈的數(shù)據(jù)
}
復(fù)制代碼
詳細教程:
http://www.torrancerestoration.com/bbs/dpj-113653-1.html
所有資料51hei提供下載:
DMX512轉(zhuǎn)WS2812 面板燈程序.zip
(56.77 KB, 下載次數(shù): 47)
2018-5-5 11:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
人人學(xué)會單片機
時間:
2021-1-6 01:01
我靠 這不是我的代碼嗎?大家用過嗎?歡迎評論
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1