2424|0

1632

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

NUCLEO-L476R驱动RGB全彩模块 [复制链接]

IAR7.4工程驱动RGB模块,


该模块的芯片是WS2811,这个搜索一下资料很多。

他的数据手册上有相应的时序图,类似于红外编码方式

这里为了方便大家,我直接把我编好的工程打包上传,大家可以参考参考。时序我已经调好了,NUCLEO的PC8引脚设置成输出就可以直接用了。




这是效果。通过对红绿蓝三色灰度调整调出红橙黄绿青蓝紫七色,所谓的彩虹也是这个原理吧

  1. /***************************************************
  2. WS2811:
  3. “0码”     T0H:350ns
  4.           T0L:800ns
  5. “1码”     T1H:700ns
  6.           T1L:600ns
  7. RES:>50us
  8. STC15F104
  9. CLOCK:20MHZ  时钟周期50ns  机器周期200ns
  10. ****************************************************/
  11. //#include<intrins.h>
  12. #include "stm32l4xx_hal.h"
  13. #include "ws2811.h"
  14. #define nop __NOP();
  15. #define uchar unsigned char
  16. #define uint  unsigned int
  17. #define speed 10000 //刷新数据时间变量
  18. #define size 65//数据显示个数变量
  19. //sbit DIO=P0^0;          //数据输出引脚声明
  20. #define DIO_1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_SET);
  21. #define DIO_0 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8,GPIO_PIN_RESET);
  22. unsigned int t;
  23. unsigned char  LED_DAT; //可位操作的数据发送暂存变量声明
  24. #define BIT0 0x01 //被发送的数据各位定义
  25. #define BIT1 0x02
  26. #define BIT2 0x04
  27. #define BIT3 0x08
  28. #define BIT4 0x10
  29. #define BIT5 0x20
  30. #define BIT6 0x40
  31. #define BIT7 0x80

  32. unsigned char RR,GG,BB; //RGB灰度值全局变量声明

  33. //1ms延时函数============================================
  34. void delay_1ms(uint z)
  35. {

  36.     unsigned char a,b;
  37. while(z--)
  38. {

  39.     for(b=118;b>0;b--)
  40.         for(a=18;a>0;a--);

  41. }

  42. }

  43. //=============低速模式数码BIT0(高电平时间:350ns 低电平时间:800ns )=============//
  44. void h_dat0()
  45. {
  46.    
  47.   DIO_1;
  48.   nop;nop;nop;nop;nop;nop;
  49.   DIO_0;
  50.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  51.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  52.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  53.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;

  54. }
  55. //=============低速模式数码BIT1(高电平时间:700ns 低电平时间:600ns )=============//
  56. void h_dat1()
  57. {
  58.    
  59.   DIO_1;
  60.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  61.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  62.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  63.   nop; nop; nop;nop; nop; nop;nop; nop; nop;nop; nop; nop;
  64.   DIO_0;
  65.   nop;nop;nop;nop;nop;nop;nop;

  66. }
  67. //RGB显示控制程序=============================================
  68. void Reset(void)
  69. {

  70.     DIO_0;
  71.     delay_1ms(10);

  72. }
  73. //===================发送RGB灰度数据===================
  74. void send_single_data()  //数据格式:G7~G0~R7~R0~B7~B0
  75. {

  76. LED_DAT=GG;
  77. if(LED_DAT & BIT7) h_dat1(); else h_dat0();
  78. if(LED_DAT & BIT6) h_dat1(); else h_dat0();
  79. if(LED_DAT & BIT5) h_dat1(); else h_dat0();
  80. if(LED_DAT & BIT4) h_dat1(); else h_dat0();
  81. if(LED_DAT & BIT3) h_dat1(); else h_dat0();
  82. if(LED_DAT & BIT2) h_dat1(); else h_dat0();
  83. if(LED_DAT & BIT1) h_dat1(); else h_dat0();
  84. if(LED_DAT & BIT0) h_dat1(); else h_dat0();
  85. LED_DAT=RR;
  86. if(LED_DAT & BIT7) h_dat1(); else h_dat0();
  87. if(LED_DAT & BIT6) h_dat1(); else h_dat0();
  88. if(LED_DAT & BIT5) h_dat1(); else h_dat0();
  89. if(LED_DAT & BIT4) h_dat1(); else h_dat0();
  90. if(LED_DAT & BIT3) h_dat1(); else h_dat0();
  91. if(LED_DAT & BIT2) h_dat1(); else h_dat0();
  92. if(LED_DAT & BIT1) h_dat1(); else h_dat0();
  93. if(LED_DAT & BIT1) h_dat1(); else h_dat0();
  94. LED_DAT=BB;
  95. if(LED_DAT & BIT7) h_dat1(); else h_dat0();
  96. if(LED_DAT & BIT6) h_dat1(); else h_dat0();
  97. if(LED_DAT & BIT5) h_dat1(); else h_dat0();
  98. if(LED_DAT & BIT4) h_dat1(); else h_dat0();
  99. if(LED_DAT & BIT3) h_dat1(); else h_dat0();
  100. if(LED_DAT & BIT2) h_dat1(); else h_dat0();
  101. if(LED_DAT & BIT1) h_dat1(); else h_dat0();
  102. if(LED_DAT & BIT1) h_dat1(); else h_dat0();

  103. }

  104. void send_string_data()
  105. {

  106. uchar i;
  107. for(i=0;i<size;i++)
  108. {

  109. send_single_data();

  110. }
  111.    Reset();


  112. }


  113. void RGB_open() //RGB闪烁
  114. {

  115. RR=255; GG=0; BB=0;
  116. send_string_data();
  117. for(t=speed;t>0;t--)  delay_1ms(1000);

  118. RR=0; GG=255; BB=0;
  119. send_string_data();
  120. for(t=speed;t>0;t--)  delay_1ms(1000);

  121. RR=0; GG=0; BB=255;
  122. send_string_data();
  123. for(t=speed;t>0;t--)  delay_1ms(1000);

  124. RR=255; GG=255; BB=0;
  125. send_string_data();
  126. for(t=speed;t>0;t--)  delay_1ms(1000);

  127. RR=255; GG=0; BB=255;
  128. send_string_data();
  129. for(t=speed;t>0;t--)  delay_1ms(1000);

  130. RR=0; GG=255; BB=255;
  131. send_string_data();
  132. for(t=speed;t>0;t--)  delay_1ms(1000);

  133. RR=255; GG=255; BB=255;
  134. send_string_data();
  135. for(t=speed;t>0;t--)  delay_1ms(1000);

  136. }
  137. //=======================RGB呼吸灯=======================//
  138. void RGB_PWM()
  139. {

  140. uint i;
  141. RR=0; GG=0; BB=0;
  142. for(i=0; i<256; i++) //红色渐亮
  143. {

  144. send_string_data(); //发送RGB灰度数据
  145. Reset();
  146. delay_1ms(1);
  147. RR++;

  148. }
  149. RR=255; GG=0; BB=0;
  150. for(i=0; i<256; i++) //红色渐灭
  151. {

  152. send_string_data(); //发送RGB灰度数据
  153. Reset();
  154. delay_1ms(1);
  155. RR--;

  156. }
  157. RR=0; GG=0; BB=0;
  158. /****************************************************/

  159. for(i=0; i<256; i++) //绿色渐亮
  160. {

  161. send_string_data(); //发送RGB灰度数据
  162. Reset();
  163. delay_1ms(1);
  164. GG++;

  165. }
  166. RR=0; GG=255; BB=0;
  167. for(i=0; i<256; i++) //绿色渐灭
  168. {

  169. send_string_data(); //发送RGB灰度数据
  170. Reset();
  171. delay_1ms(1);
  172. GG--;

  173. }
  174. RR=0; GG=0; BB=0;
  175. /****************************************************/
  176. for(i=0; i<256; i++) //蓝色渐亮
  177. {

  178. send_string_data(); //发送RGB灰度数据
  179. Reset();
  180. delay_1ms(1);
  181. BB++;

  182. }
  183. RR=0; GG=0; BB=255;
  184. for(i=0; i<256; i++) //蓝色渐灭
  185. {

  186. send_string_data(); //发送RGB灰度数据
  187. Reset();
  188. delay_1ms(1);
  189. BB--;

  190. }
  191. RR=0; GG=0; BB=0;
  192. /****************************************************/
  193. for(i=0; i<256; i++) //白色渐亮
  194. {

  195. send_string_data(); //发送RGB灰度数据
  196. Reset();
  197. delay_1ms(1);
  198. RR++;
  199. GG++;
  200. BB++;

  201. }
  202. RR=255; GG=255; BB=255;
  203. for(i=0; i<256; i++) //白色渐灭
  204. {

  205. send_string_data(); //发送RGB灰度数据
  206. Reset();
  207. RR--;
  208. GG--;
  209. BB--;

  210. }
  211. RR=0; GG=0; BB=0;

  212. }
复制代码
附件是NUCLEO-L476R的源代码工程,用cube生成的IAR7.4版本,直接烧录就可以使用。
此帖出自stm32/stm8论坛

赞赏

1

查看全部赞赏

点赞 关注
个人签名科技改变生活
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表