SK6812 或者 WS2812 灯带。 网上资料很多。这里就不再做详细介绍
STC8F2K08S2 可以达到1T的速率 可以达到此款灯带要求。
只需要注意以下几点:
1. IO反转需要达到 μ秒级别。 网上有说传统的 STC89C52 是可以实现的。 本人并没有实测。 STC8F2K08S2 此款可以实现。
2. 传输数据是一次传N个 24位数据。 代表N个灯的颜色。 然后复位 延时 传下次 N个灯你想要的颜色。
STC8F2K08S2 此款芯片 IO 有内部上拉 。可以设置推挽式输出。IO口可以直接接灯带DIN
代码:
#include "reg51.h"
#include "intrins.h"
sfr P1M0 = 0x92;
sfr P1M1 = 0x91; //STC8F2K08S2 设置P1 口
sbit Din = P1^6;
#define COLOR_NUM 7 //显示7种颜色
#define LIGHT_NUM 30 //可以亮30个灯。
struct color
{
unsigned char red;
unsigned char green;
unsigned char blue;
};
struct color rainbow[] = {
{0xFF, 0x00, 0x00}, // red
{0x00, 0xFF, 0x00}, // oringe
{0x00, 0x00, 0xFF}, // yellow
{0xFF, 0xFF, 0x00}, // green
{0xFF, 0x00, 0xFF}, // blue
{0, 0, 0xFF}, // indigo
{0x8B, 0, 0xFF}, // violet
{0, 0, 0}, // off
};
//实测 高电平0.2917μs,低电平0.9583
#define CODE0 {Din=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
Din=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
}
//实测 高电平 0.5833μs 低电平0.6667
#define CODE1 {Din=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
Din = 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();\
}
//>80μs 实测 91μs
void Reset()
{
unsigned int i;
Din = 0;
for(i=0;i<280;i++)
;
}
//这个延时 并没有具体去算。 只是大概。可以根据自己需求更改
void Delayms(unsigned long k) //@24.000MHz
{
unsigned long i,j;
for(i=0; ifor(j=0; j<800; j++)
;
}
void send_data(unsigned char r, unsigned char g, unsigned char b)
{
unsigned char a;
for(a=0;a<8;a++)
{
if(r&0x80)
CODE1
else
CODE0
r=r<<1;
}
for(a=8;a<16;a++)
{
if(g&0x80)
CODE1
else
CODE0
g=g<<1;
}
for(a=16;a<24;a++)
{
if(b&0x80)
CODE1
else
CODE0
b=b<<1;
}
}
void main()
{
unsigned char color,light;
P1M0 = 0xff; //设置P1.0~P1.7为推挽输出模式
P1M1 = 0x00;
while (1){
for(color = 0; color < COLOR_NUM; color++) {
// 1. lighten all the lights
for(light = 0; light < LIGHT_NUM; light++)
send_data(rainbow[color].red, rainbow[color].green, rainbow[color].blue);
Reset();
Delayms(500);
}
};
}
显示效果是 30个灯一起亮 红 然后变成蓝 绿 等色彩。 程序猿们可以根据自己想要的效果来做处理。
参考 百度文库:
https://wenku.baidu.com/view/0467db96852458fb760b568e.html
如有疑问或者有项目定制开发需求。 请留言或者联系qq:493980674