8LED点阵显示汉字.docx
《8LED点阵显示汉字.docx》由会员分享,可在线阅读,更多相关《8LED点阵显示汉字.docx(13页珍藏版)》请在冰豆网上搜索。
8LED点阵显示汉字
第1章8×8LED点阵显示汉字的研究背景及目的要求
8×8LED点阵显示汉字的研究背景
点阵LED显示器是把一些LED组合在同一个包装中,常见的规格有5×7,8×8,16×16等几种。
通常,若要显示阿拉伯数字、英文字母、特殊符号等,则可采用5×7的点阵即可够用,若要显示中文字,则需要4片8×8的点阵组成16×16的点阵显示器才能显示一个中文字。
LED电子显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。
它是集微电子技术、光电子技术、计算机技术、信息处理技术于一体的显示系统,是目前国际上极为先进的显示媒体。
由于它具有发光效率高、使用寿命长、组态灵活、色彩丰富、工作性能稳定以及对室内室外环境适应能力强等优点而日渐成为显示媒体中的佼佼者。
在我国改革开放之后,特别是进入90年代国民经济高速增长,对公众场合发布信息的需求日益强烈,LED显示屏的出现正好适应了这一市场形势,因而在LED显示屏的设计制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。
LED显示屏经历了从单色、双色图文显示屏,到图像显示屏的发展过程。
随着信息产业的高速发展,LED显示屏作为信息传播的一种重要手段成为现代信息化社会的一个闪亮标志。
近年LED显示屏已广泛应用于室内、外需要进行服务内容和服务宗旨宣传的公众场所如银行、营业部、车站、机场、港口、体育场馆等信息的发布,政府机关政策、政令,各类市场行情信息的发部和宣传等。
汉字显示方式是先根据所需要的汉字提取汉字点阵,将点阵文件存入ROM,形成新的汉字编码。
而在使用时则需要先根据新的汉字编码组成语言,再由MCU根据新编码提取相应的点阵进行汉字显示。
LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
SPCE061A单片机介绍
SPCE061A是凌阳科技公司µ’nSPTM(MicrocontrollerAndSignalProcessor)系列产品中的16位微控制器芯片,内置32k闪存,其较高的处理速度使芯片能够非常容易、快速地处理复杂的数字信号,适用于数字语音识别等应用领域。
在~工作电压范围内,SPCE061A的工作速度范围为~,具备8通道10位ADC输入功能,内置的具有自动增益控制的麦克风输入功能,双通道10位DAC音频输出功能及A、B两个I/O口输入输出功能[2]。
语音处理功能:
SPCE061A的语音处理功能是由凌阳公司自行开发的具有(转载自文章资源库,请保留此标记。
)音频编解码及各种语音压缩算法实现的。
各种算法相应的程序模块存放在语音算法库SCAM-LIB中,使用时只需调用相应的模块就可方便地实现语音合成、语音播放、录音、识别等功能。
A/D转换功能:
SPCE061A内部集成了8通道10位的A/D转换器,采用逐次逼近原理实现模/数转换,在检测连续变化的模拟量,如温度、压力、流量、转速、声音、亮度时非常方便,在语音类仪器仪表、家用电器中得到较好的应用。
开发调试方便:
SPCE061A的开发是通过在线调试器PROBE实现的。
它既是一个编程器(即程序烧写器),又是一个实时在线调试器,因此在其应用项目开发调试中非常方便。
凌阳SPCE061A单片机不仅具有体积小、集成度高、可靠性好且易于扩展;较强的中断处理能力;高性能价格比;低功耗、低电压等优点外,还有很强的模块化,例如:
位操作模块、自动语音录音以及播放模块。
另外,它还配有专门的编译环境IDE,这些都为软件的设计提供了方便。
在硬件方面,单片机有输入输出端口,这就方便了单片机与机器人、计算机的连接。
设计要求
利用SPCE061A单片机和LED点阵显示模块,来设计点阵显示的硬件电路,并编制相应程序,实现中文字符的显示。
编制键盘扫描程序,将键值显示在LED显示器上。
本设计的目的是:
(1)了解LED点阵显示的基本原理和实现方法。
(2)掌握DMTool字模提取工具的使用方法。
(3)掌握SPCE061A控制8×8LED点阵显示的方法。
第2章8×8LED点阵显示汉字的设计方案及基本原理
8×8LED点阵显示汉字设计方案
根据LED汉字显示主要内容:
点阵显示原理与应用LED点阵显示屏广泛应用与汽车报站器,广告屏等。
8×8LED点阵是最基本的点阵显示模块,理解8×8LED点阵的工作原理就可以基本掌握LED点阵显示技术。
8×8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮;要实现显示图形或字体,只需考虑其显示方式。
通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。
这样,就可以通过SPCE061A编写程序显示要求的汉字。
如图2-1所示:
图2-1SPCE061A显示
8×8LED点阵显示汉字基本原理
1.8×8LED点阵的工作原理
双色8×8LED点阵是由64个双色LED构成,用它可以显示英文字符、数字和一些简单的图片和简单的汉字。
实验箱双色8×8LED点阵电路原理图如图4-23,用行驱动和列驱动可以点亮LED点阵模块。
图中RCOL1~RCOL8分别控制着8×8LED的每一列显示成红色,称为红色LED的列驱动,低电平有效;而GCOL1~GCOL8分别控制着8×8LED的每一列显示成绿色,称为绿色LED的列驱动,同样是低电平有效;COM1~COM8是他们的数据口,当送入其中一个口高电平时,相应行的LED被点亮,而当送入其中一个口低电平时,相应行LED就会被熄灭,所以也称为行驱动。
比如,当想要第一行(从下到上)的第一个LED显示成红色的时候,只需送RCOL1一个低电平,而且送COM1一个高电平即可,也即选中红色的第一列(从右到左),并给第一行(从下到上)送一个高电平,就可以使得第一行第一列(同前)的LED显示成红色。
注意J32、J33和J34中引针的接法,1号引针引出的是RCOL8、GCOL8和COM8,这是因为在8×8LED点阵的实物图中,如果按照从上到下的顺序RCOL8、GCOL8控制第一列LED点亮,按照从左到右的顺序COM8控制第一行LED点亮,在下文中都是按照这种顺序。
只要让某些LED亮,就可以组成数字、英文字符、简单的汉字和图形。
当然不管是哪种形式,哪种图案的哪些LED亮必须是固定的。
事实上,当利用8×8LED点阵显示时,是按照列显示的,比如先显示第一列,再显示第二列,一直显示到第八列,而不是同时显示的。
比如,当显示第一幅图象时,先给RCOL1~RCOL8送数据“0x0001”,再给COM1~COM8送数据“0x001C”点亮第一列的三个LED;接着给RCOL1~RCOL8送数据一“0x0002”,再给COM1~COM8送数据“0x0022”点亮第二列的两个LED;之后给RCOL1~RCOL8送数据一个“0x0004”,再给COM1~COM8送数据“0x0048”点亮第三列的两个LED;依次点亮第四列到第八列图中的LED,就可以构成一个完整的图中的时钟图形。
学交流电时,曾学过当电流频率大于50Hz时,就不能感觉到灯泡的闪烁。
图象的显示和它是同一个原理,由于CPU的速度很快,感觉不到先后顺序,而是看到一个完整的图象显示在8×8LED点阵上。
所以,只要点亮8×8LED点阵不同位置的LED就可以显示任意的字符。
取字原理:
由于采用共阴极的LED显示模块,故在取字符时,取字符阴码,即点亮LED灯的信号为1。
取模顺序是从左到右,逐行取位,即第一个点作为最高位。
每取8个点作为一个字节。
取字的字体由软件写入时的字体决定,每个LED灯的亮灭都是由一个数位来标志的。
图2-2取字例图
每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个像素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256像素范围内的任何图形。
2.SPCE061A控制双色8×8LED点阵显示
SPCE061A可以通过给I/O送数据控制双色8×8LED点阵显示,比如把IOA0连接J32的第1个引针,IOB0连接J34的第1个引针时。
即把IOA0和RCOL8连接,IOB0和COM8连接,当要点亮从上到下第一行、从左到右第一列的一个LED,只需给IOA0送“0”,给IOB0送“1”就可以了。
硬件连接图如下:
IOA7~IOA0连接GRE-的1~8;IOA15~IOA8连接RED-的1~8;IOB0~IOB7连接COM+的1~8,即用8pin排线分别连接J26和J33、J27和J32、J28和J34。
硬件连接图如图2-3。
注意硬件连接图中J26与J33、J27与J32时的连接顺序(J27(或者J26)的第0号引针连接J32(或者J33)的第8号引针)。
图2-3SPCE061A与双色8×8LED点阵连接
第3章8×8LED点阵显示汉字程序设计
主程序流程图
主程序流程图如图3-1:
在主程序里,初始化I/O口,由于要在中断中扫描键盘,所以需要开128Hz中断;在8×8LED点阵上循环显示“东北石油大学”六个汉字:
根据时间顺序显示动态汉字,各个动态汉字符合实验要求。
整个程序由几个部分组成:
主程序、显示汉字子程序、内码转换与显示子程序、延迟子程序。
主程序主要在系统接通电流后初始化后开串口中断接收PC机端信息。
程序架构和实现
a.于LED的扫描驱动是一个重复的不间断的过程,自然,定时中断是最好的实现方法
b.新模块的实现程序设计中,一般将此模块置于定时中断中或主程序循环体中,通过检测对应的消息来决定其是否需要执行数据的刷新。
c.点阵发生器主要是通过定义相应的点阵来保存各种需要显示数据。
图3-1主程序流程图
程序代码(见附录)
第4章8×8LED点阵显示汉字调试结果及分析
8×8LED点阵显示汉字调试结果及分析
实验步骤如下:
1.建立一个新工程ex1_LED_Dots和ex2_Led_Show_Key,在工程里新建C语言文件。
2.拷贝头文件和到新建工程ex1_Led_Show,这两个文件在IDE的安装路径\SPCE061A\include路径下可以找到。
3.添加、到工程的“HeadFiles”;添加后可以直接用这两个头文件中申明的变量或者地址单元。
4.按照程序流程图编写程序。
All。
6.按照硬件连接图连接电路,注意断开JP3和JP7的所有引针,以免影响输出显示数据。
7.下载程序到实验箱,根据数码管显示的现象,判断是否和实验要求相统一。
实验结果:
根据8×8LED点阵显示的工作原理,在显示屏上显示“东北石油大学”六个汉字,并能持续一段时间,达到实验效果。
结果分析:
用8位的SPCE061A单片机控制,由于单片机的总线为8位,故汉字由8×8点阵组成。
在单片机首先显示的是左上角第一列8,即第0列的p00—p07口。
方向为p00到p07,显示汉字“东”时点亮,由上往下排列。
第一列完成后,继续扫描,为了接线的方便,我们仍设计成由上往下扫描,即从p27向p20方向扫描,这一列完成后继续进行扫描,依照这个方法,一共扫描8个8位。
图4-1调试图
图4-2组装连接图
经处理后,结果正确,实现了在8×8LED点阵上循环显示“东北石油大学”六个汉字。
结论与体会
通过这次课程设计使我们能够熟悉利用SPCE061A和LED汉字显示,掌握利用LED显示器显示汉字的方法。
通过这次SPCE061A凌阳16位单片机的课程设计,使我重温了C语言程序设计,学会了使用SPCE061A编写程序并编译生成可执行文件,了解了单片机程序的导入及编写的相关技术,并通过仿真软件和使用开发板实践,对课本上的知识有了更深的理解。
课程设计是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给人许多道和思,并且课程设计使我对抽象的理论有了具体的认识。
通过这次课程设计,我掌握了常用LED和单片机元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
课程设计,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
参考文献
[1]罗亚非.凌阳16位单片机应用基础[M].北京:
北京航空航天大学出版社,2005.
[2]李春茂.LED结构原理与应用技术[M].机械工业出版社.2011-01.
[3]何立民.单片机系统设计[M].北京:
北京航空航天大学出版社,1998.
[4]薛钧义、张彦斌.凌阳十六位单片机原理及应用[M].北京:
北京航空航天大学出版社,2003.
[5]实验箱使用说明书[Z],凌阳大学计划网站.
[6]SPCE061A英文数据手册[Z],凌阳大学计划网站.
[7]参考网址附录
初始化部分程序如下:
#include""
unsignedinti,j,k,num,m1=0;
unsignedintkk=0,jj=0;
unsignedcharcodezi[]={
/*--文字:
东--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x08,0x40,0x0C,0x40,0x08,0x40,0x17,0xFC
/*--文字:
北--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x00,0x00,0x7F,0xFC,0x00,0x10,0x1F,0x90
/*--文字:
石--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x01,0x00,0x01,0x04,0x7F,0xFE,0x02,0x00
/*--文字:
油--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x10,0x80,0x10,0x80,0x20,0x80,0x7C,0xFC
/*--文字:
大--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10
/*--文字:
学--*/
/*--宋体12;此字体下对应的点阵为:
宽x高=8x8--*/
0x01,0x00,0x01,0x80,0x01,0x00,0x01,0x00
};
//==============================
voiddelay(unsignedintnum)
{
while(--num)
*P_Watchdog_Clear=C_WDTCLR;
}
voidled_init(void)
{delay(50000);
SCK_SCLK=1;
LCK=0;
G1_DATA=0;
OE=1;
delay(50);
}
//=============================
uart_soft(unsignedchardat)
{unsignedcharii;
for(ii=0;ii<8;ii++)
{
SCK_SCLK=0;
G1_DATA=dat&0x80;
dat<<=1;
SCK_SCLK=1;
}
}
//=============================
voidmain()
{
*P_IOA_Dir=0xFFFF;
*P_IOA_Attrib=0xFFFF;
*P_IOA_Data=0xFFFF;
*P_IOB_Dir=0xFFFF;
*P_IOB_Attrib=0xFFFF;
*P_IOB_Data=0xFFFE;
led_init();
while
(1)
{
*P_Watchdog_Clear=C_WDTCLR;
for(jj=0;jj<=15;jj++)
{for(k=1;k<=6;k++)
{
for(i=0;i<2;i++)uart_soft(~zi[kk+i]);
kk=kk+32;
}
kk=jj+2;
LCK=0;LCK=1;
P0=jj+1+m1;
kk=kk+jj;
}
kk=0;
if(num<=60){if(++num<=16){m1++;}}
elsenum=0;
/*if(++num>=6){num=0;m1++;};
if(m1>=16)m1=0;
*/
}
}