4个1616点阵LED电子显示屏的设计Word格式.docx
《4个1616点阵LED电子显示屏的设计Word格式.docx》由会员分享,可在线阅读,更多相关《4个1616点阵LED电子显示屏的设计Word格式.docx(23页珍藏版)》请在冰点文库上搜索。
图形显示与静态,迁出等显示。
2.2显示模块方案论证
各种显示模式的显示模式中,一个简单的显示模式的静态显示。
因此,各种动态显示模式。
根据运动特性可分为动态图形显示闪烁,旋转,缩放,平移,以及其他显示模式。
通过一定的算法由原始数据能够生成新的显示数据,从而导致不同的显示模式。
例如,调整行号的顺序,可以达到上下平移效果;
调节显示数据位置可以到达左右平移效果;
顺序调整行列,就可以到达对角线平移效果。
但是,当算法太复杂,浪费时间过多时,那么就应该预先生成刷新数据,保存几个备用。
控制刷新的时候,要考虑文字图形的移动显示。
刷新速度太慢,没有显著变动,太快则看不清中间过程。
从理论上讲,无论显示图形或文字,只要这些图形或文字对应的LED灯点亮,就可以实现我们想要的结果,这种控制方法称为静态驱动显示。
总共有16×
16点阵LED256,没有那么多的微控制器端口,扩展端口使用一个锁存,锁存由8计算需要32锁存器。
由于成本高,几乎没有实际使用这种设计,并且使用动态扫描的显示方法【9】。
动态逐行扫描,转向灯,这样就可以实现多个列具有相同的名称作为共享驱动器。
对等体的发光管的阳极连接到所述电弧管的同一列中被连接到阴极(共阳极连接),所述第一锁存器的输出的第一行和发光管灯关数据,频闪灯的第一行和关闭时间,然后输出并锁存第二行的亮灭数据,选通与第一行相同的时间并熄灭;
十六行依次进行,之后点亮第一行,反复轮回,当速度大于每秒24次后,由于视觉暂留现象,我们看到的图形会呈现稳定状态。
2.3数据传输方案论证
如果扫描显示,每行需要一个线路驱动器,并使用相同的名称也需要共享一个列驱动器。
显示时,对等体必须在对应于列驱动器的每一列传输数据。
由于显示数据通常被存储在微控制器的存储器中,按8字节序列排放的形式,所以有一个数据传输问题。
数据从控制电路传输到列驱动器可以采用并行传输和串行传输。
若采用并行传输,从控制电路到列驱动器的所需线路数量大,相应的硬件数目多,因此不可取,所以采用串行传输。
如果使用串行传输从控制电路到列驱动器仅仅是一个信号线,也可以是将数据传送到列驱动器的一列。
串行传输具有数据输出,数据的每列的基础的顺序,当传输线在这里,列平行于显示的行。
因此,线的显示数据可以被分解成列和两部分的列的数据。
串行传输中,列数据准备时间相对较长,线扫描,以确定的情况下,左到显示器的行中的时间会缩短,从而会影响LED的亮度。
串行传输过程中,制备并显示该列的数据可以通过重叠解决方法进行处理。
也就是说,在显示本行每一列数据时,下一列数据开始传输。
为了达到重叠处理的目的,数据的显示就需要有一个锁存功能【4】。
经过上面的分析,我们可以得出列驱动电路应该有什么主要功能的结论:
列数据准备,应该具有串入并出移位功能;
列数据显示,应该有一个并行锁存功能。
因此,当本行将准备数据输入并行锁存器进行显示时,串行移位寄存器和数据列可以在不影响本行显示的情况下准备的下一行。
显示屏电路结构框图如图2.1所示。
单片机控制器
行驱动
16×
16
LED点阵
列驱动器
图2.1显示屏电路结构框图
3系统硬件电路的设计
3.1单片机选择
单片机采用AT89C52或其兼容系列芯片,采用12MHZ或更高频率晶振,以获得较高的刷新频率,使其显示更稳定。
3.1.1AT89C52芯片简介
AT89C52是一个低电压,高性能CMOS8位单片机,与MCS51指令兼容,包含256个字节,8K字节的内部RAM片可反复擦写的FlashROM中,有两个串口中断,3个16位可编程定时器/计数器中断,32个双向I/O端口,两个外部中断源,两个写断线,可编程串行UART通道,3位加密,并具有低功耗空闲和掉电模式下,软件设置睡眠和唤醒功能【7】。
图3.1为AT89C52单片机引脚图。
图3.1AT89C52单片机引脚图
AT89C52单片机管脚说明如下:
VCC:
电源电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路的双向I/O口。
作为输出口,每位能驱动8个TTL逻辑门电平,对P0端口写“1”时,引脚作高阻抗输入。
当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。
在这种模式下,P0具有内部上拉电阻【10】。
在FIASH编程时,P0口用来接受指令字节,而在程序校验时,输出指令字节,程序校验时,需要外接上拉电阻。
P1口:
P1口是一个具有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。
对P1口写“1”时,内部上拉电阻的原因,将输出电流Iu【10】。
在Flash编程和校验时,P1口接收低8位地址。
P2口:
P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。
对P2口写“1”时,通过内部上拉电阻把端口拉高,此时可以作为输入口使用。
作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流Iu【10】。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址。
在访问8位地址的外部数据存储器时,P2口输出P2锁存器的内容。
在Flash编程或校验时,P2接受高位地址和一些控制信号。
P3口:
P3口是一组具有内部上拉电阻的8位双向I/O口,P3输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电平。
对P3口写“1”时,内部上拉电阻把端口拉高,此时用作输入。
作为输入时,被外部拉低的引脚由于内部电阻的原因,输出电流Iu【10】。
P3口除了作为一般的I/O口外,更重要的是它的第二功能,如下表3.1所示。
表3.1P3口第二功能表
引脚号
第二功能
P3.0(RXD)
串行输入
P3.1(TXD)
串行输出
P3.1(INT0)
外部中断0
P3.3(INT1)
外部中断1
P3.4(T0)
定时器0外部输入
P3.5(T1)
定时器1外部输入
P3.6(WR)
外部数据存储器写选通
P3.7(RD)
外部数据存储器读选通
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址低8位字节。
一般情况下,ALE扔以时钟震荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时。
需注意:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效【10】。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,将跳过两次PSEN信号【10】。
EA/VPP:
外部访问允许。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
3.2单片机系统外围电路
反相放大器(XTAL2)连接到12MHz或更多的晶体中量级的频率,以获得更高的刷新速率,显示更加稳定的输出和输入端(XTAL1)之间的单芯片振荡器【1】。
连接到列驱动器和微控制器的串行端口,用于传输显示数据。
线路驱动器和端口P1连接到低4,发送线路选择信号,P1.5〜P1.7口发出控制信号。
P0和P2口空闲,在必要时,可以扩展系统的ROM和RAM【1】。
图3.2为单片机外围电路图。
图3.2单片机外围电路图
3.2.1列驱动电路
列驱动器电路是由一个74LS595构成。
74LS595是一个8位锁存器和输出一个的串入并出移位寄存器和移位寄存器锁存器的输出控制的,独立于数据的行列的可同时显示,的下一个传输数据的列行,从而达到重叠处理的目的【2】。
图3.3为74LS595的结构图。
74LS595引脚说明如表B所示。
图3.374LS595结构图
列驱动器电路原理图如图3.4所示。
在第一片的SER侧柱和微控制器的驱动器输出被连接到一个串行数据列所示,连接到所述第二片的列驱动器的SERQ7末端。
SCK的两个74LS595,可控硅,RCLK端部是平行的,作为一个统一的输出锁存输入信号,串行数据信号和一个明确的信号,移位串行数据【6】。
这样的设计使该芯片16通过串行数据的输入顺序地转移到移位寄存器的对应输出端相连。
此消彼长,RCLK年底的数据一起放入16对应的输出锁存器选通相应的行结束后,您可以进行所需的行和列来显示。
图3.4列驱动电路图
3.2.2行驱动电路
本电路中加入了一个4-16线译码器74LS154,这样可以充分利用单片机的接口。
它的输入是一个十六进制码,扫描信号输出解码为低状态,其结构如图3.5所示。
图3.574LS154结构图
74LS154引脚说明如表3.2所示。
表3.274LS154引脚说明
符号
引脚
描述
~
1~11,13~17
输出端(低电平有效)
18~19
选通端(低电平有效)
A、B、C、D
20~23
译码地址输入端(低电平有效)
行驱动电路图图C中,G1,G274LS154引脚接地,则A,B,C,D的输入端。
形成了16种不同的输入状态,即从0000到1111,每一种国家控制的输出,它会产生16种输出。
如果线64被照亮时,电流达到640毫安通过74LS154,事实上,74LS154译码器不能提供足够的电流来驱动吸收LED64同时点亮时,使得电流信号在输出应该和点阵显示放大每一行之间的对应安装一个8550晶体管。
此时,74LS154任一输出引脚为低电平时,对应的晶体管的发射极就为高电平,使得点阵显示器相应的行也为高电平【5】。
74LS154译码器真值表如表3.3所示。
表3.3译码器真值表
信号输入
输出
低电平有效
DCBA
LL
LH
HL
HH
LLLL
LLLH
LLHL
LLHH
LHLL
LHLH
LHHL
LHHH
HLLL
HLLH
HLHL
HLHH
HHLL
HHLH
HHHL
HHHH
XXXX
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
一
3.34个16×
16点阵LED电子显示屏电路
论证后,将系统硬件各部分整合在一起,与所需的各元器件组装后,在单片机的程序存储器中存入编制好的程序,就构成一个完整的应用系统。
4个16×
16点阵显示屏硬件原理图见附录图A1所示。
4系统程序的设计
4.1显示驱动程序
当显示驱动程序进入中断后,对定时器T0重新赋初值,就可以使显示屏的刷新率稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下【3】:
刷频率(帧频)=
×
溢出率=
(4.1)
其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。
然后检查当前的显示驱动程序行的行号亮起,显示数据缓冲器通过从显示器,这是提供给移位寄存器的串行端口读取数据的下一行。
为了消除拖尾现象产生的开关一行显示数据,驱动程序必须关闭显示器,即消隐,显示数据输入到输出锁存器和锁存,然后输出一个新的行号,然后重新打开显示器【8】。
显示驱动程序流程图如图4.1所示。
进入中断
退出中断
定时器赋初值
读取行号并增1
送新行显示数据
消隐
切换显示数据
送新行号、打开显示
图4.1显示驱动程序流程图
显示驱动程序:
多个16*16LED显示演示程序
MCUAT89C51XAL24MHz
//以下程序能实现多个16*16LED屏的多个字符显示,显示方式有整行上移、帘入帘出、左移、右移//
#include"
reg52.h"
#defineBLKN8//列锁存器数(=LED显示字数*2)
#defineTOTAL20//待显示字个数,本例共20个
#defineCONIOP1//显示控制口
sbitG=CONIO^7;
sbitCLK=CONIO^6;
sbitSCLR=CONIO^5;
unsignedcharidatadispram[(BLKN/2)*32]={0};
//显示区缓存,四字共4*32单元
//
voidleddisplay(void)interrupt1using1
{
registerunsignedcharm,n=BLKN;
TH0=0xFc;
//设定显示屏刷新率每秒62.5帧(16毫秒每帧)
TL0=0x18;
m=CONIO;
//读取当前显示的行号
m=++m&
0x0f;
//行号加1,屏蔽高4位
do{
n--;
SBUF=dispram[m*2+(n/2)*30+n];
//送显示数据
while(!
TI);
TI=0;
}while(n);
//完成一行数据的发送
G=1;
//消隐(关闭显示)
CONIO&
=0xf0;
//行号端口清○
CLK=1;
//显示数据打入输出锁存器
CONIO|=m;
//写入行号
CLK=0;
//锁存显示数据
G=0;
//打开显示
}
4.2系统主程序
本文设计的系统软件能使系统在目测条件下LED显示屏各点亮度均匀、充足,可显示图形和文字,显示图形和文字应稳定、清晰无串扰。
图形或文字显示有静止、移入移出等显示方式。
之后,主程序启动系统时,首先初始化系统环境,包括设置串口,定时器,中断和端口;
然后“滚出来”的图形,停留约三秒钟;
然后滚动起来,“我爱单片机”这5个字符和图形,然后在“滚进”的方式消隐图形。
由于微控制器不停止命令,这样你就可以将系统设置为执行这些程序继续循环显示。
显示单元模块单元可以接收来自控制器(主控板),或上级显示单元传输下来的数据和命令信息,而这些数据和指令信息传输过程中,没有任何改变的输送到下一级显示模块单元,显示板因此可以扩展更多显示单元,用于显示更多内容。
图4.2是系统主程序流程图。
系统初始化
开始
“卷帘出”显示效果
“上滚屏”显示效果
“左跑马”显示效果
“卷帘入”显示效果
图4.2系统主程序流程图
系统主程序:
voidmain(void)
{
registerunsignedchari,j,k,l,q,w;
//初始化
SCON=0x00;
//串口工作模式0:
移位寄存器方式
TMOD=0x01;
//定时器T0工作方式1:
16位方式
TR0=1;
//启动定时器T0
CONIO=0x3f;
//CONIO端口初值
IE=0x82;
//允许定时器T0中断
while
(1)
{
delay(2000);
//2秒
//第一种显示效果:
卷帘出显示笑脸图案
for(i=0;
i<
32;
i++)
for(q=0;
q<
BLKN/2;
q++){dispram[i+q*32]=Bmp1[5][i];
if(i%2)delay(120);
}
delay(1000);
//卷帘出显示文字,每次字数为BLKN/2,共显示TOTAL*2/BLKN次
for(w=0;
w<
TOTAL*2/BLKN;
w++)
for(i=0;
q++){dispram[i+q*32]=Bmp[q+w*BLKN/2][i];
delay(3000);
for(i=0;
//第二种显示效果:
向上滚屏,每次BLKN/2个字
i<
i++)
for(j=0;
j<
16;
j++)
for(k=0;
k<
15;
k++)
q++)
{dispram[k*2+q*32]=dispram[(k+1)*2+q*32];
dispram[k*2+1+q*32]=dispram[(k+1)*2+1+q*32];
}
{dispram[30+q*32]=Bmp[q+i*BLKN/2][j*2];
dispram[31+q*32]=Bmp[q+i*BLKN/2][j*2+1];
delay(100);
delay(3000);
//滚动暂停
卷帘出黑屏
q++){dispram[i+q*32]=0xff;
//第三种显示效果:
左移出显示
TOTAL;
2;
8;
for(l=0;
l<
l++)
{
q