【普中 51-Ai8051 开发攻略】-- 第 12 章 LED 点阵实验-显示字符

(1)实验平台:

普中 51-Ai8051 开发板https://item.taobao.com/item.htm?abbucket=17&id=1026052331067(2)资料下载 :普中科技-各型号产品资料下载链接


LED 点阵屏广泛应用于各种公共场合, 如电子广告牌、 时钟、 计数器、 车站、码头、 机场、 商场等地方。 它不仅能够提供清晰的视觉信息, 还能提升场所的档次和吸引力。 本章我们实现在 8*8LED 点阵屏上显示字符 0。 本章分为如下几部分内容:

[12.1 实验介绍](#12.1 实验介绍)

[12.1.1 实验简介](#12.1.1 实验简介)

[12.1.1.1 LED 点阵屏动态扫描原理](#12.1.1.1 LED 点阵屏动态扫描原理)

[12.1.1.2 字符汉字显示原理](#12.1.1.2 字符汉字显示原理)

[12.1.2 实验目的](#12.1.2 实验目的)

[12.2 硬件设计](#12.2 硬件设计)

[12.3 软件设计](#12.3 软件设计)

[12.3.1 创建和配置工程](#12.3.1 创建和配置工程)

[12.3.1.1 GPIO 配置](#12.3.1.1 GPIO 配置)

[12.3.1.2 生成工程](#12.3.1.2 生成工程)

[12.3.2 添加用户驱动代码](#12.3.2 添加用户驱动代码)

[12.3.2.1 main.c 文件](#12.3.2.1 main.c 文件)

[12.4 实验现象](#12.4 实验现象)


12.1 实验介绍

12.1.1 实验简介

12.1.1.1 LED 点阵屏动态扫描原理

行列划分: 整个 LED 点阵屏被划分为若干行和列, 每个 LED 灯与行和列的交汇处连接。

行选通: 驱动 IC 按照一定的顺序, 逐个选通 LED 像素所在的行。 例如, 在逐行动态扫描中, 首先选通第一行的像素, 然后迅速切换到下一行, 以此类推。

列数据发送: 在行被选通的同时, 向各列送出表示图形或文字信息的脉冲信号。 这些信号决定了该行中每个 LED 灯的亮灭状态。

时间分片: 每个被选通的行只保持短暂的时间, 然后快速切换到下一个行。这个过程非常迅速, 通常在肉眼无法察觉的范围内完成, 使得所有像素看起来都是同时亮起的。

刷新率: 扫描速度非常快, 通常达到 60Hz 或以上的刷新率, 以避免肉眼可见的闪烁。

12.1.1.2 字符汉字显示原理

要在 LED 点阵屏上显示字符 0, 可将对应位置的 LED 灯点亮, 其余熄灭, 这样就能得到每列扫描时, 对应行显示的数据, 如下图所示:

cpp 复制代码
u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//LED 点阵显示数字 0 的行数据
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED 点阵显示数字 0 的列数据

数组 gled_col 存放的是从左到右每列扫描时对应的列数据。

数组 gled_row 存放的是从左到右每列扫描时对应的行数据。

为了方便更改所显示的内容, 可借助 PCtoLCD2002.exe 取模软件(资料目录"\5--开发工具\3-常用辅助开发软件\PCtoLCD2002 完美版\PCtoLCD2002.exe" ) , 操作如下所示:

12.1.2 实验目的

在 LED 点阵屏上显示字符 0。

12.2 硬件设计

本实验使用到硬件资源如下:

(1) GPIO

(2) LED 点阵模块

相关电路在前面章节已经介绍过, 此处省略。

12.3 软件设计

12.3.1 创建和配置工程

按照前面章节内容创建一份新工程, 并命名为 08-leddz_char, 如下图所示:

12.3.1.1 GPIO 配置

使能端口和时钟, LED 点阵对应 IO 设置为推挽输出模式, 使能上拉电阻; 如下图所示:

12.3.1.2 生成工程

配置完成后, 按下代码生成按钮, 自动创建工程, 系统开始生成初始化代码。生成工程文件目录如下图所示:

在工程文件夹内新建一个 APP 文件夹, 用于存储用户编写的外设驱动, 方便后期工程管理和程序移植。 在 APP 文件夹下新建 leddz 文件夹, 并在该文件夹内新建 leddz.c 和 leddz.h 文件, 用于保存点阵相关驱动。 可直接从前面工程内复制即可。 如下所示:

然后在导出的工程中添加 APP 组, 并将 leddz.导入到工程组内, 最后添加头文件路径, 否则编译将报错。 如下:

添加完以后, 如下图所示:

12.3.2 添加用户驱动代码

leddz.c 和 leddz.h 文件内容不变, 可参照点亮一个点代码。

12.3.2.1 main.c 文件

cpp 复制代码
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
/* 深圳市普中科技有限公司(PRECHIN 普中)
 * 在线视频:https://space.bilibili.com/2146492485/video
       官网:www.prechin.cn

 * 实验名称:LED点阵实验(显示字符)
 * 
 * 接线说明:参考电路图
 * 
 * 实验现象:程序下载成功后,LED点阵显示数字0
 * 
 * 注意事项: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>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明 
u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//LED点阵显示数字0的行数据
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED点阵显示数字0的列数据
//<<AICUBE_USER_GLOBAL_DEFINE_END>>



////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码 
	u8 j=0;
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码  
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
        //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
        // 在此添加主函数中用户主循环代码
		for(j=0;j<8;j++)//循环8次扫描8行、列
		{
			LEDDZ_COL_Write_Data(gled_col[j]);//传送列选数据
			LEDDZ_Row_Write_data(gled_row[j]);//传送行选数据
			delay_ms(1);//延时一段时间,等待显示稳定
			LEDDZ_Row_Write_data(0x00);//消影	
		}	
        //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}

主函数实现功能主要初始化系统时钟及相应外设端口, while 循环内通过 for循环 8 次, 对 8*8LED 点阵进行动态扫描, 每列扫描时写入对应行的数据。

12.4 实验现象

将程序编译下载到目标板运行, 实验现象: LED 点阵屏上显示字符 0。 如下所示:

相关推荐
雅斯驰11 小时前
AES-128加密+滚动码认证:ATA5702W如何防御中继攻击与信号重放
运维·单片机·嵌入式硬件·物联网·自动化
iCxhust12 小时前
微机原理课程设计大综合---计数器
汇编·单片机·嵌入式硬件·课程设计·微机原理
搁浅小泽13 小时前
PCBA焊点的检测方法
单片机·嵌入式硬件·可靠性工程师
Deitymoon15 小时前
STM32——PWM控制舵机
stm32·单片机·嵌入式硬件
菜鸟的日志16 小时前
【嵌入系统】嵌入式学习笔记(一)
windows·笔记·嵌入式硬件·学习·ubuntu·操作系统
电子科技圈17 小时前
四大“门派”围攻边缘及端侧AI SoC市场“光明顶”
人工智能·嵌入式硬件·mcu·物联网·网络安全·音视频·语音识别
CHINA红旗下17 小时前
串口的使用
stm32·单片机·嵌入式硬件
踏着七彩祥云的小丑18 小时前
嵌入式测试学习第2天:欧姆定律 + 功率计算 + 电路单位换算
单片机·嵌入式硬件
BT-BOX18 小时前
Multisim 14.3 安装与汉化指南(附下载链接)
嵌入式硬件·物联网
不断提高18 小时前
别再写 while(1) 死循环了,嵌入式开发该换个活法
c语言·嵌入式硬件·嵌入式·状态模式