LED单元板驱动(HUB75接口)

您所在的位置:网站首页 led控制板维修 LED单元板驱动(HUB75接口)

LED单元板驱动(HUB75接口)

2023-11-22 00:48| 来源: 网络整理| 查看: 265

开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么?

用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。

 

一、接口定义及原理

如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。16扫控制16行显示,共2个RGB通道所以16扫可以控制16*2=32行显示。

(1)单元板的显示为单位时间内显示一行数据,然后短时间内切换到另一行显示,16扫一个显示周期为切换16次。

(2)两个RGB通道分别控制上下两部分的RGB灯。图片中的为32*16。正常来说,需要3个地址ABC,假设ABC 3个IO为高电平意味着选定第7行跟第15行,RGB1通道数据被写到第7行,RGB2数据被写到第15行。(我这个板子比较坑,有点不同)

(3)数据的写入顺序,失能LED显示,写入一行数据,选定行,锁存,使能LED显示。

(4)颜色渐变,方法是同一行扫描32次,假设R1我只显示一次,那它占空比就是1/32,显示次数越多越来亮。

         这方法挺麻烦,但暂时没想到别的方法。

 

  By the way:我这板子比较奇怪,数据写入方式跟一般的板子不一样。具体看图:

  

数据填充的时候,RBG1通道前8个时钟周期数据在第0行,接下来8个时钟周期数据却跳到第4行去了。然后又跳回第一行。

正常的应该是一直往同一行填充数据才对的。所以我买的这个板子比较奇葩。

 

二、驱动代码

使用单片机为STM32F407VE,STM32CUBEMX生成代码

#include "main.h" #include "tim.h" #include "gpio.h" void SystemClock_Config(void); #define OE_H HAL_GPIO_WritePin(OE_GPIO_Port,OE_Pin,GPIO_PIN_SET) #define R1_H HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_SET) #define R2_H HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_SET) #define G1_H HAL_GPIO_WritePin(G1_GPIO_Port,G1_Pin,GPIO_PIN_SET) #define G2_H HAL_GPIO_WritePin(G2_GPIO_Port,G2_Pin,GPIO_PIN_SET) #define B1_H HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_SET) #define B2_H HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_SET) #define A_H HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_SET) #define B_H HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_SET) #define CLK_H HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_SET) #define LAT_H HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin,GPIO_PIN_SET) #define OE_L HAL_GPIO_WritePin(OE_GPIO_Port,OE_Pin,GPIO_PIN_RESET) #define R1_L HAL_GPIO_WritePin(R1_GPIO_Port,R1_Pin,GPIO_PIN_RESET) #define R2_L HAL_GPIO_WritePin(R2_GPIO_Port,R2_Pin,GPIO_PIN_RESET) #define G1_L HAL_GPIO_WritePin(G1_GPIO_Port,G1_Pin,GPIO_PIN_RESET) #define G2_L HAL_GPIO_WritePin(G2_GPIO_Port,G2_Pin,GPIO_PIN_RESET) #define B1_L HAL_GPIO_WritePin(B1_GPIO_Port,B1_Pin,GPIO_PIN_RESET) #define B2_L HAL_GPIO_WritePin(B2_GPIO_Port,B2_Pin,GPIO_PIN_RESET) #define A_L HAL_GPIO_WritePin(A_GPIO_Port,A_Pin,GPIO_PIN_RESET) #define B_L HAL_GPIO_WritePin(B_GPIO_Port,B_Pin,GPIO_PIN_RESET) #define CLK_L HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_RESET) #define LAT_L HAL_GPIO_WritePin(LAT_GPIO_Port,LAT_Pin,GPIO_PIN_RESET) //此单元板4扫一次性输入2行数据,2个通道,故控制2*2*LED_ROW=16行 #define LED_ROW 4 //一行32个点 #define LED_COLUMN 32 typedef struct { uint16_t B:5; uint16_t G:5; uint16_t R:5; uint16_t null:1; }led_data; extern const unsigned char gImage_111[1024]; led_data *img_data = (led_data*)gImage_111; void delay(uint16_t time) { uint16_t i,j; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3