一文教你玩LED点阵屏32*64/64*64----基于STM32

news/2024/11/22 21:42:14/

以32*64点阵屏为例,详解LED点阵屏驱动全过程

        首先要了解LED点阵屏幕的显示原理。

        一般LED点阵屏在某一时间段内只能点亮某一行或者某一列,因为人的眼睛只有24帧速度,只要屏幕速度超过这个值,我们看到的是一个连续完整的画面。一般拿手机的高频率拍摄模式照LED点阵屏能很明显的发现屏幕是在一行一行的显示。

        我用的这个屏幕32*64的单色点阵屏。

        LED点阵屏的行是由行驱动芯片控制,我用的这个屏幕上有两个行驱动芯片,行驱动芯片一般是三八译码器的形式控制。两个行驱动芯片级联,通过HUB75-B接口上A,B,C,D引脚控制,通过这几个引脚的电平高低表示二进制,四个引脚最多能表示16种状态。但是我这个屏幕是32行的,怎么办呢?屏幕的行是两两接在一起的,也就是说当第0行低电平的时候,第16行也是低电平,当第一行接低电平的时候,第17行也是低电平。

        LED点阵屏的列是由列驱动芯片控制,也就是真正输出数据的是这些列驱动芯片,我用的屏幕上的列驱动芯片是16输出,单色屏,所以有8个列驱动芯片,4个控制上面16行,剩下四个控制下面16行。如果是双色屏,他的数量会翻倍。

HUB75-B接口

//定义一个数组存放取模后的数据
uint8_t spi_send_buf[32][8]   //屏幕是32*64,一共有32行,每一行64个点,8个字节

程序运行逻辑

将这个函数在循环里或者在任务里面调用就好了

//下面是LED屏幕刷新的大概流程,只要把下面的函数在循环里面调用就好了
//如果用RTOS的话,在任务里面调用就好了,延时500us
uint8_t Line =0; //行变量,遍历32行
void LED_SCAN_Func(void){			SPI_send_line(spi_send_buf[Line][0]);		//往屏幕传数据data_lock_out(Line);	                    //数据锁存并输出Line ++;		                            //行自增if(Line==32)Line =0;		                //一共32行,扫描一遍,重新开始	} 

//该函数的作用是数锁存
//具体要看屏幕列驱动芯片的时序
void data_lock_out(uint16_t LINE)
{GPIO_SetBits(GPIOB, LED_LAT); 	//HUB75-B 的 LAT拉高 ,数据传入锁存 GPIO_ResetBits(GPIOB, LED_LAT);  	//LAT拉低GPIO_SetBits(GPIOB, LED_OE); 	//OE拉高 ,不输出if (LINE > 15){LINE -=16;}LED_line_ctrl (LINE);						//换行GPIO_ResetBits(GPIOB, LED_OE); 	//OE拉低  输出
}

//每次发送需要发一整行的内容,每一行8个字节,通过spi发送
void SPI_send_line(uint8_t *data){int i =0;for(i=0;i<8 ; i++)  //循环8次,发送8个字节{SPI_WriteByte(data[i]);	//发送数据}}

下面的函数是控制HUB75-B的A,B,C,D引脚,实现换行

void LED_line_ctrl(uint8_t Num)
{	switch(Num){case 0:  //控制引脚A、B、C、D状态:0000GPIO_ResetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_ResetBits(GPIOB, LED_D);break;case 1: //控制引脚A、B、C、D状态:0001GPIO_SetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_ResetBits(GPIOB, LED_D);break;case 2: //控制引脚A、B、C、D状态:0010GPIO_ResetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);	GPIO_ResetBits(GPIOB, LED_D);	break;case 3: //控制引脚A、B、C、D状态:0011GPIO_SetBits(GPIOC, LED_A);		 GPIO_SetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_ResetBits(GPIOB, LED_D);break;case 4: //控制引脚A、B、C、D状态:0100GPIO_ResetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);GPIO_ResetBits(GPIOB, LED_D);break;case 5: //控制引脚A、B、C、D状态:0101GPIO_SetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);	GPIO_ResetBits(GPIOB, LED_D);break;case 6: //控制引脚A、B、C、D状态:0110GPIO_ResetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);GPIO_ResetBits(GPIOB, LED_D);	break;case 7: //控制引脚A、B、C、D状态:0111GPIO_SetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);	GPIO_ResetBits(GPIOB, LED_D);break;case 8:  //控制引脚A、B、C、D状态:1000GPIO_ResetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_SetBits(GPIOB, LED_D);break;case 9: //控制引脚A、B、C、D状态:1001GPIO_SetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_SetBits(GPIOB, LED_D);break;case 10: //控制引脚A、B、C、D状态:1010GPIO_ResetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);	GPIO_SetBits(GPIOB, LED_D);	break;case 11: //控制引脚A、B、C、D状态:1011GPIO_SetBits(GPIOC, LED_A);		 GPIO_SetBits(GPIOC, LED_B);GPIO_ResetBits(GPIOC, LED_C);GPIO_SetBits(GPIOB, LED_D);break;case 12: //控制引脚A、B、C、D状态:1100GPIO_ResetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);GPIO_SetBits(GPIOB, LED_D);break;case 13: //控制引脚A、B、C、D状态:1101GPIO_SetBits(GPIOC, LED_A);GPIO_ResetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);	GPIO_SetBits(GPIOB, LED_D);break;case 14: //控制引脚A、B、C、D状态:1110GPIO_ResetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);	GPIO_SetBits(GPIOB, LED_D);	break;case 15: //控制引脚A、B、C、D状态:1111GPIO_SetBits(GPIOC, LED_A);GPIO_SetBits(GPIOC, LED_B);GPIO_SetBits(GPIOC, LED_C);	GPIO_SetBits(GPIOB, LED_D);break;default:break;}
}

头文件里的一些定义放在下面这一段

/******HUB75-B公头接口引脚定义***********/ 
//A-->单片机PC13
#define LED_A                          GPIO_Pin_13     //HUB75-B:行电源控制信号A (9号引脚)
//B-->单片机PC14           
#define LED_B                          GPIO_Pin_14   //HUB75-B:行电源控制信号B (10号引脚)
//C-->单片机PC15           
#define LED_C                          GPIO_Pin_15   //HUB75-B:行电源控制信号C (11号引脚)
//D--》单片机PB9           
#define LED_D                          GPIO_Pin_9   //HUB75-B:行电源控制信号D (12号引脚)
//LED_LAT-->单片机PB8           
#define LED_LAT                        GPIO_Pin_8   //HUB75-B:数据锁存信号  (14号引脚)
//LED_OE-->单片机PB5           
#define LED_OE                         GPIO_Pin_5   //HUB75-B:使能信号   (15号引脚)
//LED_CLEK-->单片机PA5           
#define LED_CLK                        GPIO_Pin_5     //HUB75-B:时钟信号   (13号引脚)

我觉得我这个方法是全网最简单,效率最高的

本来写了几千个字的文章忘记保存全没了,第二次就不想写了,后面再补吧,不知道有没有人看这个,如果有人想要的话,私信我把源码发你。内容后期再补


http://www.ppmy.cn/news/444366.html

相关文章

led点阵屏静态图

话不多说&#xff0c;上代码&#xff0c;前提是你已经知道各行代码的意思。跟着老师的代码走最好&#xff0c;每一行都一样&#xff0c;要不然会有意想不到的错误&#xff0c;小白阶段就不要自己创新代码了。X﹏X #include <REGX52.H> sbit RCKP3^5; //RCLK sbit SCKP3^6…

【Arduino实验11 LED点阵屏显示】

目录 一、实验目的 二、实验设备与环境 三、实验重点 四、实验难点 五、实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一、实验目的 1熟悉8*8点阵屏的原理与功能&#xff1b; 2 掌握数组变量的使用&#xff1b; 3 连接点阵屏显示电路&#x…

MCU-51:LED点阵屏

目录 一、点阵屏介绍1.1 简介1.2 分类 二、点阵屏原理2.1 点阵屏显示原理2.2 74HC595芯片介绍 三、代码演示3.1 静态笑脸3.2 动态Hello! 注意&#xff1a;一定要看 之前我们介绍了控制LED灯亮灭的操作&#xff0c;今天我们要介绍一下控制LED点阵屏亮灭的操作&#xff0c;8*8的L…

6. LED 点阵屏

点阵屏介绍 LED点阵屏由若干个独立的LED组成&#xff0c;LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽车报站器、广告屏以及公告牌等 LED点阵屏分类 按颜色&#xff1a;单色、双色、全彩 按像素&…

[入门教程]详细讲解STM32控制LED点阵屏(HUB75接口)

本文适合初级入门的同学&#xff0c;大佬请绕道。讲解怎么用stm32驱动成品LED点阵屏显示一副七色无灰度的图片&#xff0c;有灰度的图片可以入门后继续研究。 使用软硬件&#xff1a; 软件&#xff1a;Keil5&#xff0c;程序在后面会给出 硬件&#xff1a;STM32F103最小系统、…

51单片机——LED点阵屏

51单片机——LED点阵屏 LED点阵屏LED点阵屏原理74HC595串转并芯片源代码例程一&#xff1a;静态笑脸效果展示 例程二&#xff1a;笑脸->平脸->哭脸效果展示 LED点阵屏 c51的LED点阵屏其实就是一个8*8像素的屏幕&#xff0c;一共有64个发光二极管。如下图 LED点阵屏原理…

LED点阵屏相关知识与介绍

一LED点阵屏介绍&#xff1a; 1LED点阵屏由若干个独立的LED组成,LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字&#xff0c;图片&#xff0c;视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽车报站器&#xff0c;广告屏以及公告牌等。 2LED点阵屏分类&…

meethigher-基于Netty的轻量级Web框架Jooby

Spring-Web的好处是&#xff0c;快速上手、快速成型&#xff0c;且成熟稳定无Bug。 但对于个人而言&#xff0c;这套框架太重了。由此探寻更好的轻量Web框架Jooby&#xff01; 本文源码地址meethigher/jooby-example: 基于Netty的轻量级Web框架Jooby使用示例 一、搭建项目 …