作品出处:RT-Thread
作者:**の我手中
文章链接: 1.作品介绍
- 硬件部分:
使用32*32 P5 RGB LED 屏,HUB接口,1/16扫描,之前淘宝 20块买了两块,没事就拿出来玩玩又放回去,一直没有把这个做成实用的HUB75
┌─────────┐ │ R1 G1 │ MTX_PR0 MTX_PG0 │ B1 GND │ MTX_PB0 │ │ │ R2 G2 │ MTX_PR1 MTX_PG1 └┐B2 GND │ MTX_PB1 │ │ ┌┘A0 A1 │ MOVE_IOA MOVE_IOB │ A2 AEX │ MOVE_IOC MOVE_IOD │ │ │ CLK LOCK│ MTX_PCLK MTX_PLOCK │ OE GND │ MTX_POE └─────────┘
显示原理:
32X32 RGB LED被分为 上下2部分 上半部分有R1 G1 B1输入信号,下半部分由R2 G2 B2输入信号,每部分16横行,由A0 A1 A1 A3,选择一行显示,通过串行输入RGB信号32次,显示一行, 重复16次,利用人眼视觉暂留效应,刷新频率大于60HZ,就可以全屏扫描显示,控制LED颜色,要么是电流控制需要每个灯都是独立控制,节约成本PWM控制,R255 G255 B255 8位 显示颜色,LED灯只有开关状态,我们需要在每横行显示增加PWM控制,即显示横行时,将RGB值分为8Bit,循环显示8次,每次延时时长2^N递减,依次类推 就可以显示灰度图
接线定义
MTX_PR0———->PA0 MTX_PB0———->PA1 MTX_PG0———->PA2 MTX_PR1———->PE8 MTX_PB1———->PE9 MTX_PG1———->PE10 MTX_PCLK ——->PB0 MTX_PLOCK——->PB1 MTX_POE ——->PB2 MOVE_IOA———->PC0 MOVE_IOB———->PC1 MOVE_IOC———->pc2 MOVE_IOD———->PC3
使用RT-thread 不适合刷RGB 点阵屏,中断太多耗时,但是比赛要求使用,只能修改代码了
一个主线程,2个定时器,空闲线程,控制台线程,系统OS tick 50HZ 20ms中断一次
空闲线程:用钩子函数调用,LED显示部分,内部直接调用寄存器控制IO输出,中断锁上,避免中断导致显示高亮闪烁,
定时器1:每秒 控制台输出显示帧率,需要时开启,70HZ左右
定时器2:20MS 扫描依次按键, KEY1 切换显示DEMO KEY2 切换DEMO内图片,KEY3 开关显示
主线程:显示切换 显示缓存刷新计算等
动画取模可以到这个网站抓包解析数据 https://pixel.divoom-gz.com/#/
淘宝有对应产品卖
好像没啥创新点,都是参考别人到设计代码,我只是综合利用罢了,
本人一直想用STM32驱动32X32点整屏 ESP8266后台访问网页,爬取divoom的图片,显示到这个屏幕上,或者直接PoJie divoom APP设置显示
还有一个比较好玩到开源应用,利用重力感应,屏幕小点随机碰撞显示,不过别人是用ZYNQ+FPGA做的
divoom 点音别人已经做成产品了,
P5 32X32淘宝上也有卖,放在车后
多多参考别人到的代码,多多学习一下
演示视频地址:
【RGB点阵屏演示-哔哩哔哩】
源码地址:
https://gitee.com/miwang186/rgb_led_array
http://www.**/d/1065868.html
http://bbs.mydigit.cn/read.php?tid=1721594
https://github.com/pulsar256/STM32RGBMatrixDriver
https://github.com/xupenghu/STM32RGBMatrixDriver
https://github.com/hzeller/rpi-rgb-led-matrix