汉字滚动信息显示屏Word文档下载推荐.docx
- 文档编号:20832519
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:14
- 大小:225.51KB
汉字滚动信息显示屏Word文档下载推荐.docx
《汉字滚动信息显示屏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汉字滚动信息显示屏Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
LM3S3748;
LED;
单片机
1引言
1.1.设计意义
LED显示屏采用了低电压扫描驱动,具有耗电省、使用寿命长、成本低、亮度高、视角大、可视距离远、防水、规格品种多等优点,可以满足各种不同应用场景的需求,发展前景非常广阔,被公认为最具增长潜力也是发展最快的的LED应用市场。
2008年LED显示屏市场规模约100亿元。
随着北京奥运会、上海世博会、广州亚运会等重大赛会的举办和筹备,体育场馆、机场、车站、银行、医院、公共广场、商业场所、居民社区的大面积应用,LED显示屏的市场应用空间不断扩大。
此外,已架设的大型LED显示屏幕每10年将历经一次换机潮,随着人们生活水平的提高,户外LED显示屏将逐渐应用于各个行业。
而汉字的滚动显示又给视觉带来了震撼,所以应用范围十分广泛!
1.2.系统功能要求
设计一个能显示32X64点阵图文LED显示屏,要求文字能滚动显示。
既能带给人们需要的信息,又给视觉上造成一种震撼!
2方案设计
2.1总体设计
2.2设计论证
为了实现汉字的滚动显示,我们采用了动态扫描的方法!
动态扫描的意思简单地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行(比如8行)的同名列共用一套驱动器。
具体就8x8的点阵来说,把所有同1行的发光管的阳极连在一起,把所有同1列的发光管的阴极连在一起(共阳极的接法),先送出对应第一行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定时间,然后熄灭;
再送出第二行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;
以此类推,第8行之后,又重新燃亮第1行,反复轮回。
当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能够看到显示屏上稳定的图形了。
采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。
显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。
当列数很多时,并列传输的方案是不可取的。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有当一行的各列数据都以传输到位之后,这一行的各列才能并行地进行显示。
这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。
对于串行传输方式来说,列数据准备时间可能相当长,在行扫描周期确定的情况下留给行显示的时间就太少了,以致影响到LED的亮度。
解决串行传输中列数据准备和列数据显示的时间矛盾问题,可以采用重叠处理的方法。
即在显示本行各列数据的同时,传送下一列数据。
为了达到重叠处理的目的,列数据的显示就需要具有所存功能。
经过上述分析,就可以归纳出列驱动器电路应具有的功能。
对于列数据准备来说,它应能实现串入并处的移位功能;
对于列数据显示来说,应具有并行锁存的功能。
这样,本行已准备好的数据打入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而不会影响本行的显示
3硬件设计
3.1电源、单片机系统
本设计是基于LM3S3748单片机的32×
64显示屏,其中包含了硬件、软件、调试等方案的设计
.电源部分
3.2.单片机系统
LM3S3748是32位机,工作频率可达到50MHZ,它的资源非常丰富,4个通用定时器模块(GPTM),每个可提供2个16位定时器,34个中断源,8个优先级,64KB单同期Flash,16KB单周期访问SRAM,2个同步串行接口(SSI),3个完全可编程UART,8个10位ADC模块,8个PWM发生器。
3.3点阵及其驱动部分
点阵显示用是动的态扫描来实现的。
在采用扫描方式显示时,由于每行要带动8个二极管,每行电流较大。
若每个二极管安5mA计算,8个二极管就得40mA电流,超出单片机管脚的承受范围,因此每行都加有一个驱动器,本设计的行驱动用的是十六个pnp型三极管。
三极管的发射极接5V电压,集电极接点阵的行线,而其基级本应接单片机,但该接线方式占用为了16个单片机管脚,为了节省单片机管脚,用了一片74LS154译码器,这样就只需要3个管脚了。
74LS154的管脚图及其说明如图三。
点阵及其驱动部分总体接线图如图五(未画完整)
各行的同名列共用一个列驱动,数据通常存储在单片机的存储器中,按8位一个字节的形式存放。
由于列线过多,故多采用串行传输。
由于每次要传输16位,而且数据要逐位输给驱动器,只有当一行中各列数据都已传输到位后,这一行的各列才能进行并行显示,耗时较长。
为了满足以上要求,驱动选择74LS595移位寄存器。
74HC595是硅结构的CMOS器件,。
74HC595是有8位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器是分别的时钟。
数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
其特点:
8位串行输入/8位串行或并行输出存储状态寄存器,三种状态;
输出寄存器可以直接清除100MHz的移位频率。
输出能力:
并行输出,总线驱动;
串行输出;
标准中等规模集成电路。
74LS595的管脚图及其说明如图四。
对3个输入信号进行译码。
得到8个输出状态。
G1,G2A,G2B,为数据允许输出端,G2A,G2B低电平有效。
G1高电平有效。
A,B,C为译码信号输出端,Y0~Y7为译码输出端,低电平有效
图三74LS154管脚图
管脚及其说明:
QA--QH:
八位并行输出端。
QH'
:
级联输出端。
SI:
串行数据输入端。
74595的控制端说明:
/SCLR(10脚):
低点平时将移位寄存器的数据清零。
SCK(11脚):
上升沿时数据寄存器的数据移位。
QA-->
QB-->
QC-->
...-->
QH;
下降沿移位寄存器数据不变。
(脉冲宽度:
5V时,大于几十纳秒就行了)
RCK(12脚):
上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
(5V时,大于几十纳秒就行了),更新显示数据。
/G(13脚):
高电平时禁止输出(高阻态)。
如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。
比通过数据端移位控制要省时省力。
图四:
74LS595管脚图
4.软件设计
本软件要求实现如下要求:
汉字要稳定、明亮并且文字要以一定速度滚动显示。
显示屏软件模块:
初始化程序、主程序、多字滚动、显示程序、扫描程序。
显示程序的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
软件设计中,显示屏的软件系统分为两层;
第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LED显示屏的扫描显示工作。
显示驱动器程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
#include"
systemInit.h"
#include<
LM3Sxxxx.H>
timer.h>
ssi.h>
#definePART_LM3S1138
pin_map.h>
//将较长的标识符定义成较短的形式
#defineSysCtlPeriEnableSysCtlPeripheralEnable
#defineSysCtlPeriDisableSysCtlPeripheralDisable
#defineGPIOPinTypeInGPIOPinTypeGPIOInput
#defineGPIOPinTypeOutGPIOPinTypeGPIOOutput
#defineucharunsignedchar
#defineuintunsignedint
chartable[5][32]={{0x01,0x00,0x01,0x00,0x01,0x00,0x3f,0xfc,0x01,0x10,0x01,0x20,0xff,0xfe,0x00,0x80,
0x01,0x00,0x03,0x10,0x05,0x10,0x09,0xf0,0x11,0x00,0x21,0x00,0x01,0xfe,0x00,0x00},
{0x08,0x00,0x0b,0xfe,0x48,0x20,0x49,0xfc,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,
0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x11,0x34,0x11,0x28,0x20,0x20,0x40,0x20},
{0x02,0x00,0x01,0x00,0x3f,0xf8,0x08,0x20,0x04,0x20,0x04,0x40,0xff,0xfe,0x01,0x00,
0x01,0x00,0x01,0x00,0x7f,0xfc,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00},
{0x08,0x20,0x08,0x20,0x7f,0xfc,0x08,0x20,0x09,0x20,0x01,0x00,0xff,0xfe,0x01,0x00,
0x01,0x00,0x1f,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0xf0}//,
//{0x00,0x00,0x7f,0xf8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0x01,0x00,
//0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00}
};
/*chartable[4][32]={
{0x01,0x00,0x01,0x00,0x01,0x00,0x0f,0xe0,0x09,0x20,0x09,0x20,0x0f,0xe0,0x09,0x20,
0x09,0x20,0x0f,0xe0,0x01,0x00,0x01,0x02,0x01,0x02,0x01,0xfe,0x00,0x00,0x00,0x00},
{0x00,0x00,0x0f,0xf0,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x3f,0xf8,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x05,0x00,0x03,0x00,0x00,0x00},
{0x00,0x00,0x08,0x40,0x08,0x40,0x08,0x40,0x08,0x40,0x09,0xf8,0x7f,0x48,0x08,0xcc,
0x09,0x4a,0x0a,0x49,0x08,0x88,0x09,0x08,0x0a,0x08,0x08,0x38,0x08,0x00,0x00,0x00},
{0x00,0x00,0x01,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10,0x08,0x27,0xe4,0x40,0x02,
0x00,0x00,0x0f,0xf0,0x00,0x80,0x01,0x00,0x02,0x00,0x04,0x08,0x0f,0xf8,0x00,0x00}
{0x00,0x00,0x00,0x80,0x00,0x80,0x01,0xfc,0x02,0x24,0x7e,0x24,0x42,0x20,0x24,0x20,
0x18,0x20,0x18,0x50,0x24,0x88,0x41,0x04,0x81,0x04,0x82,0x02,0x04,0x01,0x00,0x00}
};
*/
voidWR_595(chardat)//写一个字节的数据
{
uinti;
for(i=0;
i<
8;
i++)//循环8次把编码传给锁存器
{
if(((dat<
<
i)&
0x80)!
=0)
{
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_3,0x00);
}
else
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_3,0xff);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_1,0x00);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_1,0xff);
}
}
voidOUT_595(void)
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0,0x00);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_0,0xff);
}
voidleft(charm)
chari;
m;
i++)
{
}
intmain(void)
inti,j,k;
clockInit();
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOF);
//使能KEY所在的GPIO端口
GPIOPinTypeOut(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
SysCtlPeriEnable(SYSCTL_PERIPH_GPIOA);
GPIOPinTypeOut(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|
GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPinWrite(GPIO_PORTA_BASE,GPIO_PIN_2,0xff);
while
(1)
{
for(j=0;
j<
64;
j++)
{
for(k=0;
k<
60;
k++)
for(i=0;
16;
{
WR_595(table[0][i*2]);
WR_595(table[0][i*2+1]);
WR_595(table[1][i*2]);
WR_595(table[1][i*2+1]);
WR_595(table[2][i*2]);
WR_595(table[2][i*2+1]);
WR_595(table[3][i*2]);
WR_595(table[3][i*2+1]);
//WR_595(table[4][i*2]);
//WR_595(table[4][i*2+1]);
left(j);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_4,0x00);
OUT_595();
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,i);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_4,0xff);
}
}
5系统调试
◆调试主要分为硬件调试和软件调试:
硬件调试:
在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。
在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。
当然,在设计的过程中也存在着失误和不足,在调试中进行修改了。
焊接完成后,检验点阵、及线路的好坏:
烧进检验程序,点阵将自第一排向下(上)点亮。
检验无异常,下载主程序
◆软件调试:
◆软件经调试无误,直接将其下再到单片机中,看是否达到所要的效果软件部分是先参考书上的例子,然后自己根据硬件电路写程序,在编写程序过程中都采用C语言编写。
刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。
但是,在实际过程中,LED显示屏出现各种各样的乱码,通过再次认真仔细分析多次修改程序后,程序能够正常运行.
6.设计总结
本文设计的32x64的点阵LED汉字更滚动显示屏,能够在目测条件下实现汉字的滚动显示,LED显示屏各点亮度均匀、充足!
,显示的文字较稳定、清晰。
文字左右滚动显示。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
在此次设计中,我们得到以下体会:
一、在这次点阵设计的过程让我进一步熟悉KEIL及Proteus的使用。
二、本次设计结果仍有缺陷,有一行总是全亮,干扰显示。
三、通过这次点阵设计,重新复习并进一步学习了LM3S3748优点,明确了研究目标。
四、本文设计的LED显示屏能够实现在目测条件下LED显示屏各点亮度均匀、充足,实现汉字的滚动显示!
五、在后的设计中,既要想到电路器件的联合使用,又要灵活变通,举一反六、在焊接方面,我们了解到焊接某些器件时,要先消去电烙铁上的静电,防止静电对芯片特别是放大器件造成伤害,焊接二极管、三极管等芯片时要快,防止持续高温损坏芯片。
7.参考文献
[1]刘欣铭,张广斌.LED显示屏技术综述[J].黑龙江电力,2003,25(4):
294-296.
[2]阳进.基于单片机的LED显示屏的汉字显示[J].中国科技信息,2005,(12):
112.
[3]MarkNelson著.潇湘工作室译.串行通信开发指南[M].中国水利水电出版社,2002.
[4]王宜怀.单片机原理及其嵌入式应用教程[M].北京希望电子出版社,2002.
[5]韩润萍,陈小萍.点阵LED显示屏控制系统[J].微计算机信息,2003,19(10):
50-51.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汉字 滚动 信息 显示屏
![提示](https://static.bdocx.com/images/bang_tan.gif)