88点阵LED显示屏的原理详细讲解与汉字代码
首先我们看一下 8*8led 显示屏的原理 从图中可以看出,8X8 点阵共需要 64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交 叉点上,当对应的某一列置 1 电平,某一行置 0 电平,则相应的二极管就亮;要实现显示图形或字体,只 需考虑其显示方式。通过编程控制各显示点对应 LED 阳极和阴极端的电平,就可以有效的控制各显示点的 亮灭。例如 要实现一根柱形的亮法, 如图所示, 对应的一列为一根竖柱, 或者对应的一行为一根横柱, 因此实现柱的亮的方法如下所述一根竖柱对应的列置 1,而行则采用扫描的方法来实现。 一根横 柱对应的行置 0,而列则采用扫描的方法来实现 下图是 4 个 8*8LED 组成的显示屏。 学习参考 这里我把点阵 LED 显示屏制作的电路原理分成两个部分来介绍即显示屏电路和显示屏驱动电路。 一、一、 显示屏电路显示屏电路 本人用的是共阴极的 8*8 点阵屏,在市场上是比较容易买到,下图是 8*8 点阵屏的实物图。 点阵屏有两个类型,一类为共阴极(左),另一类则为共阳极(右),下图给出了两种类型的内部电路原 理及相应的管脚图。 学习参考 LED 阵列的显示方式是按显示编码的顺序,一行一行地显示。每一行的显示时间大约为 4ms,由于人类的视 觉暂留现象,将感觉到 8 行 LED 是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长, 将会感觉到闪烁。本文采用低电平逐行扫描,高电平输出显示信号。即轮流给行信号输出低电平,在任意 时刻只有一行发光二极管是处于可以被点亮的状态 ,其它行都处于熄灭状态。 为了方便调试本文把 4 块 8*8 组成的 16*16 的点阵屏的行信号扫描输出管脚和列信号显示输出管脚分别引 到显示屏的两边。 Protel 原理图如下 如图 4 所示的原理图中的 Sii1,2,3,,16 代表行扫描信号输出,Dii1,2,3,,16代表列显示 信号输出。 实物电路图的正反面如下 学习参考 二、二、 显示屏驱动电路显示屏驱动电路 显示屏驱动电路的原理图如下 显示屏驱动电路主要由主芯片控制电路、电源电路、控制信号放大电路等组成。 1、主芯片控制电路 该部分电路主要由 AT89S52 和 74LS154 组成。单片机的 P0 和 P2 号控制显示信号的输出,P1 号的低 4 位控制 74LS154 的译码输入,从而控制扫描信号的输出。 2、电源电路 整个电路的供电由 USB 电源提供,利用我们的电脑主机 USB 接口可以输出5V 电压,方便我们在实验 室调试 3、控制信号放大电路 为提供负载能力,在 P0 和 P2 口接 16 个常用 9013 的 NPN 三极管放大驱动信号。电路中列方向由 p0 口 和 p2 口完成扫描,由于 p0 口没有上拉电阻,因此接一个 1k*8 的排阻上拉。 行方向则由 416 译码器 74LS154 完成扫描,它由 89C51 的 P1.0---P1.3 控制。同样,驱动部分则是 16 个 9015 的三极管完成的。 学习参考 三、三、 程序与软件程序与软件 在 UCDOS 中文宋体字库中,每一个字由 16 行 16 列的点阵组成显示,即国标汉字库中的每一个字均由 256 点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这 个汉字屏不仅可以显示汉字, 也可以显示在 256 像素范围内的任何图形。用 8 位的 AT89S52 单片机控制, 由于单片机的总线为 8 位,一个字需要拆分为 2 个部分如图 9 所示。本电路把它拆分为左部和右部,左部 由 16(行)*8(列)点阵组成, 下部也由 16(行)*8(列)点阵组成。 学习参考 为了让大家更清楚的理解点阵的扫描过程,在这我们以显示汉字“我”为例,来说明其扫描原理 单片机首先由 P2 口输出显示数据信号给右部分的第一行如图 9 所示,即第一行的 P20---P27 口。方向 为 P20 到 P27 ,显示汉字“我”时,P21 点亮,由左到右排,为 P20 灭,P21 亮, P22 灭,P23 灭, P24 灭, P25 灭, P26 灭, P27 灭。即二进制 00000010,转换为 16 进制为 0 x02。 右部分的第一行完成后,继续扫描左半部的第一行,为了接线的方便,我们仍设计成由左往右扫描, 即从 P00 向 P07 方向扫描,从上图可以看到,这一行只有P05、P06 亮,其它灭, 即为 00000110,16 进制 则为 0 x60。然后单片机再次转向右半部第二行,仍为 P21、P23 点亮,为 01010000,即 16 进制 0 x0A。这 一行完成后继续进行左半部分的第二行扫描,P02、P03、P04 点亮,为二进制 00111000,即 16 进制 0 x1C。 依照这个方法,继续进行下面的扫描,一共扫描 32 个 8 位,可以得出汉字“我”的扫描代码为 0 x02,0 x60,0 x0A,0 x1C,0 x12,0 x10,0 x12,0 x10, 0 x02,0 x10,0 x7F,0 xFF,0 x02,0 x10,0 x12,0 x10, 0 x14,0 x70,0 x0C,0 x1C,0 x04,0 x13,0 x0A,0 x10, 0 x49,0 x90,0 x50,0 x10,0 x60,0 x14,0 x40,0 x08 由这个原理可以看出, 无论显示何种字体或图像, 都可以用这个方法来分析出它的扫描代码从而显 示在屏幕上。 不过现在有很多现成的汉字字模生成软件, 我们就不必自己去画表格算代码了。 在网上汉字字模生成软件有很多种,本例中的“我” 字的取模方式为以横向 8 个连续点构成一个字节, 最左边的点为字节的最低位,即 BIT0,最右边的点为 BIT7。很少有字模软件可以实现这一功能。 下面给出一个简单的静态显示“我”字的程序清单 include defineCCED20 x0000/*我*/ unsigned char code word_zai[16][2] {/*我 CCED2 */ 0 x02,0 x60,0 x0A,0 x1C,0 x12,0 x10,0 x12,0 x10, 0 x02,0 x10,0 x7F,0 xFF,0 x02,0 x10,0 x12,0 x10, 0 x14,0 x70,0 x0C,0 x1C,0 x04,0 x13,0 x0A,0 x10, 0 x49,0 x90,0 x50,0 x10,0 x60,0 x14,0 x40,0 x08}; void main {char scan,i,j; P00;P10;P20; while1 { scan0; fori0;i16;i 学习参考 { P1scan; forj0;j50;j //显示五十次 { P2word_zai[i][0] ; P0word_zai[i][1]; } P00;P20; scan; } } } 四、四、 安装与调试安装与调试 把显示屏电路和显示屏驱动电路分别做在两块电路板上,显示屏电路的行扫描信号输出管脚和列显示 信号数据输出管脚分别引用两排 16 针的排针引出,排针长的那一头接到电路板的底层,以方便插入驱动电 路的插槽中