欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1823|回復: 0
收起左側

WS2812燈珠驅動程序

[復制鏈接]
ID:474201 發表于 2019-12-3 10:07 | 顯示全部樓層 |閱讀模式
本啟動方案MCU采用的是STC8 24M晶振 驅動的 需要挪用需要修改延時函數
#ifndef WS2812_Drive    //如果其他文件已經做了這個記號,那么不執行#define.
#define WS2812_Drive    //如果其他文件沒有這個標記,那么就需要新做一個記號(唯一的)。

#define Pixel_Data_Num 36 //定義緩存空間一顆燈珠3個緩存一共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];//調用數組
  3. void WS2812_Init()
  4. {
  5.         WS2812_Data=1;
  6. }
  7. void WS2812B_Write_Data(u8 *chr,u8 len)//驅動程序
  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. }
復制代碼

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表