找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

WS2812燈珠驅(qū)動(dòng)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:474201 發(fā)表于 2019-12-3 10:07 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本啟動(dòng)方案MCU采用的是STC8 24M晶振 驅(qū)動(dòng)的 需要挪用需要修改延時(shí)函數(shù)
#ifndef WS2812_Drive    //如果其他文件已經(jīng)做了這個(gè)記號(hào),那么不執(zhí)行#define.
#define WS2812_Drive    //如果其他文件沒(méi)有這個(gè)標(biāo)記,那么就需要新做一個(gè)記號(hào)(唯一的)。

#define Pixel_Data_Num 36 //定義緩存空間一顆燈珠3個(gè)緩存一共12顆燈珠
sbit WS2812_Data=P3^2;
extern void WS2812_Init();
extern u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];
extern void WS2812B_Display_Drive();
#endif


文件中的u8 和u16 u32分別如下:
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;

  1. #include "all.h"
  2. u8 xdata WS2812_Write_Buffer[Pixel_Data_Num];//調(diào)用數(shù)組
  3. void WS2812_Init()
  4. {
  5.         WS2812_Data=1;
  6. }
  7. void WS2812B_Write_Data(u8 *chr,u8 len)//驅(qū)動(dòng)程序
  8. {
  9.         u8 idata i,j,k,value;
  10.         for(i=0;i<len;i++)
  11.         {
  12.                 value=*chr;
  13.                 for(j=0;j<3;j++)
  14.                 {
  15.                         switch(j)
  16.                         {
  17.                                 case 0:value=*(chr+1);break;
  18.                                 case 1:value=*(chr+0);break;
  19.                                 case 2:value=*(chr+2);break;
  20.                         }
  21.                         for(k=0;k<8;k++)
  22.                         {
  23.                                 if((value&0x80)==0x80)
  24.                                 {
  25.                                         WS2812_Data=1;
  26.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  27.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  28.                                         _nop_();_nop_();_nop_();_nop_();_nop_();
  29.                                         value<<=1;
  30.                                         WS2812_Data=0;
  31.                                         _nop_();
  32.                                 }
  33.                                 else
  34.                                 {
  35.                                         WS2812_Data=1;
  36.                                          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  37.                                         WS2812_Data=0;
  38.                                         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  39.                                         value<<=1;
  40.                                 }
  41.                         }
  42.                 }
  43.                 chr+=3;
  44.         }
  45.         
  46. }
  47. void WS2812B_Display_Drive()//顯示程序
  48. {
  49.         static xdata u8 count=0;
  50.         switch(count)
  51.         {
  52.                 case 0 :WS2812_Data=0;break;
  53.                 case 100 :
  54.                         EA=0;
  55.                         WS2812B_Write_Data(WS2812_Write_Buffer+1,12);
  56.                         EA=1;break;
  57.                 case 101 :WS2812_Data=1;break;
  58.         }
  59.         count++;
  60. }
復(fù)制代碼

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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