8x8LED点阵显示屏设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆文理学院
基于单片机
的课程设计
题目:8x8LED点阵汉字显示屏设计
学院:电子电气工程学院
专业:电子信息科学与技术[职]
学生姓名:罗成芳、黄普娟
学号: 201020084027、201020084025
指导教师:杨保亮
2010级电子信息科学与技术[职]
二○一三年三月十四日
8x8LED点阵汉字显示屏设计
摘要
本文研究了基于P89C51单片机LED8×8点阵显示屏的设计并运用Proteus 软件进行原理图绘制,运用Keil软件进行仿真和调试。
主要介绍了LED8×8点阵显示屏的硬件电路设计、c语言程序设计与调试、Proteus软件绘制原理图和实物制作等方面的内容。
本显示屏的设计具有体积小、硬件少、电路结构简单及容易实现等优点。
能帮助广大电子爱好者了解8x8点阵汉字显示原理,认识单片机的基本结构、工作原理及应用方法,并提高单片机知识技术的运用能力。
利用单片机来设计的系统,既能实现系统所需的功能,也可以满足计数的准确性、迅速性,并且电路简单、操作简单、通用性强。
目录
1 绪论 (1)
1.1 前言 (1)
1.2 选题背景 (1)
1.3设计要求 (2)
1.4此次设计研究的主要内容应解决的问题 (2)
2 总体设计方案 (2)
2.1 硬件电路组成 (2)
2.2 系统各单元电路设计 (3)
2.2.1 STC89C52单片机最小系统 (3)
2.2.2 按键控制电路 (4)
2.2.3 三极管驱动电路 (4)
2.2.4 8×8 LED点阵介绍 (5)
2.3 字符的点阵显示原理及字库代码获取方法 (6)
3 程序设计 (7)
3.1程序流程图 (7)
3.2程序设计 (7)
4 调试及性能分析 (8)
4.1系统调试 (8)
4.1.1软件调试 (8)
4.1.2硬件调试 (8)
4.2设计分析 (8)
总结 (9)
致谢 (10)
参考文献 (11)
附录 (12)
附录1 原件清单 (12)
附录2硬件原理图 (13)
附录3程序清单 (14)
1 绪论
1.1 前言
LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
目前大多数的LED点阵显示系统自带字库。
其显示和动态效果(主要是显示内容的滚动)的实现主要依靠硬件扫描驱动,该方法虽然比较方便,但显示只能按照预先的设计进行。
而实际上经常会遇到一些特殊要求的动态显示,比如电梯运行中指示箭头的上下移动、某些智能仪表幅值的条形显示、广告中厂家的商标显示等。
这时一般的显示系统就很难达到要求。
另外,由于受到存储器本身的局限,其特殊字符往往难以显示,同时显示内容也不能随意更改。
因此就提出了一种利用PC机和单片机控制的LED显示系统通信方法。
该方法可以对显示内容进行实时控制,从而实现诸如动态显示效果。
同时用户也可以在PC机上进行显示效果的预览,显示内容亦可以即时修改。
同时它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。
并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。
LED 显示屏发展较快,本文讲述了基于STC89C52单片机8×8 LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。
1.2 选题背景
LED电子显示屏是随着计算机及相关的微电子﹑光电子技术的迅猛发展而形成的一种新型信息显示媒体。
它利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,在短短的十来年中,迅速成长为平板显示的主流产品,在信息显示领域得到了广泛的应用。
LED 点阵电子显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。
它以其色彩鲜艳,动态范围广,亮度高,寿命长,工作稳定可靠等优点而成为众多显示媒体以及户外作业显示的理想选择。
同时也可广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等许多行业。
1.3设计要求
利用一块点阵数码板,按编程者要求实现任意符号、简单汉字的显示。
1.4此次设计研究的主要内容应解决的问题
此次设计研究的主要内容是设计一个符号显示牌:通过程序控制符号显示牌,使符号显示牌,在无按键按下时,显示”I ♥U 生日快乐”,当第一次按下按键时,显示字母“μ”,当第二次按下按键时显示汉字“土”。
应解决的问题:单片机P1口的输出电流不足以驱动二极管,需要加驱动,本次研究中以S8050作为驱动,同时在S8050NPN晶体管基极加4.7K的电阻。
实验前要弄清晶体管三个引脚代表的极性,以免符号显示牌不亮导致而设计失败。
2 总体设计方案
2.1 硬件电路组成
本次设计是采用以STC89C52单片机为核心芯片的电路来实现,主要由STC89C52芯片、晶振电路、三极管驱动电路、按键控制电路、8×8 LED点阵5部分组成,电路框图如图1所示。
其中,STC89C52是一种带4kB闪烁可编程可擦除只读存储器(Falsh Programmable and Erasable Read OnlyMemory,FPEROM)的低电压、高性能CMOS型8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,工业标准的MCS一51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,能够进行1 000次写/擦循环,数据保留时间为10年。
他是一种高效微控制器,为很多嵌人式控制系统提供了一种灵活性高且价廉的方案。
因此,在智能化电子设计与制作过程中经常用到STC89C52芯片。
时钟电路由STC89C52的18,19脚的时钟端(XTAI 1及XTAL2)以及12 MHz晶振X 、电容C2、C3组成,采用片内振荡方式。
复位电路采用简易的上电复位电路,主要由电阻R ,R2,电容C ,开关K 组成,分别接至STC89C52的RST复位输人端。
LED点阵显示屏采用8x8共64个象素的点阵,可通过万用表检测发光二极管的方法测试判断出该点阵的引脚分布。
我们把行列总线接在单片机的I/O口,然后把上面分析到的扫描代码送入总线,就可以得到显示的字符了。
我们在实际应用中是将LED点阵的8条列线通过驱动电路接在P1口,8条行线通过限流电阻接在P0口。
单片机STC89C52按照设定的程序在P1和P0接口输出与内部字符对应的代码电平送至LED点阵的行列线(高
电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个字符的显示。
再改变取表地址实现字符的滚动显示。
硬件电路组成框图如图5所示。
2.2 系统各单元电路设计
2.2.1 STC89C52单片机最小系统
最小系统包括晶体振荡电路、复位电路和电源部分。
图2-2为STC89C52单片机的最小系统。
图2-2 STC89C52单片机最小系统
2.2.2 按键控制电路
单片机开始工作时,P2.0是高电平。
当按键按下时,检测到一个低电平信号,改变P0口输出信号,控制8×8 LED点阵显示屏显示不同字符。
R1
10k
P2.0
图2-3 按键控制电路
2.2.3 三极管驱动电路
扫描驱动电路的功能主要是有P1口输出高电平使三极管发射结导通,发射结输出足够大的电流使二极管导通。
Q1
s8050
Q2
S8050
Q3
S8050
Q4
S8050
Q5
S8050
Q6
S8050
Q7
S8050
Q8
S8050
R1
4.7k
R2
4.7k
R3
4.7k
R4
4.7k
R5
4.7k
R6
4.7k
R7
4.7k
R8
4.7k
P1.0P1.1P1.2P1.3
P1.4P1.5P1.6P1.7
0123
4567
图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 外观及引脚
(1)把“单片机系统”区域中的P0端口用8芯排芯连接到“点阵模块”区域中的“A~H ”端口上;
(2)把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“0~7”端口上;
为了方便于单片机连接,我们在焊接的过程中特意将0~7接口排列出来作为列,将A~H接口作为行,这样我们就可以直接将STC89C52单片机的P0口与0~7接口一次连接,将STC89C52单片机的P1口与A~H接口一次连接。
要使LED发亮即使给予数字端高电平,字母端给予低电平,就能使二极管发亮。
2.3 字符的点阵显示原理及字库代码获取方法
我们以UCDOS中文宋体字库为例,每一个字由8行8列的点阵组成显示。
我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在64象素范围内的任何图形。
如查用8位的STC89C52单片机控制,如图所示
图2-6 8×8点阵等效电路
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。
首先将8行分成4位的上、下两部分,把发光的象素位编为0不发光的象素位为1的十六进制代码。
这样就把要显示的“土“字编为如下代码:
{0xff,0xbf,0xb7,0xb7,0x81,0xb7,0xb7,0xbf}
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。
上述方法虽然能够让我们弄清楚字符点阵代码的获取过程。
字符点阵显示一般有点扫描、行扫描和列扫描3种。
为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×64—1024 Hz,周期小于1 ms 即可。
行扫描和列扫描方法的扫描频率必须大于16×8—128 Hz,周期小于7.8 ms 即可。
3 程序设计
3.1程序流程图
图3-1 主程序流程图3.2程序设计
根据上述所说的程序流程图,设计程序如附录3。
4 调试及性能分析
4.1系统调试
4.1.1软件调试
首先根据各单元电路模块,利用Proteus软件将总的硬件原理图绘制好,设计好各模块要使用的I/O口,如:8×8点阵LED显示屏时候插反,先检测下,无硬件错误后,再进行程序编程。
利用C语言的编程方式,将系统要求的基本功能,以及创新功能根据程序流程图编写出来,用Keil软件调试无误后,生成Hex文件。
双击Proteus中的STC89C52芯片,将Keil生成的Hex加载到芯片内,进行仿真,经调试后所编写的程序能够完美实现系统所需的各种功能。
4.1.2硬件调试
硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。
具体步骤及测试结果如下:
(1) 检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。
(2) 参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,经测试,各连接不存在问题。
(3) 以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。
(4) 将烧录好程序的最小单片机系统接入各模块后,各模块能过正常工作,如:数码管正常发光。
4.2设计分析
将烧录好程序的最小单片机系统与各模块连接好后,8×8点阵LED显示屏显示初始值。
按键一次之后,显示屏显示滚动字符μ,再按键一次,显示屏显示汉字“土”。
经软件调试和硬件调试后,所设计的系统完美实现了所需的控制要求和创新要求。
本文设计一个8×8点阵LED汉字显示屏。
经过测试,LED各点亮度均匀,可显示字母和文字,且稳定清晰无串扰。
本系统具有硬件少、结构简单、容易实现,性能稳定可靠等特点。
通过查阅资料,了解了LED发光原理和LED显示技术的原理和现状。
在LED点阵显示屏的设计过程中,学到了很多东西,复习了Protel、Proteus、Keil等软件的基础应用。
基本了解了整个嵌入式开发的流程。
例如,在进行整个设计之前,应该先根据需求分析,对单片机进行选型,然后对各个硬件模块进行搭试。
在画PCB电路板的时候,要注意基本的布板原则。
在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。
在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。
总之,这次单片机设计,让我们受益非浅,在以后的设计过程中一定总结经验,吸取教训,为以后的学习工作打好基础。
本次课程设计是在杨老师的悉心指导下完成的,从课题的选择到设计的最终完成的每一个环节,自始至终得到杨老师的精心指导和帮助。
杨老师渊博的学识、严谨的治学态度、求实创新的工作作风、对事业和科学的执着追求,以及对我们小组谆谆教诲给我留下了深刻的印象,使我受益终身。
在课题的研究设计过程中,我不仅从杨老师那里学到许多专业知识,更重要的是学会了学习新知识并将其巩固的方法,这无疑是一把开启未来生活的钥匙,特此向杨老师表示衷心的感谢!
在此,还要感谢我们的同学,感谢你们的无私奉献和热情的帮助,使我们克服了很多困难,最终完成了单片机课程设计。
参考文献
[1] 潘永雄.新编单片机原理与应用(第二版)[M].西安:西安电子科技大学出版社,2007
[2] 张志良.单片机原理及控制技术[M].北京:机械工业出版社,2005
[3] 李华.MCS-51单片机实用接口技术[M].北京:北京航空航天出版社,1997
[4] 诸昌钤.LED显示屏系统原理及工程技术[M].成都:电子科技大学出版社,2000
附录
附录1 原件清单
器件名称数量
NPN(8050)8
8*8点阵数码管 3mm红色 1
电阻470欧8
电阻4.7K 8
电阻10K 1
按钮 1
万能板 1
40PIN2.54mm单排针20
排插16
连接线(杜邦线)22
极性电容10uf 1
晶振(12MHZ) 1
瓷片电容30pf 2
STC89C52 1
附录2硬件原理图
附录3程序清单
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar i,j,k,scan,num,count;
sbit key=P2^0;
uchar code table1[]=
{0xdf,0xc1,0xdf,0xdf,0xdf,0xc1,0xbf,0x7f}; //μuchar code table2[]=
{0xff,0xbf,0xb7,0xb7,0x81,0xb7,0xb7,0xbf}; //土uchar code table[][8]=
{{0xff,0xe3,0xeb,0x00,0xeb,0xe3,0xff,0xff}, //中{0xff,0xbf,0xbd,0xbd,0x81,0xbd,0xbd,0xff}, //I {0xff,0xf3,0xed,0xdd,0xbb,0xdd,0xed,0xf3}, //♥{0xff,0xff,0x81,0x7f,0x7f,0x7f,0x81,0xff}, //U {0xbf,0xaf,0xab,0xab,0x80,0xab,0xa8,0xa7}, //生{0xff,0xff,0x00,0x76,0x76,0x76,0x00,0xff}, //日{0xbf,0xa3,0xc0,0xab,0xbf,0xcf,0x00,0xf3}, //快{0xb7,0xd6,0xa5,0x05,0xe5,0xd1,0xbf,0xff}, //乐{0xff,0xff,0xc9,0xb6,0xb6,0xc9,0xff,0xff}, //8 {0xff,0xff,0xc1,0xb6,0xb6,0xd9,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;
for(k=0;k<30;k++)
{
scan=0x01;
for(i=0;i<8;i++)
{
P0=table[j][i];
P1=scan;
delay(10);
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(5);
scan<<=1;
}
}
}
}
if(num==2)
{
if(key==0)
{
delay(10);
if(key==0)
{
num=0;
while(!key);
}
}
scan=0x01;
for(i=0;i<8;i++)
{
P0=table2[count++];
if(count==8)count=0;
P1=scan;
delay(5);
scan<<=1;
}
}
}
}。