欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
RGB stm32單片機ws2812 PWM+DMA LED控制程序
[打印本頁]
作者:
JJH555
時間:
2020-3-17 17:41
標題:
RGB stm32單片機ws2812 PWM+DMA LED控制程序
RGB stm32單片機ws2812LED控制,使用的是硬件驅動PWM + DMA
單片機源程序如下:
#include "ws2812b.h"
#include "stdlib.h"
#include "delay.h"
void WS2812_Send(uint8_t (*color)[3], uint16_t len)
{
uint8_t i;
uint16_t memaddr;
uint16_t buffersize;
buffersize = (len*24)+43; // number of bytes needed is #LEDs * 24 bytes + 42 trailing bytes
memaddr = 0; // reset buffer memory index
while (len)
{
for(i=0; i<8; i++) // RED
{
LED_BYTE_Buffer[memaddr] = ((color[len-1][1]<<i) & 0x0080) ? TIMING_ONE:TIMING_ZERO;
memaddr++;
}
for(i=0; i<8; i++) // GREEN data
{
LED_BYTE_Buffer[memaddr] = ((color[len-1][0]<<i) & 0x0080) ? TIMING_ONE:TIMING_ZERO;
memaddr++;
}
for(i=0; i<8; i++) // BLUE
{
LED_BYTE_Buffer[memaddr] = ((color[len-1][2]<<i) & 0x0080) ? TIMING_ONE:TIMING_ZERO;
memaddr++;
}
len--;
}
//===================================================================//
//bug:最后一個周期波形是高電平,故增加一個低電平的波形
LED_BYTE_Buffer[memaddr] = 0;
//===================================================================//
memaddr++;
while(memaddr < buffersize)
{
LED_BYTE_Buffer[memaddr] = 0;
memaddr++;
}
DMA_SetCurrDataCounter(DMA1_Channel7, buffersize); // load number of bytes to be transferred
DMA_Cmd(DMA1_Channel7, ENABLE); // enable DMA channel 7
TIM_Cmd(TIM2, ENABLE); // enable Timer 2
while(!DMA_GetFlagStatus(DMA1_FLAG_TC7)) ; // wait until transfer complete
DMA_Cmd(DMA1_Channel7, DISABLE); // disable DMA channel 7
DMA_ClearFlag(DMA1_FLAG_TC7); // clear DMA1 Channel 7 transfer complete flag
TIM_Cmd(TIM2, DISABLE); // disable Timer 2
}
void WS2812_Random() //隨機閃燈
{
uint8_t rgb0[1][3];
rgb0[0][0] = rand()%256;
rgb0[0][1] = rand()%256;
rgb0[0][2] = rand()%256;
WS2812_Send(&rgb0[0],1);
delay_s(1);
}
void WS2812_Red_BLN() //紅色呼吸燈
{
u16 i;
uint8_t rgb0[256][3] ={0,0,0};
for(i=0;i<=255;i++)
{
rgb0[i][0] = i;
}
for(i=0;i<=255;i++)
{
WS2812_Send(&rgb0[i],1);
delay_ms(5);
}
for(i=0;i<=255;i++)
{
rgb0[i][0] = (255 - i);
}
for(i=0;i<=255;i++)
{
WS2812_Send(&rgb0[i],1);
delay_ms(5);
}
delay_ms(500);
}
void WS2812_Green_BLN() //綠色呼吸燈
{
u16 i;
uint8_t rgb0[256][3] ={0,0,0};
for(i=0;i<=255;i++)
{
rgb0[i][1] = i;
}
for(i=0;i<=255;i++)
{
WS2812_Send(&rgb0[i],1);
delay_ms(5);
}
for(i=0;i<=255;i++)
{
rgb0[i][1] = (255 - i);
}
for(i=0;i<=255;i++)
{
WS2812_Send(&rgb0[i],1);
delay_ms(5);
}
delay_ms(500);
}
void WS2812_Blue_BLN() //藍色呼吸燈
{
u16 i;
uint8_t rgb0[256][3] ={0,0,0};
for(i=0;i<=255;i++)
{
rgb0[i][2] = i;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
WS2812B(PWM+DMA).7z
(185.22 KB, 下載次數: 211)
2020-3-17 17:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
1AJ1987402
時間:
2020-5-3 17:51
STC能用?
作者:
longwu4886
時間:
2021-7-29 10:32
LED_BYTE_Buffer[memaddr] = ((color[len-1][1]<<i) & 0x0080)
?
TIMING_ONE:TIMING_ZERO;
這里的問號是什么意思?
作者:
yuexige
時間:
2021-10-13 19:25
單個燈的
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1