單片機源程序如下:
- #include "all.h"
- u8 xdata DMX512_Read_Buffer[Pixel_Data_Num];
- //**********************************************
- // DMX512初始化串口與定時器 24M
- //**********************************************
- void DMX_Init()
- {
- S2CON = 0xD0; //9位數據,波特率可設置
- AUXR &= 0xFB; //定時器2工作在12T模式
- T2L = 0xFE; //定時器2初值
- T2H = 0xFF; //定時器2初值
- AUXR |= 0x10; //啟動定時器2
- IE2|=0x01; //串口2中斷允許
- }
- //**********************************************
- // 串口2的中斷服務函數 S2RI=1才能進入中斷服務
- //**********************************************
- void Uart2_Routnie (void) interrupt 8 //using 1
- {
- static u16 data DMX_count;
- TL0 = 0x30; //定時器0重裝初值,防止定時器0中斷發生
- TH0 = 0xF8; //定時器0重裝初值,防止定時器0中斷發生
- 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) //只保存需要的最多字節數量
- {
- DMX512_Read_Buffer[DMX_count]=S2BUF;//保存
- }
- DMX_count++; //計數器增加
- }
- S2CON&=0xf0; //清除S2RI
- break;
- }
- }
復制代碼- #include "all.h"
- u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
- //**********************************************
- // WS2812初始化
- //**********************************************
- void WS2812_Init()
- {
- WS2812_DAT=1; //拉高
- }
- //**********************************************
- // WS2812 發送數據 0.5625us是高電平的界限。發0高電平不能超過0.5625
- //**********************************************
- void WS2812_Write_Data(u8 *Point,u8 len)
- {
- u8 data i,j,k,Value;
- for(i=0;i<len;i++) //多少個RGB燈就發送多少次
- {
- for(j=0;j<3;j++) //每個燈是R G B 三種顏色數據
- {
- switch(j) //紅綠調換位置。
- {
- case 0:Value=*(Point+1);break;
- case 1:Value=*(Point);break;
- case 2:Value=*(Point+2);break;
- }
- for(k=0;k<8;k++) //每個數據是8位
- {
- WS2812_DAT=1;
- if(Value&0x80) //判斷數據是不是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顯示數據
- //**********************************************
- void WS2812_Display_Ser()
- {
- WS2812_Write_Data(WS2812_Write_Buffer+1,169);//發送169個燈的數據
- }
復制代碼
詳細教程:http://www.zg4o1577.cn/bbs/dpj-113653-1.html
所有資料51hei提供下載:
DMX512轉WS2812 面板燈程序.zip
(56.77 KB, 下載次數: 47)
2018-5-5 11:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|