STC8G1K08A 驱动WS2812 (RGB 内置IC)亲测可行

本文档详细介绍了如何使用STC8G1K08A单片机驱动WS2812 RGB LED灯带,包括颜色数据定义、像素点控制函数及各种动画效果实现,如流水、呼吸灯等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文件

#include <STC15W401AS.h>
#include <stdio.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define channle_num 4
#define cycle 200 //周期
#define LVD_VECTOR 6
#define SNUM 36
#define HALF 18
#define MOVENUM 8
#define GREEN 0
#define RED 1
#define BLUE 2
sbit S1=P5^5;
sbit S2=P3^3;

#define RGB_H S1=1
#define RGB_L S1=0

//9种颜色数据
code unsigned char colorArr1[9][3]={ {0,255,0},{97,255,0},{255,255,0},{255,0,0}
,{0,0,255},{46,8,84},{32,160,240},{255,255,255},{0,255,255}};

9种颜色数据
code unsigned char colorArr[9][3]={ {0,0,0},{120,255,0},{120,255,0},{42,238,27}
,{234,251,38},{35,218,3},{64,24,114},{250,18,20},{120,255,0}};

定义一个二维,每个括号内的三个数据对应一个像素点
16像素点的数组,每个像素点的颜色由3个字节绝对{绿,红,蓝}
unsigned char s[36][3]={ {50,5,5},{5,50,5},{5,5,50},{50,5,5},{5,50,5},{5,5,50},{50,5,5},{5,50,5},{50,5,5},{50,5,5},
{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5}};

//unsigned char s[8][3]={ {50,5,5},{5,50,5},{5,5,50},{50,5,5},{5,50,5},{5,5,50},
// {50,5,5},{5,50,5}}; //定义一个二维,每个括号内的三个数据对应一个像素点{G,R,B}

//定义两个消减比
code unsigned char cut[8]={6,2,1,0,0,1,2,6};
code unsigned char cut2[8]={0,0,0,0,0,0,0,0};
//定义一个拖尾数组
unsigned char tail[8][3]={ {50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5}};
unsigned char k;
char i;
unsigned char j=0;
unsigned char color=0; //控制显示颜色
uint cnt=0;
uint PWM_cnt1 = 0;
uchar buf[3];
unsigned char PWM_cnt,hight;
float HSV[3] = {0,0,0};

//extern uchar Read_IAP_Byte(uint addr);
//extern void Write_IAP_Byte(uint addr, uchar writeVal);
//extern void Erase_IAP_Sector(uint addr);
typedef struct flag
{
uchar F1:1 ; //key_timer_cnt1 标志位
uchar F2:1 ; //key_timer_cnt2 标志位
uchar F3:1 ; //PWM 计数器 标志位
uchar F4:1 ;
uchar F5:1 ;
uchar F6:1 ;
uchar F7:1 ;
uchar F8:1 ;

}Flag;
Flag num;

void Delay1ms() //@24.000MHz
{
unsigned char i, j;

_nop_();
i = 32;
j = 40;
do
{
	while (--j);
} while (--i);

}

void Delay1msN(unsigned char i)
{
while(i–)
{
Delay1ms();
}
}
void Delay10ms() //@24.000MHz
{
unsigned char i, j, k;

i = 2;
j = 56;
k = 172;
do
{
	do
	{
		while (--k);
	} while (--j);
} while (--i);

}

void Delay15ms() //@24.000MHz
{
unsigned char i, j, k;

i = 2;
j = 212;
k = 132;
do
{
	do
	{
		while (--k);
	} while (--j);
} while (--i);

}

void Delay20ms() //@24.000MHz
{
unsigned char i, j, k;

_nop_();
i = 3;
j = 112;
k = 91;
do
{
	do
	{
		while (--k);
	} while (--j);
} while (--i);

}
void Delay30ms() //@24.000MHz
{
unsigned char i, j, k;

_nop_();
_nop_();
i = 4;
j = 168;
k = 10;
do
{
	do
	{
		while (--k);
	} while (--
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值