本帖最后由 jennyzhaojie 于 2022-4-8 11:15 编辑
当初在申请迪文屏的时候,设定的目标就是完成一个通过W2812灯带来营造环境氛围的装置。原打算舍去外围的电路,直接以迪文屏来驱动W2812。但在缺少示波器的情况下,很难精准地控制好ns级的时序要求,尽管W2812能够被点亮,但显示效果较随机,难以按指定的模式来显示,最终只能暂且放弃这种方法。 出于对精准时序的保障,还是采用主频较高的AT32F425为中介来控制W2812,而以迪文屏来进行界面显示和触摸操控,并通过串口的通讯功能来传递操控指令。 为了能较好地营造环境氛围,选取的是60点位的W2812彩色灯带。此外,为了突出显示效果,特意用软的铝线为彩色灯带制作了一个螺旋形的支架,使彩色灯带能更充分发挥性能,其显示效果见图1所示。
图1显示效果 该装置的状态构成如图2所示,其中彩色灯带所连接的引脚为PB15,串口所连接的引脚为PA2和PA3。
图2硬件构成 1.界面设计 使彩色灯带以最多彩的视觉效果感染人,在迪文屏的界面上提供多个参数变量来增强变化效果的自由度。 这些参数主要有RGB亮度、点位数量及变化增量,见图3所示。
图3界面设计
图4显示效果 R亮度地址:0x2000 G亮度地址:0x2001 B亮度地址:0x2002 数量地址:0x2003 R增量地址:0x2004 G增量地址:0x2005 B增量地址:0x2006 启动键地址:0x1000 2.显示模式 1)渐变模式 在该模式下,色彩亮度等量递增,见图5所示。
图5渐变效果 2)纯彩模式 在该模式下,显示色彩均一致,增量则为零。
图6纯彩效果 3)跃变模式 在该模式下,色彩呈现跳变效果,递增为异步变化。
图6跃变效果 3.编程设计 在开发板一侧,其程序设计分为两个部分,一是对W2812的驱动控制,另一个则是使用串行通讯来发送数据查询指令及接收查询数据并提取控制参数。 1)W2812驱动 对彩色灯带的驱动是通过SPI和DMA的配合来实现的,并将主频设置到80MHz。 由于只是要达到W2812的时序输出要求,故只使用SPI的MOSI引脚即可,并以SLAVE模式工作。 在显示数据的存储上,是将输出的数据存放到数组中,并通过函数rgb_to_buf()将显示数组中的数据发送到缓冲区。 现实多模式显示效果的主程序为:
2)串行通讯 (1)读取数据指令 要读取指定变量的数据,需发送相应的指令。 由于在设计变量地址时,以作了相应的安排过使用指令“5A A5 04 83 20 00 07”即可完成对参数的读取,其对应的程序内容为:
- i=0;
- while(i<7)
- {
- while(usart_flag_get(USART2, USART_TDBE_FLAG) == RESET);
- usart_data_transmit(USART2, usart2_zl[i]);
- i=i+1;
- }
复制代码
(2)接收参数指令 在发出读取数据指令后,需接收迪文屏发出的数据,相应的程序内容为:
- i=0;
- while(i<21)
- {
- while(usart_flag_get(USART2, USART_RDBF_FLAG) == RESET);
- usart2_rx_buffer[i]= usart_data_receive(USART2);
- i=i+1;
- }
复制代码
在制作完成后,使用界面的色彩滑块即可快速地完成RGB色彩亮度的设置,使用色彩增量两侧的增减调节则可以完成增量值的调整,从而改变色彩渐进的变化速度及色彩跃变的幅度。在严峻的疫情下,希望该作品能伴随着缤纷的色彩为大家带来心情的舒缓,尽早摆脱疫情的困扰 ! 视频演示:
|