关于RGB驱动实现的DEMO
保存数据temp和存放到数组里面的方法值得记录一下。
·
传送门(忘记附上代码了):(WS2812)RGB的通信及驱动总结(SPI + DMA思路)-CSDN博客
/**
* @brief 保存rgb的颜色数据
* @param rgb_r rgb的红色通道
* @param rgb_g rgb的绿色通道
* @param rgb_b rgb的蓝色通道
* @param rgb_num 想要亮哪个rgb
* @note
*/
uint16_t * rgb_sendbuf = (uint16_t *)rx_buf;
void rgb_colorful_data_reserve(uint8_t rgb_r, uint8_t rgb_g ,uint8_t rgb_b ,uint8_t rgb_num)
{
uint8_t rgb_data_buf[3] = {rgb_g, rgb_r, rgb_b};
uint32_t temp = 0;
//保存颜色数据
for (uint8_t i = 0; i < 3; i++)
{
for (uint g = 0; g < 8; g++)
{
if(rgb_data_buf[i] & (0x1 << g)) //判断每一个bit上是逻辑1 还是 逻辑0
{
temp |= (0xc << (4*g)); //发送1100 即高电平 表示逻辑1
}
else
{
temp |= (0x8 << (4*g)); //发送1000 即低电平 表示逻辑0
}
}
//根据rgb_num, 指定存放temp数据,因为数组是uint16的,分两个数组元素去存
rgb_sendbuf[6*rgb_num + (0+(2*i))] = (temp >> 16) & 0xffff;
rgb_sendbuf[6*rgb_num + (1+(2*i))] = temp & 0xffff;
temp = 0;
}
}
保存数据temp和存放到数组里面的方法值得记录一下

更多推荐



所有评论(0)