You are on page 1of 19

摘 要

本文研究了基于 P89C51 单片机 LED8×8 点阵显示屏的设计并运用 Proteus


软件进行原理图绘制,运用 Keil 软件进行仿真和调试。主要介绍了 LED8×8 点
显示屏的硬件电路设计、汇编程序设计与调试、Proteus 软件绘制原理图和实物
制作等方面的内容,本显示屏的设计具有体积小、硬件少、电路结构简单及容易
实现等优点。能帮助广大电子爱好者了解汉字的点阵显示原理,认识单片机的基
本结构、工作原理及应用方法,并提高单片机知识技术的运用能力。利用单片机
来设计的系统,既能实现系统所需的功能,也可以满足计数的准确性、迅速性,
并且电路简单、操作简单、通用性强。
目录
1 绪论.............................................................. 1
1.1 前言 ........................................................ 1
1.2 选题背景 .................................................... 1
1.3 设计要求..................................................... 2
1.4 国内外的研究概况 ............................................ 2
1.5 此次设计研究的主要内容应解决的问题........................... 2
2 总体设计方案...................................................... 3
2.1 硬件电路组成 ................................................ 3
2.2 系统各单元电路设计 .......................................... 4
2.2.1 P89C51 单片机最小系统 .................................. 4
2.2.2 按键控制电路........................................... 4
2.2.3 三极管驱动电路......................................... 4
2.2.4 8×8 LED 点阵介绍.......................................... 5
2.3 字符的点阵显示原理及字库代码获取方法 ........................ 6
3 程序设计.......................................................... 8
3.1 程序流程图................................................... 8
3.2 程序设计..................................................... 8
4 调试及性能分析.................................................... 9
4.1 系统调试..................................................... 9
4.1.1 软件调试 ............................................... 9
4.1.2 硬件调试 ............................................... 9
4.2 设计分析..................................................... 9
总结............................................................... 10
致谢............................................................... 11
参考文献........................................................... 12
附 录.............................................................. 13
附录 1 原件清单................................................. 13
附录 2 硬件原理图 ............................................... 14
附录 3 程序清单 ................................................. 15
1 绪论
1.1 前言
LED 点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大
型显示屏系统。它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠
等优点而成为众多显示媒体以及户外作业显示的理想选择。同时也可广泛应用到
军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
目前大多数的 LED 点阵显示系统自带字库。其显示和动态效果(主要是显示内容
的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照
预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行
中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示
等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的局限,
其特殊字符往往难以显示,同时显示内容也不能随意更改。 因此就提出了一种
利用 PC 机和单片机控制的 LED 显示系统通信方法。该方法可以对显示内容进
行实时控制,从而实现诸如动态显示效果。同时用户也可以在 PC 机上进行显示
效果的预览,显示内容亦可以即时修改。同时它具有发光率高、使用寿命长、组
态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、
商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣
传。LED 显示屏发展较快,本文讲述了基于 P89C51 单片机 8×8 LED 汉字点阵
滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus 软件仿真等
基本环节和相关技术。

1.2 选题背景
LED 电子显示屏是随着计算机及相关的微电子﹑光电子技术的迅猛发展而
形成的一种新型信息显示媒体。它利用发光二极管构成的点阵模块或像素单元组
成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格
比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,
在信息显示领域得到了广泛的应用。LED 点阵电子显示屏是集微电子技术、计
算机技术、信息处理技术于一体的大型显示屏系统。它以其色彩鲜艳,动态范围
广,亮度高,寿命长,工作稳定可靠等优点而成 为众多显示媒体以及户外作业
显示的理想选择。同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、
证券、广告以及交通运输等许多行业。

1
1.3 设计要求
利用一块点阵数码板,按编程者要求实现任意符号的显示。

1.4 国内外的研究概况
目前大多数的 LED 点阵显示系统自带字库。其显示和动态效果(主要是显
示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只
能按照预先的设计进行。而实际上经常会遇到一些特殊要求的动态显示,比如电
梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商
标显示等。这时一般的显示系统就很难达到要求。另外,由于受到存储器本身的
局限,其特殊字符或图案也往往难以显示,同时显示内容也不能随意更改。本文
提出一种利用 PC 机和单片机控制的 LED 显示系统通讯方法。该方法可以对显
示内容(包括汉字和特殊图符)进行实时控制,从而实现诸如闪动、滚动、打字
等多种动态显示效果。该方法同时还可以调节动态显示的速度,同时用户也可以
在 PC 机上进行显示效果的预览,显示内容亦可以即时修改。在我国改革开放之
后,特别是进入 90 年代国民经济高速增长,对公众场合发布信息的需求日益强
烈,LED 显示屏的出现正好适应了这一市场形势,因而在 LED 显示屏的设计制
造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形
成产业,成为光电子行业的新兴产业领域。

1.5 此次设计研究的主要内容应解决的问题

此次设计研究的主要内容是设计一个符号显示牌:通过程序控制符号显示
牌,使符号显示牌,在无按键按下时,显示数字“0-9”,当第一次按下按键时,
显示字母“μ”,当第二次按下按键时显示汉字“公”。
应解决的问题:单片机 P1 口的输出电流不足以驱动二极管,需要加驱动,
本次研究中以 S8050 作为驱动,同时在 S8050NPN 晶体管基极加 4.7K 的电阻。
实验前要弄清晶体管三个引脚代表的极性,以免符号显示牌不亮导致而设计失
败。

2
2 总体设计方案
2.1 硬件电路组成
本产品采用以P89C51单片机为核心芯片的电路来实现,主要由P89C51芯片、
晶振电路、三极管驱动电路、按键控制电路、8×8 LED点阵5部分组成,电路框
图如图1所示。其中,P89C51是一种带4kB闪烁可编程可擦除只读存储器(Falsh
Programmable and Erasable Read OnlyMemory,FPEROM)的低电压、高性能CMOS
型8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术
制造,工业标准的MCS一51指令集和输出管脚相兼容。由于将多功能8位CPU和
闪烁存储器组合在单个芯片中,能够进行1 000次写/擦循环,数据保留时间为
10年。他是一种高效微控制器,为很多嵌人式控制系统提供了一种灵活性高且价
廉的方案。因此,在智能化电子设计与制作过程中经常用到P89C51芯片。时钟
电路由P89C51的18,19脚的时钟端(XTAI 1及XTAL2)以及12 MHz晶振X 、电容
C2、C3组成,采用片内振荡方式。复位电路采用简易的上电复位电路,主要由
电阻R ,R2,电容C ,开关K 组成,分别接至P89C51的RST复位输人端。LED
点阵显示屏采用8x8共64个象素的点阵,可通过万用表检测发光二极管的方法测
试判断出该点阵的引脚分布。
我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总
线,就可以得到显示的字符了。我们在实际应用中是将LED点阵的8条列线通过
驱动电路接在P1口,8条行线通过限流电阻接在P0口。单片机89C51按照设定的
程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高电
平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个
字符的显示。再改变取表地址实现字符的滚动显示。硬件电路组成框图如图5所
示。

P1 三极管驱动电路

P89C51

按键控制电路 P2.0 P0 限流电阻 8×8点阵LED显示屏

图2-1 硬件电路组成框图

3
2.2 系统各单元电路设计
2.2.1 P89C51单片机最小系统
最小系统包括晶体振荡电路、复位开关和电源部分。图 2-2 为 P89C51 单片
机的最小系统。

图 2-2 P89C51 单片机最小系统

2.2.2 按键控制电路
单片机开始工作时,P2.0是高电平。当按键按下时,检测到一个低电平信号,
改变P0口输出信号,控制8×8 LED点阵显示屏显示不同字符。

R1
10k

P2.0

图2-3 按键控制电路

2.2.3 三极管驱动电路
扫描驱动电路的功能主要是有P1口输出高电平使三极管发射结导通,发射结
输出足够大的电流使二极管导通。

4
P1.0 P1.1 P1.2 P1.3

R1 Q1 R2 Q2 R3 Q3 R4 Q4
s8050 S8050 S8050 S8050
4.7k 4.7k 4.7k 4.7k

0 1 2 3

P1.4 P1.5 P1.6 P1.7

R5 Q5 R6 Q6 R7 Q7 R8 Q8
S8050 S8050 S8050 S8050
4.7k 4.7k 4.7k 4.7k

4 5 6 7
图 2-4 三极管驱动电路

2.2.4 8×8 LED点阵介绍


图(4)为 8×8 点阵 LED 外观及引脚图,,只要其对应的 X、Y 轴顺向偏压,
即可使 LED 发亮。例如如果想使左上角 LED 点亮,则电子模块中的 0 口为 1,
A 口为 0 即可。应用时限流电阻可以放在横轴或列轴。

图 2-5 8×8 点阵 LED 外观及引脚

5
(1)把“单片机系统”区域中的 P0 端口用 8 芯排芯连接到“点阵模块”区域中的
“A~H”端口上;

(2)把“单片机系统”区域中的 P1 端口用 8 芯排芯连接到“点阵模块”区域中的“0~7”


端口上;

为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,
将A~H接口作为行,这样我们就可以直接将P89C51单片机的P0口与0~7接口一
次连接,将P89C51单片机的P1口与A~H接口一次连接。要使LED发亮即使给予
数字端高电平,字母端给予低电平,就能使二极管发亮。

2.3 字符的点阵显示原理及字库代码获取方法
我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。我
们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。事实
上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。如查
用8位的P89C51单片机控制,如图所示

图2-6 8×8点阵等效电路
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。首
先将8行分成4位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十
六进制代码。这样就把要显示的“公”字编为如下代码:
0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf

由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析
出他的扫描代码从而显示在屏幕上。上述方法虽然能够让我们弄清楚字符点阵代
码的获取过程。字符点阵显示一般有点扫描、行扫描和列扫描3种。为了符合视
觉暂留要求,点扫描方法的扫描频率必须大于16×64—1024 Hz,周期小于1 ms

6
即可。行扫描和列扫描方法的扫描频率必须大于16×8—128 Hz,周期小于7.8 ms
即可。

7
3 程序设计
3.1程序流程图

开始

初始化

依次显示
0~9

是否按键
No 依次显示
Yes 0~9

显示字符μ

是否按键

No
Yes 显示字符μ

显示汉字公

是否按键

No
Yes 显示汉字公

图 3-1 主程序流程图

3.2 程序设计
根据上述所说的程序流程图,设计程序如附录 3。

8
4 调试及性能分析
4.1 系统调试
4.1.1 软件调试
首先根据各单元电路模块,利用 Proteus 软件将总的硬件原理图绘制好,设
计好各模块要使用的 I/O 口,如:8×8 点阵 LED 显示屏时候插反,先检测下,无
硬件错误后,再进行程序编程。
利用 C 语言的编程方式,将系统要求的基本功能,以及创新功能根据程序
流程图编写出来,用 Keil 软件调试无误后,生成 Hex 文件。
双击 Proteus 中的 P89C51 芯片,将 Keil 生成的 Hex 加载到芯片内,进行仿
真,经调试后所编写的程序能够完美实现系统所需的各种功能。

4.1.2 硬件调试
硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。具体步骤及测试
结果如下:
(1) 检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线
是否完全连接,对未连接的进行修复。
(2) 参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,
经测试,各连接不存在问题。
(3) 以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。
(4) 将烧录好程序的最小单片机系统接入各模块后,各模块能过正常工作,
如:数码管正常发光。

4.2 设计分析
将烧录好程序的最小单片机系统与各模块连接好后,8×8 点阵 LED 显示屏
显示初始值。按键一次之后,显示屏显示滚动字符μ,再按键一次,显示屏显示
汉字“公”。
经软件调试和硬件调试后,所设计的系统完美实现了所需的控制要求和创新
要求。

9
总结
本文设计一个 8×8 点阵 LED 图文显示屏。经过测试,LED 各点亮度均匀,
可显示图形和文字,且稳定清晰无串扰。本系统具有硬件少、结构简单、容易实
现,性能稳定可靠等特点。通过查阅资料,了解了 LED 发光原理和 LED 显示技
术的原理和现状。在 LED 点阵显示屏的设计过程中,学到了很多东西,复习了
Protel、Proteus、Keil 等软件的基础应用。基本了解了整个嵌入式开发的流程。
例如,在进行整个设计之前,应该先根据需求分析,对单片机进行选型,然后对
各个硬件模块进行搭试。在画 PCB 电路板的时候,要注意基本的布板原则。在
焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。
在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发
生错误时,不知道到底是哪一方出错了。总之,这次设计开发,本人受益非浅,
在以后的开发过程中一定总结经验,吸取教训,为以后的学习工作打好基础。

10
致谢

11
参考文献
[1] 潘永雄.新编单片机原理与应用(第二版)[M].西安:西安电子科技大学出版社,2007
[2] 张志良.单片机原理及控制技术[M].北京:机械工业出版社,2005
[3] 李华.MCS-51 单片机实用接口技术[M].北京:北京航空航天出版社,1997
[4] 诸昌钤.LED 显示屏系统原理及工程技术[M].成都:电子科技大学出版社,2000

12
附 录
附录 1 原件清单

器件名称 数量
NPN(8050) 8
8*8 点阵数码管 3mm 红色 1
电阻 470 欧 8
电阻 4.7K 8
电阻 10K 1
按钮 1
万能板 1
40PIN2.54mm 单排针 20
排插 16
连线(杜邦线) 若干

13
附录 2 硬件原理图

14
附录 3 程序清单

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i,j,k,scan,num,count;
sbit key=P2^0;
uchar code table1[]=
{0x7f,0xbf,0xc1,0xdf,0xdf,0xdf,0xc1,0xdf}; //μ
uchar code table2[]=
{0xf7,0xdb,0xad,0xb7,0xbe,0xdd,0xbb,0xf7}; //公
uchar code table[][8]=
{{0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff}, //0
{0xff,0xbf,0xbb,0x81,0x80,0xbf,0xbf,0xff}, //1
{0xff,0xff,0xbb,0x9d,0xad,0xb3,0xff,0xff}, //2
{0xff,0xff,0xdd,0xbe,0xb6,0xc9,0xff,0xff}, //3
{0xff,0xef,0xe7,0xeb,0x81,0xef,0xef,0xff}, //4
{0xff,0xff,0xd1,0xb5,0xb5,0xcd,0xff,0xff}, //5
{0xff,0xff,0xc1,0xb6,0xb6,0xcd,0xff,0xff}, //6
{0xff,0xff,0xfd,0xfd,0x8d,0xf5,0xf9,0xff}, //7
{0xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff}, //8
{0xff,0xff,0xd9,0xb6,0xb6,0xc1,0xff,0xff}}; //9
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
key=1;
num=0;
while(1)
{
if(num==0)
{
for(j=0;j<10;j++)
{
if(key==0)
{
delay(10);
if(key==0)
{
num=1;
while(!key);
}
}
if(num!=0)
break;

15
for(k=0;k<30;k++)
{
scan=0x01;
for(i=0;i<8;i++)
{
P0=table[j][i];
P1=scan;
delay(2);
scan<<=1;
}
}
}
}
if(num==1)
{
for(j=0;j<8;j++) //8 组数据
{
if(key==0)
{
delay(10);
if(key==0)
{
num=2;
while(!key);
}
}
if(num!=1)
break;
for(k=0;k<10;k++)
{
scan=0x01; //初始扫描信号
for(i=8;i>0;i--) //扫描周期
{
if(i>j)P0=table1[8+(j-i)];
else P0=table1[j-i];
P1=scan;
delay(2);
scan<<=1;
}
}
}
}
if(num==2)
{
if(key==0)
{
delay(10);
if(key==0)
{
num=0;

16
while(!key);
}
}
scan=0x01;
for(i=0;i<8;i++)
{
P0=table2[count++];
if(count==8)count=0;
P1=scan;
delay(2);
scan<<=1;
}
}
}
}

17

You might also like