迪文科技论坛

 找回密码
 立即注册
搜索
查看: 307|回复: 0

【开源】COF案例分享:基于智能屏的LED与W2812控制

[复制链接]

574

主题

169

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12353
发表于 2022-4-24 17:48:15 | 显示全部楼层 |阅读模式
——文档转载自电子发烧友

1.初试迪文智能屏

(1)产品介绍
这次测评的智能屏共由3个器件,USB数据线,转接板和智能屏,见图1.1和图1.2所示。


1.1迪文屏及组件



图1.2显示效果

2.基于智能屏的LED与W2812控制

(1)利用迪文智能屏的触摸操作可进行参数的设置,其设置的参数又可以借助串行通讯来输出参数值。若接收该参数,则可以对外设加以控制。为此,这里设计了一个通过触摸操作来控制LED的功能,其电路连接如图2.1所示,也就是将智能屏的TX2GND引脚分别同gd32L233开发板的RXGND相连接,以构成串行通讯通道。



图2.1电路连接

(2)这样就可以在接收设置参数后,按参数值来控制开发板上的4LED灯的状态。在使用串口调试助手的情况下,可观察到触摸操作所发出的数据,见图2.2所示。



图2.2数据输出效果


(3)依照智能屏的指令结构可知,所设置的参数为最后2个字节的内容,以“5A A5 06 83 10 70 01 00 01”为例,“00 01”就是参数值。为此在开发板一侧,可编写一个程序来接收智能屏所发出的数据并提取出参数值。然后在主程序中按参数值的不同控制LED产生不同的效果。

主程序的内容为:
int main(void)
{
uint16_t n;
led_init();
systick_config();
nvic_irq_enable(USART0_IRQn, 0);
playm();
gd_eval_com_init(EVAL_COM);
usart_interrupt_disable(USART0, USART_INT_TBE);
while(1)
{
rx_counter=0;
usart_interrupt_enable(EVAL_COM, USART_INT_RBNE);
while(rx_counter < nbr_data_to_read)
n=tx_buffer[6] = rx_buffer[8];
IF(n==1)
{
playm();
gd_eval_led_on(LED1);
}
if(n==2)
{
playm();
gd_eval_led_on(LED2);
}
if(n==3)
{
playm();
gd_eval_led_on(LED3);
}
if(n==4)
{
playm();
gd_eval_led_on(LED4);
}
if(n==5)
{
playm();
}
if(n==6)
{
gd_eval_led_on(LED1);
gd_eval_led_on(LED2);
gd_eval_led_on(LED3);
gd_eval_led_on(LED4);
}
delay_1ms(200);
rx_counter=0;
usart_interrupt_enable(USART0, USART_INT_RBNE);
delay_1ms(200);
}
}

经程序的编译下载,即可提供触摸操作来产生图2.3至图2.6所示的控制效果。


  

图2.3点亮全部LED                                                          图2.41LED
  

图2.53LED                                                                      图2.6熄灭全部LED

(4)在此基础上,若在开发板一侧再添加上一个W2812的彩色灯环,则可以产生出缤纷的色彩效果以营造环境的灯光氛围。由于W2812是一种单总线的器件,所以它只需一个GPIO引脚就可完成其控制,其信号引脚是与PB10来连接,其连接关系如图2.7所示。


图2.7器件连接
(5)实现W2812控制的主程序为:
int main(void)
{
uint16_t n;
led_init();
systick_config();
nvic_irq_enable(USART0_IRQn, 0);
playm();
gd_eval_com_init(EVAL_COM);
usart_interrupt_disable(USART0, USART_INT_TBE);
ws2812B_Init();
while(1)
{
rx_counter=0;
usart_interrupt_enable(EVAL_COM, USART_INT_RBNE);
while(rx_counter < nbr_data_to_read);
n=tx_buffer[6] = rx_buffer[8];
if(n==1)
{
WS2812B_displayAllRed();
}
if(n==2)
{
WS2812B_DisplayAllGreen();
}
if(n==3)
{
WS2812B_DisplayAllBlue();
}
if(n==4)
{
WS2812B_Displayyellow();
}
if(n==5)
{
WS2812B_DisplayMAGENTA();
}
if(n==6)
{
WS2812B_DisplayGBLUE();
}
if(n==7)
{
WS2812B_DisplayAll();
}
delay_1ms(200);
rx_counter=0;
usart_interrupt_enable(USART0, USART_INT_RBNE);
delay_1ms(200);
}
}

经程序的编译下载,其控制效果如图2.8和图2.9所示。

图2.8 显示效果1
图2.9显示效果2

















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-1-14 21:37 , Processed in 0.063731 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表