找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2801|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

DMX512轉(zhuǎn)WS2812面板燈單片機源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:306515 發(fā)表于 2018-5-5 11:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "all.h"
  2. u8 xdata DMX512_Read_Buffer[Pixel_Data_Num];
  3. //**********************************************
  4. //        DMX512初始化串口與定時器 24M
  5. //**********************************************
  6. void DMX_Init()
  7. {
  8.         S2CON = 0xD0;                //9位數(shù)據(jù),波特率可設(shè)置
  9.         AUXR &= 0xFB;                //定時器2工作在12T模式
  10.         T2L = 0xFE;                        //定時器2初值
  11.         T2H = 0xFF;                        //定時器2初值
  12.         AUXR |= 0x10;                //啟動定時器2
  13.         IE2|=0x01;                        //串口2中斷允許
  14. }
  15. //**********************************************
  16. //        串口2的中斷服務(wù)函數(shù)  S2RI=1才能進入中斷服務(wù)
  17. //**********************************************
  18. void Uart2_Routnie (void) interrupt 8 //using 1
  19. {
  20.         static u16 data DMX_count;
  21.         TL0 = 0x30;                                                                        //定時器0重裝初值,防止定時器0中斷發(fā)生
  22.         TH0 = 0xF8;                                                                        //定時器0重裝初值,防止定時器0中斷發(fā)生
  23.         switch(S2CON&0x05)                                                        //判斷S2RB8以及S2RI
  24.         {
  25.                 case 1:DMX_count=0;S2CON&=0xf0;break;        //如果S2RB8是0,S2RI是1,清除S2RI
  26.                 case 5:                                                                        //如果S2RB8是1,S2RI是1
  27.                 {
  28.                         if(DMX_count<Pixel_Data_Num)                //只保存需要的最多字節(jié)數(shù)量
  29.                         {
  30.                                 DMX512_Read_Buffer[DMX_count]=S2BUF;//保存
  31.                         }
  32.                         DMX_count++;                                                //計數(shù)器增加
  33.                 }
  34.                 S2CON&=0xf0;                                                        //清除S2RI                                                
  35.                 break;
  36.         }
  37. }
復(fù)制代碼
  1. #include "all.h"
  2. u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
  3. //**********************************************
  4. //        WS2812初始化
  5. //**********************************************
  6. void WS2812_Init()
  7. {
  8.                 WS2812_DAT=1;                                                        //拉高
  9. }
  10. //**********************************************
  11. //        WS2812 發(fā)送數(shù)據(jù)  0.5625us是高電平的界限。發(fā)0高電平不能超過0.5625
  12. //**********************************************
  13. void WS2812_Write_Data(u8 *Point,u8 len)
  14. {        
  15.            u8 data i,j,k,Value;
  16.         for(i=0;i<len;i++)                                                        //多少個RGB燈就發(fā)送多少次
  17.         {
  18.                 for(j=0;j<3;j++)                                                //每個燈是R G B 三種顏色數(shù)據(jù)
  19.                 {
  20.                         switch(j)                                                        //紅綠調(diào)換位置。
  21.                         {
  22.                                 case 0:Value=*(Point+1);break;
  23.                                 case 1:Value=*(Point);break;
  24.                                 case 2:Value=*(Point+2);break;
  25.                         }
  26.                         for(k=0;k<8;k++)                                        //每個數(shù)據(jù)是8位
  27.                         {
  28.                                 WS2812_DAT=1;                                          
  29.                                 if(Value&0x80)                                        //判斷數(shù)據(jù)是不是1
  30.                                 {
  31.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  32.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  33.                                         WS2812_DAT=0;                                 //0.35us
  34.                                         //_nop_();_nop_();
  35.                                 }
  36.                                 else
  37.                                 {        
  38.                                         WS2812_DAT=0;                                 //1.36us
  39.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  40.                                         _nop_();_nop_();_nop_();_nop_();_nop_();
  41.                                        
  42.                                                                                     
  43.                                 }
  44.                                 Value<<=1;        
  45.                         }
  46.                 }
  47.                 Point+=3;//指針加加               
  48.         }        
  49. }
  50. //**********************************************
  51. //        WS2812顯示數(shù)據(jù)
  52. //**********************************************
  53. void WS2812_Display_Ser()
  54. {
  55.         WS2812_Write_Data(WS2812_Write_Buffer+1,169);//發(fā)送169個燈的數(shù)據(jù)
  56. }
復(fù)制代碼

詳細教程:http://www.torrancerestoration.com/bbs/dpj-113653-1.html
所有資料51hei提供下載:
DMX512轉(zhuǎn)WS2812 面板燈程序.zip (56.77 KB, 下載次數(shù): 47)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:390416 發(fā)表于 2021-1-6 01:01 | 只看該作者
我靠 這不是我的代碼嗎?大家用過嗎?歡迎評論
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表