WS2812小灯可以多种芯片控制板内集成STC8
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
- #include<STC15.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define num 12//灯泡个数
- sbit DO=P1^6;//数据输出口口
- void delay1us()
- {
- unsigned char a;
- for(a=3;a>0;a--);
- }
- void delays(uint m)
- {
- uchar i,j;
- while(--m)
- {
- for(i=56;i>0;i--)
- for(j=250;j>0;j--);
- }
- }
- void WS2812WR(uchar Re,uchar Gr,uchar Bl)
- {
- uchar color=3,dat,i=8;
- DO=0;
- //依次输出24bit GRB数据
- while(color--)
- {
- if(color==2)dat=Gr;//绿
- if(color==1)dat=Re;//红
- if(color==0)dat=Bl;//蓝
- while(i--)
- {
- if(dat & 0X80)//写1
- {
- DO=1;delay1us();
- DO=0;_nop_();
- }
- else //写0
- {
- DO=1;_nop_();
- DO=0;delay1us();
- }
- dat <<= 1;
- }
- i=8;
- }
- }
- void zi()
- {
- uchar i,j;
- for(j=0;j<num;j++)
- {
- for(i=0;i<num;i++)
- {
-
- WS2812WR(0,0,255);
-
- }
- delays(100);//反正每次整完一组
-
-
- }
- }
- void main()
- {
- uint i,j;
- zi();
- while(1)
- {
-
- for(j=0;j<num;j++)
- {
- for(i=0;i<num;i++)
- {
- if(i==j-2)
- WS2812WR(200,0,200); //粉红
- if(i==j-1)
- WS2812WR(0,200,200); //青兰
- if(i==j)
- WS2812WR(200,200,0); //橙黄
- if(i==j+1)
- WS2812WR(200,200,200);//正白
-
-
- else
- WS2812WR(255,255,0);//蓝色底色
-
- }
- delays(100);//反正每次整完一组
-
-
- }
- }
- }
复制代码
所有资料51hei提供下载:
WS2812.zip
(999.24 KB, 下载次数: 156)
WS2812全彩.zip
(39.08 KB, 下载次数: 132)
|