1、Jiyu 单片机的 LED 显示屏的原理与制作(图 1)网上也有很多关于汉字显示屏的制作原理的材料,本文是本人参考例说 51 单片机(C 语言版)(人民邮电出版社)并在其基础上加以修改制作成功的单个字 16*16LED 显示屏的一些经验总结。本文中的 16*16LED 显示屏是采用 4 块 8*8LED 合并而成的。下图是 4 个 8*8LED 组成的显示屏。(图 2)这里我把点阵 LED 显示屏制作的电路原理分成两个部分来介绍即显示屏电路和显示屏驱动电路。一、 显示屏电路本人用的是共阴极的 8*8 点阵屏,在市场上是比较容易买到,下图是 8*8 点阵屏的实物图。(图 3)8*8 点阵屏的内部
2、电路原理图如图 4 所示,点阵屏有两个类型,一类为共阴极(左),另一类则为共阳极(右),下图给出了两种类型的内部电路原理及相应的管脚图。(图 5)LED 阵列的显示方式是按显示编码的顺序,一行一行地显示。每一行的显示时间大约为 4ms,由于人类的视觉暂留现象,将感觉到8 行 LED 是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。本文采用低电平逐行扫描,高电平输出显示信号。即轮流给行信号输出低电平,在任意时刻只有一行发光二极管是处于可以被点亮的状态 ,其它行都处于熄灭状态。为了方便调试本文把 4 块 8*8 组成的 16*16 的点阵屏的行信号扫描输出管脚和列信
3、号显示输出管脚分别引到显示屏的两边。Protel 原理图如下:(图 6) 如图 6 所示的原理图中的 Si(i=1,2,3,16) 代表行扫描信号输出,Di(i=1,2,3, ,16)代表列显示信号输出。实物电路图的正反面如下:(图 7) 二、 显示屏驱动电路显示屏驱动电路的原理图如下:(图 8)显示屏驱动电路主要由主芯片控制电路、电源电路、控制信号放大电路等组成。1、主芯片控制电路该部分电路主要由 AT89S52 和 74LS154 组成。单片机的 P0和 P2 号控制显示信号的输出,P1 号的低 4 位控制 74LS154 的译码输入,从而控制扫描信号的输出。2、电源电路整个电路的供电由
4、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 列的点阵组成显示,即国标汉字库中的每一个字均由 25
5、6 点阵来表示。我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。事实上这个汉字屏不仅可以显示汉字, 也可以显示在 256 像素范围内的任何图形。用 8 位的 AT89S52 单片机控制, 由于单片机的总线为 8 位,一个字需要拆分为 2 个部分如图 9 所示。本电路把它拆分为左部和右部,左部由 16(行)*8(列)点阵组成, 下部也由 16(行) *8(列)点阵组成。图(9)为了让大家更清楚的理解点阵的扫描过程,在这我们以显示汉字“我”为例,来说明其扫描原理:单片机首先由 P2 口输出显示数据信号给右部分的第一行如图9 所示,即第一行的 P20-P27 口。方向为 P20
6、到 P27 ,显示汉字“我”时,P21 点亮,由左到右排,为 P20 灭,P21 亮, P22 灭,P23 灭 , P24 灭, P25 灭, P26 灭, P27 灭。即二进制 00000010,转换为 16 进制为 0x02。右部分的第一行完成后,继续扫描左半部的第一行,为了接线的方便,我们仍设计成由左往右扫描,即从 P00 向 P07 方向扫描,从上图可以看到,这一行只有 P05、P06 亮,其它灭, 即为00000110,16 进制则为 0x60。然后单片机再次转向右半部第二行,仍为 P21、P23 点亮,为 01010000,即 16 进制 0x0A。这一行完成后继续进行左半部分的第
7、二行扫描,P02、P03、P04 点亮,为二进制 00111000,即 16 进制 0x1C。依照这个方法,继续进行下面的扫描,一共扫描 32 个 8 位,可以得出汉字“我”的扫描代码为:0x02,0x60,0x0A,0x1C,0x12,0x10,0x12,0x10,0x02,0x10,0x7F,0xFF,0x02,0x10,0x12,0x10,0x14,0x70,0x0C,0x1C,0x04,0x13,0x0A,0x10,0x49,0x90,0x50,0x10,0x60,0x14,0x40,0x08由这个原理可以看出, 无论显示何种字体或图像, 都可以用这个方法来分析出它的扫描代码从而显示在
8、屏幕上。不过现在有很多现成的汉字字模生成软件, 我们就不必自己去画表格算代码了。在网上汉字字模生成软件有很多种,本文告别推荐一种汉字字模生成软件,HZDotReader V3.0,我个人认为这个软件的功能相当完美。最主要的一个功能是可以选择汉字编码的取模方式,如下图 10 所示。本例中的“我”字的取模方式为以横向 8 个连续点构成一个字节,最左边的点为字节的最低位, 即 BIT0,最右边的点为BIT7。很少有字模软件可以实现这一功能。(图 10)下面给出一个简单的静态显示“我”字的程序清单:#include#define CCED2 0x0000 /*我 */unsigned char cod
9、e word_zai162 = /*我 CCED2 */0x02,0x60,0x0A,0x1C,0x12,0x10,0x12,0x10,0x02,0x10,0x7F,0xFF,0x02,0x10,0x12,0x10,0x14,0x70,0x0C,0x1C,0x04,0x13,0x0A,0x10,0x49,0x90,0x50,0x10,0x60,0x14,0x40,0x08;void main() char scan,i,j;P0=0;P1=0;P2=0;while(1) scan=0;for(i=0;i16;i+)P1=scan;for(j=0;j50;j+) /显示五十次P2=word_za
10、ii0 ;P0=word_zaii1 ;P0=0;P2=0;scan+;四、 安装与调试把显示屏电路和显示屏驱动电路分别做在两块电路板上,显示屏电路的行扫描信号输出管脚和列显示信号数据输出管脚分别引用两排 16 针的排针引出,排针长的那一头接到电路板的底层,以方便插入驱动电路的插槽中。同样在驱动电路用两排 16 脚的插槽将行扫描信号输出管脚和列显示信号数据输出管脚引出,在画 PCB 时应当注意屏电路 PCB 中两排排针之间的距离要与驱动电路 PCB 中两排插槽之间的距离一样,才能保证能正确地将显示屏电路板排到驱动电路电路板上方。以下为该电路的实物图与 PCB。在画 PCB 时注意双面电路板的做板规则,特别要注意以下 几个方面:双面电路板的过孔比较大,一般在 80mil 以上;