|
使用bluenrg-1的RNG的真随机数功能生成随机色彩,再通过WS2812B彩灯显示
如果使用灯带再缩短更新延时效果会更好
生成随机数的代码,先等待数据准备好再读取数据,RNG模块一次可以读取一个16位的数据
- uint8_t rng_read(void)
- {
- uint8_t random;
- /* Loop until the RNG Data Ready is SET */
- while (RNG_GetFlagStatus() != SET);
- random = (uint8_t)(RNG_GetValue() % 255);
- return random;
- }
复制代码
WS2812B使用的是24位,所以每次读取8位,连续读取3次填充一颗LED灯珠
- void ws2812b_display(void)
- {
- uint16_t i;
- uint32_t colors[WS2812B_COUNT];
- RTC_DateTimeType RTC_DateTime;
- rtc_get_time(&RTC_DateTime);
- //清除源数据,绘制刻度
- for(i=0;i<WS2812B_COUNT;i++)
- {
- colors[i] = rng_read() << 16 | rng_read() << 8 | rng_read();
- }
- if(index >= 24 || RTC_DateTime.Second == 0)index = 0;
- //填充完一列8个点后显示
- IntColorsToWS2812BBytes(ws2812b_buffer,colors,WS2812B_COUNT);
- DMASpi_Sending((uint32_t)ws2812b_buffer,WS2812B_COUNT * 9);
- }
复制代码
https://training.eeworld.com.cn/course/4063/learn?preview=1#lesson/17835
https://training.eeworld.com.cn/course/4063/learn?preview=1#lesson/17836
工程文件
|
|