|
800ns 400ns 可通過示波器進(jìn)行自主調(diào)節(jié),簡單易用易學(xué)
單片機(jī)源程序如下:
- #include <STC8.H>
- #include "intrins.h"
- sbit ws2812b_IO=P3^3; //控制WS2812數(shù)據(jù)輸出口
- u8 Loop_Speed=120; //流水燈延時(shí)變量
- unsigned char bdata LED_DAT; //可位操作的數(shù)據(jù)發(fā)送緩存變量
- sbit bit0=LED_DAT^0; //被發(fā)送數(shù)據(jù)的各位定義
- sbit bit1=LED_DAT^1;
- sbit bit2=LED_DAT^2;
- sbit bit3=LED_DAT^3;
- sbit bit4=LED_DAT^4;
- sbit bit5=LED_DAT^5;
- sbit bit6=LED_DAT^6;
- sbit bit7=LED_DAT^7;
- //*******************發(fā)送1碼**********************// 1, 18n ,0,6n //STC燒錄器設(shè)置24M,,,不同單片機(jī) 選擇不同個(gè)數(shù)的NOP。
- //一個(gè))_NOP_()為40ns 高碼850ns低碼400ns
- #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_();}
- //*******************發(fā)送0碼**********************//1 ,9n,0,15n
- //一個(gè))_NOP_()為40ns 高碼400ns低碼850ns
- #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_();}
- void SendData(u8 dat)
- {
- LED_DAT = dat;
- if(bit7==1){CODE_1} else{CODE_0}
- if(bit6==1){CODE_1} else{CODE_0}
- if(bit5==1){CODE_1} else{CODE_0}
- if(bit4==1){CODE_1} else{CODE_0}
- if(bit3==1){CODE_1} else{CODE_0}
- if(bit3==1){CODE_1} else{CODE_0}
- if(bit1==1){CODE_1} else{CODE_0}
- if(bit0==1){CODE_1} else{CODE_0}
- }
- void ON_LED(u8 GG,u8 RR,u8 BB)// 先綠色 后紅 后藍(lán)
- {
- SendData(GG);
- SendData(RR);
- SendData(BB);
- }
- void Delay1ms(u16 k) //@24.000MHz Delay1ms(50);//實(shí)測50ms
- {
- unsigned char i, j, m;
- for(m=0;m<k;m++)
- {
- _nop_();
- i = 32;
- j = 40;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- void Delay1us(u16 v) //@24.000MHz Delay1us(50);//重置最小時(shí)間,實(shí)測60us
- {
- unsigned char i ,m;
- for(m=0;m<v;m++)
- {
- i = 6;
- while (--i);
- }
- }
- void init ()
- {
- P3M0=0;
- P3M1=0;
- P5M0=0;
- P5M1=0;
- }
- void main()
- {
- init();
- while(1)
- {
- ON_LED(0X00,0XFF,0X00);//一行代碼對(duì)應(yīng)一個(gè)燈, 三個(gè)255數(shù)字對(duì)應(yīng)3燈亮度,可以組合任意顏色 ,重置發(fā)送數(shù)據(jù)時(shí)間間隔 Delay1us(50);就重新從第一個(gè)地址為發(fā)送。
- ON_LED(0X00,0XFF,0X00);
- ON_LED(0X00,0XFF,0X00);
- ON_LED(0X00,0XFF,0X00);
- ON_LED(0X00,0XFF,0X00);
-
- ON_LED(0X00,0X00,0XFF);
- ON_LED(0X00,0X00,0XFF);
- ON_LED(0X00,0X00,0XFF);
- ON_LED(0X00,0X00,0XFF);
- ON_LED(0X00,0X00,0XFF);
-
- ON_LED(0XFF,0X00,0X00);
- ON_LED(0XFF,0X00,0X00);
- ON_LED(0XFF,0X00,0X00);
- ON_LED(0XFF,0X00,0X00);
- ON_LED(0XFF,0X00,0X00);
-
- ON_LED(0X00,0XFF,0XFF);
- ON_LED(0X00,0XFF,0XFF);
- ON_LED(0X00,0XFF,0XFF);
- ON_LED(0X00,0XFF,0XFF);
- ON_LED(0X00,0XFF,0XFF);
- while(1);
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|