找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5805|回復(fù): 4
收起左側(cè)

stc單片機控制4引腳Ws2812b RGB燈(VSS VDD DIN DOUT)完整純凈驅(qū)動程序

  [復(fù)制鏈接]
ID:447546 發(fā)表于 2021-11-12 13:37 | 顯示全部樓層 |閱讀模式
800ns 400ns  可通過示波器進行自主調(diào)節(jié),簡單易用易學
單片機源程序如下:
  1. #include <STC8.H>
  2. #include "intrins.h"

  3. sbit ws2812b_IO=P3^3;  //控制WS2812數(shù)據(jù)輸出口
  4. u8 Loop_Speed=120; //流水燈延時變量
  5. unsigned char bdata LED_DAT; //可位操作的數(shù)據(jù)發(fā)送緩存變量

  6. sbit bit0=LED_DAT^0; //被發(fā)送數(shù)據(jù)的各位定義
  7. sbit bit1=LED_DAT^1;
  8. sbit bit2=LED_DAT^2;
  9. sbit bit3=LED_DAT^3;
  10. sbit bit4=LED_DAT^4;
  11. sbit bit5=LED_DAT^5;
  12. sbit bit6=LED_DAT^6;
  13. sbit bit7=LED_DAT^7;

  14. //*******************發(fā)送1碼**********************// 1, 18n ,0,6n              //STC燒錄器設(shè)置24M,,,不同單片機 選擇不同個數(shù)的NOP。
  15. //一個)_NOP_()為40ns 高碼850ns低碼400ns
  16. #define CODE_1 {ws2812b_IO=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();ws2812b_IO=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}            

  17.         //*******************發(fā)送0碼**********************//1 ,9n,0,15n
  18. //一個)_NOP_()為40ns 高碼400ns低碼850ns
  19. #define CODE_0 {ws2812b_IO=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();ws2812b_IO=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}     

  20. void SendData(u8 dat)
  21. {
  22.         LED_DAT = dat;
  23.         if(bit7==1){CODE_1} else{CODE_0}
  24.         if(bit6==1){CODE_1} else{CODE_0}
  25.         if(bit5==1){CODE_1} else{CODE_0}
  26.         if(bit4==1){CODE_1} else{CODE_0}
  27.         if(bit3==1){CODE_1} else{CODE_0}
  28.         if(bit3==1){CODE_1} else{CODE_0}
  29.         if(bit1==1){CODE_1} else{CODE_0}
  30.         if(bit0==1){CODE_1} else{CODE_0}

  31. }

  32. void ON_LED(u8 GG,u8 RR,u8 BB)// 先綠色 后紅  后藍  
  33. {        
  34.                         SendData(GG);   
  35.                         SendData(RR);
  36.                         SendData(BB);        
  37. }

  38. void Delay1ms(u16 k)                //@24.000MHz       Delay1ms(50);//實測50ms
  39. {
  40.         unsigned char i, j, m;
  41.         for(m=0;m<k;m++)
  42.         {
  43.                 _nop_();
  44.                 i = 32;
  45.                 j = 40;
  46.                 do
  47.                 {
  48.                         while (--j);
  49.                 } while (--i);
  50.         }
  51. }

  52. void Delay1us(u16 v)                //@24.000MHz      Delay1us(50);//重置最小時間,實測60us
  53. {
  54.         unsigned char i ,m;
  55.         for(m=0;m<v;m++)
  56.         {
  57.                 i = 6;
  58.                 while (--i);
  59.         }
  60. }

  61. void init ()
  62. {
  63.           P3M0=0;
  64.                 P3M1=0;
  65.                 P5M0=0;
  66.                 P5M1=0;
  67. }

  68. void main()
  69. {
  70.         init();
  71.         while(1)
  72.         {
  73.                 ON_LED(0X00,0XFF,0X00);//一行代碼對應(yīng)一個燈, 三個255數(shù)字對應(yīng)3燈亮度,可以組合任意顏色 ,重置發(fā)送數(shù)據(jù)時間間隔  Delay1us(50);就重新從第一個地址為發(fā)送。
  74.                 ON_LED(0X00,0XFF,0X00);
  75.                 ON_LED(0X00,0XFF,0X00);
  76.                 ON_LED(0X00,0XFF,0X00);
  77.                 ON_LED(0X00,0XFF,0X00);
  78.                
  79.                 ON_LED(0X00,0X00,0XFF);
  80.                 ON_LED(0X00,0X00,0XFF);
  81.                 ON_LED(0X00,0X00,0XFF);
  82.                 ON_LED(0X00,0X00,0XFF);
  83.                 ON_LED(0X00,0X00,0XFF);
  84.                
  85.                 ON_LED(0XFF,0X00,0X00);
  86.                 ON_LED(0XFF,0X00,0X00);
  87.                 ON_LED(0XFF,0X00,0X00);
  88.                 ON_LED(0XFF,0X00,0X00);
  89.                 ON_LED(0XFF,0X00,0X00);
  90.                
  91.                 ON_LED(0X00,0XFF,0XFF);
  92.                 ON_LED(0X00,0XFF,0XFF);
  93.                 ON_LED(0X00,0XFF,0XFF);
  94.                 ON_LED(0X00,0XFF,0XFF);
  95.                 ON_LED(0X00,0XFF,0XFF);
  96.                 while(1);
  97.         }


  98. }

復(fù)制代碼


企業(yè)51hei截圖_16366951833416.png
企業(yè)51hei截圖_16366951983577.png

評分

參與人數(shù) 3黑幣 +77 收起 理由
catlu + 12
lkc8210 + 15 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:418515 發(fā)表于 2022-8-9 22:44 | 顯示全部樓層
這個比較精確
回復(fù)

使用道具 舉報

ID:64089 發(fā)表于 2022-9-19 15:32 | 顯示全部樓層
經(jīng)測試非常好用,學習到了,不過設(shè)置成1T的時候需要在>6M時再自己測試一下時間間隔,謝謝分享!
回復(fù)

使用道具 舉報

ID:1038987 發(fā)表于 2023-4-16 20:37 | 顯示全部樓層
這個代碼應(yīng)該好研究。謝謝
回復(fù)

使用道具 舉報

ID:807361 發(fā)表于 2024-4-28 22:32 | 顯示全部樓層
這個代碼應(yīng)該好研究。謝謝
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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