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

这篇具有很好参考价值的文章主要介绍了一文教你玩LED点阵屏32*64/64*64----基于STM32。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以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行。如果是双色屏,他的数量会翻倍。

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

HUB75-B接口

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

//定义一个数组存放取模后的数据
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状态:0000
				 GPIO_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状态:0001
				 GPIO_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状态:0010
				 GPIO_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状态:0011
				 GPIO_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状态:0100
			
				 GPIO_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状态:0101
				 GPIO_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状态:0110
				 GPIO_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状态:0111
				 GPIO_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状态:1000
				 GPIO_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状态:1001
				 GPIO_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状态:1010
				 GPIO_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状态:1011
				 GPIO_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状态:1100
				 GPIO_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状态:1101
				 GPIO_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状态:1110
				 GPIO_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状态:1111
				 GPIO_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号引脚)

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

本来写了几千个字的文章忘记保存全没了,第二次就不想写了,后面再补吧,不知道有没有人看这个,如果有人想要的话,私信我把源码发你。内容后期再补文章来源地址https://www.toymoban.com/news/detail-452183.html

到了这里,关于一文教你玩LED点阵屏32*64/64*64----基于STM32的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)

    单片机设计:基于stm32蓝牙音响(mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app) 一、主要功能: 1.手机app播放内存卡的音乐、同时点阵屏随音乐进行跳动 2.0LED、手机app显示当前音量以及当前状态 3.手机app远程调节音量阈值,可以切换上一首、下一首,音乐播放结束后自动下一首      当

    2024年02月10日
    浏览(73)
  • 【雕爷学编程】Arduino动手做(99)---8X32 LED点阵屏模块2

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)

    2024年02月15日
    浏览(62)
  • 基于STM32的android蓝牙控制LED灯,代码开源!!!

    使用STM32控制LED灯很简单,这次将通过android应用,连接对应的蓝牙模块,进行数据传输,以此来达到手机控制开发板LED的亮灭,颜色切换以及亮度调节。 (1)单片机采用:STM32F103RCT6或者F1其他系列单片机 (2)通信方式:采用蓝牙通信,某宝上常见的HC-05等等 (3)开发软件

    2024年02月11日
    浏览(35)
  • 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

    最近在学STM32,基本的学完了,想学几个模块来巩固一下知识,就想到了蓝牙模块。玩啥好难过有很多博客教怎么连的,但自己看起来还是有点糊涂。模块的原理和知识点我就不讲解了,这里我主要 手把手 记录一下我是如何对蓝牙模块进行学习和使用的。 所使用的资料和工

    2024年02月02日
    浏览(86)
  • 毕业设计 基于51单片机控制LED点阵显示器的设计

    序 🔥 毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的

    2024年02月02日
    浏览(72)
  • 单片机设计:基于stm32智能语音识别蓝牙音响(ld3320语音识别模块+mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app)

    单片机设计:基于stm32智能语音识别蓝牙音响(ld3320语音识别模块+mp3模块+喇叭+点阵屏+OLED+蓝牙+手机app) 一、主要功能: 1.手机app播放内存卡的音乐、同时点阵屏随音乐进行跳动 2.0LED、手机app显示当前音量以及当前状态 3.手机app远程调节音量阈值,可以切换上一首、下一首,音乐

    2024年02月07日
    浏览(58)
  • STM32--基于固件库(Library Faction)的led灯点亮

    目录  一、STM32芯片的简单介绍  二、基于固件库(Library Faction)的led灯点亮         这是一个学习stm32的开端,我们由简入难,之前学过C51/52或是其他型号的一般都是从led开始,也就是简单的输入输出端口的应用。( 想学的一定要跟我一起坚持下去,不要半途而废 )  

    2024年02月09日
    浏览(38)
  • 基于AT89C51单片机的LED点阵显示屏设计

    点击链接获取Keil源码与Project Backups仿真图: [[https://download.csdn.net/download/qq_64505944/88637464?spm=1001.2014.3001.5503]] **[源码获取] B 源码+仿真图+课程设计+50 工程实训(三)课题设计 LED点阵显示屏设计 LED点阵显示屏通过编程控制可以显示中英文字符、图形及视频动态图形,广泛用于指

    2024年02月02日
    浏览(58)
  • 【蓝桥杯】一文解决蓝桥杯嵌入式开发板(STM32G431RBT6)LCD与LED显示冲突问题,并讲述LCD翻转显示

       不知道大家在开发过程中有没有碰到: LCD与LED同时(宏观上的同时)点亮时产生的LED状态紊乱问题 。 LCD与LED显示冲突现象图   为了解决上述问题,小编给出了以下三种解决方案: 方案一:    每次LCD显示完成数据后,关闭所有LED一次。   但是 使用该方法比较麻烦,

    2023年04月12日
    浏览(51)
  • 基于STM32CubeMX和keil采用STM32F407的基本定时器中断实现LED闪烁

    定时器有三种,基本定时器,通用定时器,以及高级定时器。 这篇博客以最简单的基本定时器为例,实现LED的闪烁。 后面两种定时器的用法后面再写。 实现功能: TIM6控制LED每隔0.5s变一次状态。 TIM7控制LED1常量2s后熄灭。 因为都是用到LED,所以和上一篇基于STM32CubeMX与keil采

    2024年02月04日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包