LED点阵显示原理(取字模软件+Keil+Proteus)

2023-11-07 00:12

本文主要是介绍LED点阵显示原理(取字模软件+Keil+Proteus),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

写这个的时候我还是有点生气的,因为发现完全按照书上面的步骤来,结果发现不理想,后面还是自己调试才解决了。-_-说多了都是泪,直接进入正文。

软件的操作还是参考我之前的博客。

LED数码管的静态显示与动态显示(Keil+Proteus)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_64066303/article/details/134101256?spm=1001.2014.3001.5501

原理

LED点阵屏_百度百科 (baidu.com)icon-default.png?t=N7T8https://baike.baidu.com/item/LED%E7%82%B9%E9%98%B5%E5%B1%8F/7374324MCU-51:LED点阵屏_单片机led点阵显示原理_Hello xiǎo lěi的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_27928443/article/details/128468090        LED点阵显示原理是利用发光二极管(LED)组成点阵,通过控制每个LED灯的点亮和熄灭,从而实现对文字、数字、图形等信息的显示,如在很短时间内依次点亮很多个发光二极管,LED点阵就可显示一个稳定字符、数字或其他图形。控制LED点阵显示器显示,实质就是控制加到行线和列线上编码,控制点亮某些发光二极管(点),从而显示出由不同发光点组成的各种字符。。LED点阵显示屏通常由显示模块、控制系统及电源系统组成,具有制作简单、安装方便等优点,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。在实际应用中,可以根据需要选择适合的控制方式,并通过合理的电路设计和编程来实现LED点阵的控制。

16*16点阵码

首先是点阵码部分,我相信应该没有人会傻傻的自己去画吧,而且这样还容易出错,这里可以用取字模的软件来实现。

PCtoLCD2002

 封(0) 奚(1) 泽(2) 优(3)

DB 02H,02H,12H,23H,12H,22H,12H,22H,FEH,FCH,12H,24H,12H,24H,12H,24H;
DB 00H,00H,09H,00H,08H,C2H,08H,01H,FFH,FEH,08H,00H,08H,00H,00H,00H;"封",0

DB 00H,01H,40H,11H,60H,91H,54H,92H,4DH,92H,55H,94H,66H,98H,56H,F0H;
DB 84H,98H,88H,94H,82H,92H,91H,92H,A0H,D1H,80H,11H,00H,01H,00H,00H;"奚",1

DB 08H,20H,06H,20H,40H,7EH,31H,80H,00H,00H,41H,08H,61H,48H,52H,48H;
DB 4AH,48H,45H,FFH,4AH,48H,52H,48H,61H,48H,01H,08H,01H,00H,00H,00H;"泽",2

DB 00H,80H,01H,00H,06H,00H,1FH,FFH,E0H,00H,08H,01H,08H,06H,08H,38H;
DB FFH,C0H,08H,00H,0FH,FCH,88H,02H,68H,02H,08H,02H,08H,1EH,00H,00H;"优",3

 字模提取 V2.1

实验前先进行初始化设置:

 勾选字节倒序

接下来就可以字模提取了 

/*--  文字:  封  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x7E,0x10,0x10,0xFF,0x10,0x00,0x12,
0x10,0x14,0x10,0x14,0xFE,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x0F,0x14,0x02,0x08,

/*--  文字:  奚  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x3F,0xFE,0x00,0x44,0x10,0xA8,0x08,0x10,0x02,0xF8,0x01,0xC0,0x04,0x30,0x08,
0xFC,0x1F,0x80,0x10,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70,

/*--  文字:  泽  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x88,0x08,0x01,0x05,0x02,0x02,0x82,0x0D,0x68,0x72,
0x08,0x02,0xC4,0x1F,0x07,0x02,0x04,0x02,0xE4,0x3F,0x04,0x02,0x04,0x02,0x00,0x02,

/*--  文字:  优  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x09,0x10,0x11,0x10,0x11,0x08,0x01,0xE8,0x7F,0x0C,0x05,0x0C,0x05,0x0A,0x05,
0x09,0x05,0x08,0x05,0x88,0x04,0x88,0x44,0x88,0x44,0x48,0x44,0x48,0x78,0x28,0x00,

11月6日补:(百度网盘链接)

链接:https://pan.baidu.com/s/1RkMxhWm7Tku89T9_ZtwcrA 
提取码:0205 

解压之后这里有两个软件,大家根据自己的需要选择。

Keil

程序就是和书上基本上一致,就是注释那两行代码即可。他的原理就是逐行的进行打印,然后通过十六进制数打印没一行,因为他的速度快,所以就和一起打印一样。

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int 
#define out0 P0
#define out1 P1
#define out2 P2void delay(uint y) //延时函数
{uchar x=250;for(;y>0;y--){while(--x);x=100;}
}uchar code string[]=
{
/*--  文字:  封  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x10,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x7E,0x10,0x10,0xFF,0x10,0x00,0x12,
0x10,0x14,0x10,0x14,0xFE,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x0F,0x14,0x02,0x08,/*--  文字:  奚  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x3F,0xFE,0x00,0x44,0x10,0xA8,0x08,0x10,0x02,0xF8,0x01,0xC0,0x04,0x30,0x08,
0xFC,0x1F,0x80,0x10,0x80,0x00,0xFE,0x3F,0x40,0x01,0x20,0x02,0x18,0x0C,0x07,0x70,/*--  文字:  泽  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xE4,0x1F,0x48,0x10,0x88,0x08,0x01,0x05,0x02,0x02,0x82,0x0D,0x68,0x72,
0x08,0x02,0xC4,0x1F,0x07,0x02,0x04,0x02,0xE4,0x3F,0x04,0x02,0x04,0x02,0x00,0x02,/*--  文字:  优  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x09,0x10,0x11,0x10,0x11,0x08,0x01,0xE8,0x7F,0x0C,0x05,0x0C,0x05,0x0A,0x05,
0x09,0x05,0x08,0x05,0x88,0x04,0x88,0x44,0x88,0x44,0x48,0x44,0x48,0x78,0x28,0x00,
}  ;
void main()
{	uchar i,j,n;while(1){for(j=0;j<4;j++)	//共显示4个汉字{for(n=0;n<40;n++)//每个汉字整屏扫描40次{for(i=0;i<15;i++)//逐行扫描16行{out1=i%15;//输出行码out0=string[i*2+j*32];//输出列码C0~C7out2=string[i*2+1+j*32];//输出列码C8~C15delay(4);//每一行之间的延时//out0=0xff;//out2=0xff;}}}}
}

Proteus

对书上面的程序进行了修改,图中16*16的LED点阵是通过4个8*8的点阵来实现的(这样的点阵是需要自己绘制的,不然引脚的位置不对)。

这个我反犯的两个错误一个就是74HC154的接地符弄错了,导致他每次的打印都是一列一列的。

第二个就是反相器,我就是按照书上的弄,但是不知道他要干嘛,打印出来的结果感觉是一个字,但是又不对,想着是不是弄反了,就将反相器去掉了。

先展示如果只用自带的器件来实现。

所需元器件

元件名称Proteus关键字
51单片机AT89C51
4-16译码器74HC154
蓝色的8*8LED点阵MATRIX-8X8-BLUE
绿色的8*8LED点阵MATRIX-8X8-GREEN
橘色的8*8LED点阵MATRIX-8X8-ORANGE
红色的8*8LED点阵MATRIX-8X8-RED
排阻PESPACK-8
电源POWER
接地GROUND

这个主要需要注意的就是引脚的连接。(别问怎么知道的,问就是试出来的,按照书上面的连接肯定四块大的方向不会错,就是可能会有行列连反的现象出现,把一个字拆成四块,然后再看四个部分哪里有问题,有问题就把行列反过来连接即可)

颜色可以统一一个颜色,我是看刚好有四种颜色就分别表示四个模块。

效果图

拓展

下面是用老师给的元件库来实现的。

 有反相器的效果图。

无反相器的效果图

 如果你可以自己绘制一个16*16的效果图就更加好。

参考链接

 Proteus仿真实验----8*8点阵(点扫描实验)_matrix-8x8_DH小雷家的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_46510976/article/details/127950291【Proteus】16乘16点阵滚动播放 - 知乎 (zhihu.com)icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/138580722【精选】Proteus8.6中16x16LED点阵制作教程_16*16点阵_TiAmoLH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/yz20200414/article/details/116958385proteus仿真51单片机驱动16x16点阵显示自己名字和符号_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV18G4y1b79A/?spm_id_from=333.337.search-card.all.click&vd_source=7c3bfbf39d037fe80c97234396acc524

总结

看了几天努力还是没有白费,就一直按照书上面对,结果也没有发现什么问题,改了代码改原理图,结果一模一样的反而是有问题的,所以以后大家还是需要自己思考去完成。

这篇关于LED点阵显示原理(取字模软件+Keil+Proteus)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/359944

相关文章

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各