-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRGB.c
More file actions
80 lines (56 loc) · 2.31 KB
/
RGB.c
File metadata and controls
80 lines (56 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "RGB.h"
#include "main.h"
#include "tim.h"
uint16_t RGB_buffur[Reste_Data + WS2812_Data_Len] = { 0 }; //??????
void WS2812_Display_1(uint32_t Color, uint16_t num)
{
//????:?????????N?0
uint16_t* p = (RGB_buffur + Reste_Data) + (num * Led_Data_Len);
for (uint8_t i = 0; i < 8; ++i)
p[i+8]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
for (uint8_t i = 8; i < 16; ++i)
p[i-8]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
for (uint8_t i = 16; i < 24; ++i)
p[i]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
}
void WS2812_Display_2( uint8_t red, uint8_t green, uint8_t blue,uint16_t num)
{
uint8_t i;
uint32_t Color=(green << 16 | red << 8 | blue);//?2?8????????32?????
//????:?????????N?0
uint16_t* p = (RGB_buffur + Reste_Data) + (num * Led_Data_Len);
for (i = 0; i < 24; ++i) //???????
p[i]= (((Color << i) & 0X800000) ? Hight_Data : Low_Data);
}
void WS2812_Number_4(uint32_t Color1,uint32_t Color2,uint32_t Color3,uint32_t Color4)
{
uint16_t RGB_Buff_4[Reste_Data + 4 * WS2812_Data_Len] = { 0 };
uint16_t* p;
uint32_t Color;
for( uint8_t k=0;k<4;k++)
{
switch (k) //??????
{
case 0: p= (RGB_Buff_4 + Reste_Data) + (0 * Led_Data_Len),Color=Color1;break;
case 1: p= (RGB_Buff_4 + Reste_Data) + (1 * Led_Data_Len),Color=Color2;break;
case 2: p= (RGB_Buff_4 + Reste_Data) + (2 * Led_Data_Len),Color=Color3;break;
case 3: p= (RGB_Buff_4 + Reste_Data) + (3 * Led_Data_Len),Color=Color4;break;
default : ;break;
}
for (uint8_t i = 0; i < 8; ++i) //???????
{
for (uint8_t i = 0; i < 8; ++i)
p[i+8]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
for (uint8_t i = 8; i < 16; ++i)
p[i-8]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
for (uint8_t i = 16; i < 24; ++i)
p[i]= (((Color << i) & 0X800000) ? Hight_Data :Low_Data);
}
}
HAL_TIM_PWM_Start_DMA(&htim4,TIM_CHANNEL_2,(uint32_t *)RGB_Buff_4,(176));//??DMA??
}
// DMA ????????
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
HAL_TIM_PWM_Stop_DMA(&htim4,TIM_CHANNEL_2);
}