【普中 51-Ai8051 开发攻略】-- 第 11 章 LED 点阵实验-点亮一个点

张开发
2026/4/16 22:14:25 15 分钟阅读

分享文章

【普中 51-Ai8051 开发攻略】-- 第 11 章 LED 点阵实验-点亮一个点
(1)实验平台普中 51-Ai8051 开发板https://item.taobao.com/item.htm?abbucket17id1026052331067(2)资料下载 普中科技-各型号产品资料下载链接LED 点阵屏广泛应用于各种公共场合 如电子广告牌、 时钟、 计数器、 车站、码头、 机场、 商场等地方。 它不仅能够提供清晰的视觉信息 还能提升场所的档次和吸引力。 本章我们实现在 8*8LED 点阵屏上点亮一个点 为后面实现字符图形显示做好铺垫。 本章分为如下几部分内容11.1 实验介绍11.1.1 实验简介11.1.1.1 LED 点阵屏简介11.1.1.2 74HC595 芯片介绍11.1.2 实验目的11.2 硬件设计11.3 软件设计11.3.1 创建和配置工程11.3.1.1 GPIO 配置11.3.1.2 生成工程11.3.2 添加用户驱动代码11.3.2.1 leddz.h 文件11.3.2.2 leddz.c 文件1.3.2.2 main.c 文件11.4 实验现象11.1 实验介绍11.1.1 实验简介11.1.1.1 LED 点阵屏简介LED 点阵屏是由许多小 LED 灯组成的点阵阵列 通过控制 LED 灯的亮灭来实现图像和字符的显示。 LED 是一种半导体器件 当电流通过时会产生光 而 LED点阵屏正是利用这一特性 将大量的 LED 灯排列成阵列矩阵 每个 LED 灯代表一个像素或一个点 从而构成完整的显示画面。LED 点阵屏有多种分类方式 根据颜色可分为单色、 双色和全彩 根据点阵大小 常见的有 4× 4、 4× 8、 5× 7、 5× 8、 8× 8、 16× 16、 24× 24、 40× 40 等多种规格。 此外 还可以根据图素的数目分为单原色、 双原色、 三原色等 不同颜色组合可以显示更多样化的内容。 本实验采用的是 8*8 单色点阵屏。LED 点阵屏的显示原理基于行列扫描方式。 整个屏幕被划分为若干行和列每个 LED 灯与行和列的交汇处连接。 通过控制行和列的电压 可以选择性地点亮某个 LED 灯。 按照一定的频率快速扫描所有的行和列 使得人眼感知到连续的图像。 这种动态扫描驱动方式不仅简化了电路结构 还降低了功耗。8*8LED 点阵实物如下所示通常应用较多的是 8*8 点阵 然后使用多个 8*8 点阵可组成不同分辨率的 LED点阵显示屏 比如 16*16 点阵可以使用 4 个 8*8 点阵构成。 因此理解了 8*8LED点阵的工作原理 其他分辨率的 LED 点阵显示屏都是一样的。 这里以 8*8LED 点阵来做介绍。 其内部结构图如下所示8*8 点阵共由 64 个发光二极管组成 且每个发光二极管是放置在行线和列线的交叉点上 当对应的某一行置 1 电平 某一列置 0 电平 则相应的二极管就亮如要将第一个点点亮 则 1 脚接高电平 a 脚接低电平 则第一个点就亮了 如果要将第一行点亮 则第 1 脚要接高电平 而a、 b、 c、 d、 e、 f、 g、 h 这些引脚接低电平 那么第一行就会点亮 如要将第一列点亮 则第 a 脚接低电平而1、 2、 3、 4、 5、 6、 7、 8 接高电平 那么第一列就会点亮。 由此可见 LED点阵的使用也是非常简单的。11.1.1.2 74HC595 芯片介绍要驱动 8*8LED 点阵 直接使用单片机 IO 是不行的 开发板上使用的是74HC595D 芯片作为点阵行驱动控制 因此需要了解 74HC595D 芯片的使用方法。74HC595 是一个 8 位串行输入、 并行输出的位移缓存器 其中并行输出为三态输出即高电平、 低电平和高阻抗 。 芯片管脚及功能说明如下上面两张都是 74HC595 芯片管脚图 细心的朋友就会发现左侧的 1 脚是 QB而右侧芯片的 1 脚是 Q1 左侧芯片的 11 脚是 SCK 而右侧芯片的 11 脚是 SH_CP还有很多其他管脚不一样 其实这个都没有什么 每个人在绘制芯片管脚图时命名可能不一样而已 看一个芯片重点是管脚功能。15 和 1 到 7 脚 QA--QH 并行数据输出9 脚 QH 非 串行数据输出10 脚 SCLK 非 MR 低电平复位引脚11 脚 SCK SHCP 移位寄存器时钟输入12 脚 RCK STCP 存储寄存器时钟输入13 脚 G 非 OE 输出有效14 脚 SER DS 串行数据输入74HC595 是具有 8 位移位寄存器和一个存储器 三态输出功能。 移位寄存器和存储器是单独的时钟。 数据在 SCK 的上升沿输入 在 RCK 的上升沿进入到存储器中。 如果两个时钟连在一起 则移位寄存器总是比存储器早一个脉冲。 移位寄存器有一个串行输入DS 和一个串行输出Q7 非 和一个异步的低电平复位 存储寄存器有一个并行 8 位的 具有三态的总线输出 当 MR 为高电平 OE 为低电平时 数据在 SHCP 上升沿进入移位寄存器 在 STCP 上升沿输出到并行端口。有关 74HC595 芯片的更多详细介绍 大家可以在资料“\6--芯片资料\开发板芯片数据手册” 内查看。11.1.2 实验目的点亮 LED 点阵屏左上角点。11.2 硬件设计本实验使用到硬件资源如下1 GPIO2 LED 点阵模块相关电路在前面章节已经介绍过 此处省略。 LED 点阵模块与单片机连接如下所示从图中可以看到 8*8LED 点阵的行由 74HC595 芯片控制 列由 P0 口控制 74HC595 的并行输出口 QA-QH 控制点阵的第 1-8 行 P0 输出口 P07-P00 控制点阵的第 1-8 列 74HC595 的控制引脚与单片机的 P45、 P46、 P36 连接 通过串口输入引脚发送 1 个字节数据即可控制 595 芯片输出 QA 对应字节低位 QH 对应字节高位。 J1 端子用于控制 595 芯片输出使能 当 1/2 脚短接时 595 输出关闭当 2/3 短接时 595 输出使能。11.3 软件设计要在点阵屏上点亮左上角 LED 可将对应位置的 LED 灯点亮 其余熄灭 这样就能得到行列传输数据 如下图所示11.3.1 创建和配置工程按照前面章节内容创建一份新工程 并命名为 07-leddz_dot 如下图所示11.3.1.1 GPIO 配置使能端口和时钟 LED 点阵对应 IO 设置为推挽输出模式 使能上拉电阻 如下图所示11.3.1.2 生成工程配置完成后 按下代码生成按钮 自动创建工程 系统开始生成初始化代码。生成工程文件目录如下图所示在工程文件夹内新建一个 APP 文件夹 用于存储用户编写的外设驱动 方便后期工程管理和程序移植。 在 APP 文件夹下新建 leddz 文件夹 并在该文件夹内新建 leddz.c 和 leddz.h 文件 用于保存点阵相关驱动。 如下所示然后在导出的工程中添加 APP 组 并将 leddz.导入到工程组内 最后添加头文件路径 否则编译将报错。 如下添加完以后 如下图所示11.3.2 添加用户驱动代码11.3.2.1 leddz.h 文件#ifndef _leddz_H #define _leddz_H #include config.h //管脚定义 #define RCLK P46 #define SRCLK P36 #define SER P45 #define LEDDZ_COL_PORT P0 //函数声明 void LEDDZ_Row_Write_data(u8 dat); void LEDDZ_COL_Write_Data(u8 dat); #endif11.3.2.2 leddz.c 文件#include leddz.h /******************************************************************************* * 函 数 名 : LEDDZ_Row_Write_data * 函数功能 : 向点阵行写入一个字节的数据 * 输 入 : dat数据字节高位对应第一行 * 输 出 : 无 *******************************************************************************/ void LEDDZ_Row_Write_data(u8 dat) { u8 i0; for(i0;i8;i)//循环8次即可将一个字节写入寄存器中 { SERdat7;//优先传输一个字节中的高位 dat1;//将低位移动到高位 SRCLK0; delay_us(1); SRCLK1; delay_us(1);//移位寄存器时钟上升沿将端口数据送入寄存器中 } RCLK0; delay_us(1); RCLK1;//存储寄存器时钟上升沿将前面写入到寄存器的数据输出 } //点阵列写入数据 //data数据高位对应第一列最低位对应第8列 void LEDDZ_COL_Write_Data(u8 dat) { LEDDZ_COL_PORTdat; }1.3.2.2 main.c 文件//AICUBE_USER_HEADER_REMARK_BEGIN /* 深圳市普中科技有限公司PRECHIN 普中 * 在线视频https://space.bilibili.com/2146492485/video 官网www.prechin.cn * 实验名称LED点阵实验(点亮一个点) * * 接线说明参考电路图 * * 实验现象程序下载成功后LED点阵左上角第一个灯点亮 * * 注意事项GND和OE短接 * */ //AICUBE_USER_HEADER_REMARK_END #include config.h //默认已包含stdio.h、intrins.h、ai_usb.h等头文件 //AICUBE_USER_INCLUDE_BEGIN // 在此添加用户头文件包含 #include leddz.h //AICUBE_USER_INCLUDE_END //AICUBE_USER_GLOBAL_DEFINE_BEGIN // 在此添加用户全局变量定义、用户宏定义以及函数声明 //AICUBE_USER_GLOBAL_DEFINE_END //////////////////////////////////////// // 项目主函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void main(void) { //AICUBE_USER_MAIN_INITIAL_BEGIN // 在此添加用户主函数初始化代码 //AICUBE_USER_MAIN_INITIAL_END SYS_Init(); //AICUBE_USER_MAIN_CODE_BEGIN // 在此添加主函数中运行一次的用户代码 //将LED点阵左边第1列设置为0即LED阴极为低电平其余列为1即高电平 LEDDZ_COL_Write_Data(0x7f); //将LED点阵上边第1行设置为1即LED阳极为高电平其余行为0即低电平 LEDDZ_Row_Write_data(0x80); //AICUBE_USER_MAIN_CODE_END while (1) { //AICUBE_USER_MAIN_LOOP_BEGIN // 在此添加主函数中用户主循环代码 //AICUBE_USER_MAIN_LOOP_END } }主函数实现功能主要初始化系统时钟及相应外设端口 调用LEDDZ_COL_Write_Data 函数控制点阵列 字节的高位对应第一列 调用LEDDZ_Row_Write_data 函数控制点阵行 字节的高位对应第一行。 因此点阵左上角灯点亮。11.4 实验现象将程序编译下载到目标板运行 实验现象 LED 点阵左上角第一个灯点亮。如下所示注意 点阵左侧黄色端子跳线帽需短接到左侧。

更多文章