1 前言
是一种数字可编程LED灯条,也被称为。它由RGB(红、绿、蓝)三种颜色的LED组成,并集成了控制电路和信号处理功能。每个 LED 都有一个唯一的地址,并可以通过单个数据线进行串联连接。
具有以下特点:
高度可编程性:每个LED可以独立地设置颜色和亮度,因此可以实现各种动态效果和彩色变化。
简单的控制接口:使用单个数据线进行通信,通过发送特定的序列来控制每个LED的颜色和亮度。
低功耗:采用高效的LED驱动技术,具有较低的功耗,适合电池供电的应用。
灵活的应用:可广泛应用于室内装饰、灯光艺术、电子产品原型设计等领域,具有丰富的创意空间和应用场景。
24bit数据结构
G7 G6 G5 G4 G3 G2 G1 G0 R7 R6 R5 R4 R3 R2 R1 R0 B7 B6 B5 B4 B3 B2 B1 B0
注:高位先发,按照GRB 的顺序发送数据。
2 引脚图
引脚功能
功能描述
当然,在使用的过程中,我们往往会使用不止一个LED灯,会将多个灯级联成灯带或者灯板,我们这次使用的就是灯板。
具体级联方式如下:
典型应用数据:外围电路不需要加滤波电容
其中DIN作为数据的输入端,每个LED需要24位数据控制,多出的数据会通过DOUT 引脚传递给下一个LED,以此类推,当 接收到280us 以上的低电平时,数据被写入LED,灯的颜色改变。
以下是数据的表示方法:
数据传输时间
时序波形图
输入码型:
连接方法:
此次我采用SPI 的方式来驱动。SPI的时钟调整为8MHz,发送一字节正好是1.25us,给 发送0即通过SPI 总线发送,发送1 即通过SPI 总线发送,非常巧妙的一种方式。
根据以上原理,我先配置SPI的stack如下:
经查看原理图,配置SPI 的MOSI 为P101。
生成工程后,编写代码.c 如下:
view to ?
1. # “.h”
2.
3. [] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
5. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
6. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
7. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
8. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
9.
10. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
11. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
12. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
13.
14. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
15. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
16. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
17.
18. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
19. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
20. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
21.
22. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
23. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
24. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
25.
26. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
27. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
28. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
29.
30. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
31. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
32. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
33.
34. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
35. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
36. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8,
37.
38. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
39. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
40. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
41.
42. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
43. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
44. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
45.
46. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
47. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
48. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
49.
50. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
51. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
52. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
53.
54. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
55. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
56. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
57.
58. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
59. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
60. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
61.
62. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
63. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
64. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8,
65.
66. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,
67. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,
68. 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8,
69.
70. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8,
71. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8,
72. 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xf8, 0xf8, 0xf8
73. };
74.
75. void (void)
76. {
77. ( );
78.
79. }
80.
81. void show(void)
82. {
83. ( );
84. (80, CONDS);
85. }
86.
87. void clear(void)
88. {
89. ( [], 0xc0, () * 3 * 8);
90. }
91.
92. void ( n, g, r, b)
93. {
94. if (n ) {
95. *p;
96. p = [ + n * 24];
97. for( i = 0; i i++)
98. {
99. *(p + i) = (0 == (g (1 (7 i)))) ? 0xc0 : 0xf8;
100. }
101. for( i = 0; i i++)
102. {
103. *(p + i + 8) = (0 == (r (1 (7 i)))) ? 0xc0 : 0xf8;
104. }
105. for( i = 0; i i++)
106. {
107. *(p + i + 16) = (0 == (b (1 (7 i)))) ? 0xc0 :0xf8;
108. }
109. }
110. }
.h:
view to ?
1. #
2. #
3. # “.h”
4.
5. # (8)
6. # (60)
7. # (() * 3 * 8 + )
8.
9. void (void);
10. void show(void);
11. void clear(void);
12. void ( n, g, r, b);
13.
14. #endif
在主函数中添加测测试代码如下:
view to ?
1. void ( *pargs)
2. {
3. (void)pargs;
4.
5. }
6.
7.
11. void (void)
12. {
13.
14. ();
15.
16. while(1)
17. {
18. clear();
19.
20. for( i = 0; i ; i++)
21. {
22. (i, i*8+2, i*2, i*15);
23. show();
24. (50, CONDS);
25. }
26.
27. }
28.
29.
30. #if
31.
32. ();
33. #endif
34. }
代码的主要思路是,将写入buff先清零,然后向数据中写信指定个数的RGB 数据,最后刷新到spi 总线之中。









