当前位置: 首页 > news >正文

51单片机-驱动LED点阵模块教程

本章概述思维导图:

51单片机驱动LED点阵模块教程

LED点阵简介

LED点阵是由多个发光二极管(LED)按矩阵形式排列组成的显示设备,常见规格包括8×8、16×16、32×32等。在我们日常生活的电器中随处可见。LED点阵实物图如下:

应用场景:

信息显示:广告牌、公告牌、交通标识、电子钟表、计时器(如体育赛事倒计时)。

设备交互:家电温度显示、工业设备状态指示、智能仪表数据可视化。

动态效果:结合传感器实现实时数据更新,或通过滚动显示、动画增强视觉效果。

特殊应用:全彩LED点阵用于舞台灯光、艺术装置,支持PWM调光实现色彩混合。

典型驱动LED点阵模块电路示例:以16×16点阵为列:

        行驱动:两片74HC138级联,生成16路低电平信号选择行。

        列驱动:两片74HC595级联,串行输入转为16路并行输出控制列。

        流程:单片机发送行地址至74HC138,同时通过74HC595输出列数据,逐行扫描刷新显示。

总结:LED点阵通过灵活的矩阵设计和驱动方案,成为信息展示与交互的核心元件,其性能与成本平衡需根据具体需求选择合适规格和控制方式。


LED8*8点阵硬件电路原理图分析

电路原理图分析:

LED8*8点阵一共有16个引脚控制,行(DPa~DPh)引脚由74HC595并行输出脚(QA~QH)控制,列(K1~K8)引脚由STC51单片机P0 I/O端口控制;

74HC595芯片的VCC引脚、GND引脚、OE引脚引出一个编号为J24的座子,这是为了方便驱动74HC595芯片,要使74HC595芯片工作需使跳线帽将OE引脚和GND引脚进行连接;不工作时,需使跳线帽将OE引脚与VCC引脚进行连接;原理:OE使能引脚(低电平有效);

74HC595芯片的SRCLR复位引脚与VCC进行连接;原理:SRCLR是低电平复位,为了防止误触,通常与VCC进行连接;

74HC595芯片的RCLK存储寄存器时钟引脚与MCU的P35引脚进行连接,分析P35引脚为74HC595芯片提供一个存储寄存器的时钟信号;

74HC595芯片SRCLK移位寄存器时钟引脚与MCU的P36引脚进行连接,分析P36引脚为74HC595芯片提供一个移位寄存器的时钟信号;

74HC595芯片的QA~QH为并行输出脚与开发板的8*8点阵LED灯DPa~DPh行引脚进行连接实现阳极控制;

74HC595芯片的QH'为串行输出脚,功能用于级联下一级74HC595芯片实现控制;(本电路不需要使用);

MCU的P0端口(P00~P07)引脚连接8*8点阵LED灯的列引脚实现LED灯阴极控制;

(本章的内容主要是讲解8*8LED点阵灯模块的,但是跟上一章的内容是息息相关的。所有会有大部分知识点重合,小伙伴们就当复习啦!)

驱动8*8LED点阵软件编程设计

驱动8*8LED点阵第一个灯步骤

第一步:实现第一列点亮,需给P0端口写入高低电平控制LED阴极。第一列点亮,其余列不点亮。我们应给P07写入低电平,(P00~P06)写入高电平。十六进制表达方式为:0x7f;

第二步:实现第一行点亮,74HC595需串行输入并行输出控制LED阳极,第一行点亮,其余行不点亮。我们应给DPh写入高电平,(DPa~DPg)写入低电平。十六进制表达方式为:0x80;

第三步:在主函数中将第一步和第二步结合起来实现点亮第一个LED灯操作

代码示例:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit SER=P3^4;        //74HC595串行输入
sbit TRCLK=P3^5;      //74HC595存储寄存器时钟
sbit SRCLK=P3^6;      //74HC595移位寄存器时钟
#define LED_DZ P0     //宏定义LED点阵阴极端口
void HC595_out(u8 temp)//函数封装:74HC595芯片IO口扩展输出
{u8 i=0;for(i=0;i<8;i++){SER=temp>>7;   //取最高位temp<<=1;	   //左移一位SRCLK=0;       //移位时钟为低电平Delay_10us(1); //延时10us(上升沿触发)SRCLK=1;       //移位时钟为高电平,一位数据发送完成Delay_10us(1);}TRCLK=0;           //存储时钟为低电平Delay_10us(1);     //延时:上升沿的过程TRCLK=1;           //存储时钟为高电平,一字节数据传输完成Delay_10us(1);
}
int main()															 
{	LED_DZ=0x00;while(1){LED_DZ=~(0x80);//第一列点亮HC595_out(0x80);//第一行点亮}
}

8*8点阵LED点亮第一个灯效果展示图:


驱动8*8点阵LED灯显示笑脸步骤

第一步:首先我们在取模软件上进行输出内容的取模,步骤为:1、基本操作-新建图像设置8行8列的空白图像;2、参数设置-其它选项-选择纵向取模,不需要字节倒序,确定;3、开始在新建图像中设置要显示的图形,用鼠标单击空白小格就可点亮,双击就可取消点亮;4、取模方式-选择C51方式,就顺利输出点阵取模啦

第二步:将输出点阵取模存放到缓存区数组中,每个元素表示每一列中显示所有行的LED灯的个数。再将每一列点亮的状态存到到另一个缓冲区数组中。在主函数中利用人体视觉暂留(>24ms)实现稳定显示。

代码示例:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
void Delay_10us(u16 us)//微秒延时函数:输入1大概延时时间为10us
{while(us--);
}
void Delay_ms(u16 ms) //毫秒延时函数:输入1大概延时时间为1ms
{u16 i,j;for(i=ms;i>0;i--){for(j=110;j>0;j--){}}
}
sbit SER=P3^4;        //74HC595串行输入
sbit TRCLK=P3^5;      //74HC595存储寄存器时钟
sbit SRCLK=P3^6;      //74HC595移位寄存器时钟
#define LED_DZ P0     //宏定义LED点阵阴极端口void HC595_out(u8 temp)//函数封装:74HC595芯片IO口扩展输出
{u8 i=0;for(i=0;i<8;i++){SER=temp>>7;   //取最高位temp<<=1;	   //左移一位SRCLK=0;       //移位时钟为低电平Delay_10us(1); //延时10us(上升沿触发)SRCLK=1;       //移位时钟为高电平,一位数据发送完成Delay_10us(1);}TRCLK=0;           //存储时钟为低电平Delay_10us(1);     //延时:上升沿的过程TRCLK=1;           //存储时钟为高电平,一字节数据传输完成Delay_10us(1);
}
u8 LED_zl[]={0x70,0x54,0x72,0x02,0x02,0x72,0x54,0x70};//纵向取模:一列中所有行的状态
u8 LED_Zh[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//每一列选中状态
int main()															 
{	while(1){u8 i=0;for(i=0;i<8;i++){HC595_out(LED_zl[i]);LED_DZ=LED_Zh[i];Delay_ms(1);        //延时1ms,等待显示HC595_out(0x00);	  //消隐}}
}

8*8LED点阵笑脸显示效果:

8*8点阵LED灯显示笑脸展示


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

http://www.dtcms.com/a/341098.html

相关文章:

  • SQL-leetcode—3374. 首字母大写 II
  • Docker--安装MySQL、Redis
  • 面试常考的 SQL 窗口函数汇总
  • 【Tech Arch】Apache Pig大数据处理的高效利器
  • 深入理解数据结构:从数组、链表到B树家族
  • 数据结构:利用旋转在AVL树中维持平衡(Inserting in AVL with Rotation)
  • FastAPI初学
  • PyTorch API 1
  • 新能源知识库(81)新能源半实物仿真平台介绍
  • C/C++ Linux系统编程:详解常见的系统调用函数,文件I/O核心:open, close, read, write
  • 【C++】基础:C++11-14-17常用新特性介绍
  • 计算机网络技术-局域网配置(Day.4)
  • 微信小程序授权登录+JWT
  • shell间接引用
  • CVE-2018-12613 漏洞复现
  • 为什么我的UI界面会突然卡顿,失去响应
  • FLASK项目快速构建
  • 用TestComplete打造高效CI/CD测试流程
  • nodejs mongodb基础
  • 【论文阅读】-《SIGN-OPT: A QUERY-EFFICIENT HARD-LABEL ADVERSARIAL ATTACK》
  • Gitea Webhook教程:实现git push后自动部署更新网站 (CI/CD入门)
  • 7.2 Linux:驱动开发——模块机制
  • 7.3 Linux:驱动开发——应用程序和驱动程序的交互
  • imx6ull-驱动开发篇30——Linux 非阻塞IO实验
  • 电商平台商品详情数据爬取教程​
  • JS原型链
  • 第10课_Rust网络编程
  • TrustZone 版的按键点灯程序下载调试 LAT1492
  • 迅为RK3562开发板Android修改uboot logo
  • element UI 和 element plus 在组件上有哪些不同