TFTLCD显示驱动电路设计.docx
《TFTLCD显示驱动电路设计.docx》由会员分享,可在线阅读,更多相关《TFTLCD显示驱动电路设计.docx(62页珍藏版)》请在冰豆网上搜索。
![TFTLCD显示驱动电路设计.docx](https://file1.bdocx.com/fileroot1/2023-7/1/f5372517-bb33-43e8-a8f1-2f6ce0910131/f5372517-bb33-43e8-a8f1-2f6ce09101311.gif)
TFTLCD显示驱动电路设计
1选题背景
1.1TFT-LCD的发展现状
网络和无线通信技术的发展及其产品的迅速普及,全球数字化技术的迅速推进,促进了信息技术与信息产业的蓬勃兴起。
显示器集电子、通信和信息处理技术于一体,被认为是电子工业在微电子、计算机之后的又一重大发展机会,具有广阔的市场好良好的机遇。
各种平板显示技术成为研究开发的热点,其中薄膜晶体管液晶显示器(TFT-LCD)是目前唯一在亮度、对比度、功耗、寿命、体积和重量等综合性能上全面赶上和超过CRT的显示器件。
它的性能优良、大规模生产特性好,自动化程度高,原料成本低廉,发展空间广阔,已迅速成为新世纪的主流产品,是21世纪全球经济增长的一个亮点。
本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机AT89C51,采用的液晶显示控制器的芯片是SED1520,主要实现由按键控制的中文显示、图片显示、滚屏以及左右移动功能。
同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。
本系统是以单片机的C语言来进行软件设计,指令的执行速度快,可读性强。
1.2课设基本内容及要求
题目:
64*128TFT-LCD显示驱动电路设计
1.2.1硬件电路设计
(1)显示器与驱动IC(电路)间的接口电路设计;
(2)驱动IC(电路)与MCU间的接口电路设计;
(3)驱动IC、MCU的外围电路设计。
1.2.2驱动设计
(1)初始化程序设计
(2)显示实例设计
(3)硬件电路与驱动程序的联调、仿真
(4)实物制作与测试
1.2.3基本要求
(1)具有从下向上的滚动显示功能;
(2)实现64bit级灰度调制;
(3)支持SPI接口;
(4)完成控制电路、栅驱动电路、源驱动电路设计;
(5)给出栅、源驱动信号仿真波形;
(6)显示内容自拟;
(7)驱动电流可调节;
(8)供电电压:
数字模块:
1.65~3.3V;
模拟模块:
5~15V;
2方案论证
2.1总体设计
RAM
图2-1系统框图
2.2显示原理
2.2.1LCD器件结构
液晶显示器件从结构上说,属于平板显示器件。
其基本结构,呈平板形。
它主要由前后偏振片、前后玻璃片、封接边及液晶等几大部件组成。
当然,不同类型的液晶显示器件其部分部件可能会有不同,但是所有液晶显示器件都可以认为是由两片光刻有透明导电电极的基扳,夹持一个液晶层,封接成一个偏平盒,有时在外表面还可能贴装上偏振片等构成。
2.2.2液晶显示原理
液晶是分子排布或指向具有某种规律、介于固体与液体之间,具有规则性分子排列的有机化合物。
它具有液体的流动性和晶体的双折射性,并且在电场的作用下会改变其分子排列。
液晶的特点是构成液晶的分子指向有规律,而分子之间的相对位置无规律,前者使液晶具有晶体才具有的各向异性,后者使之具有液体才具有的流动性。
液晶显示器的原理是利用液晶的物理特性,在通电时导通,使液晶排列变得有秩序,从而光线容易通过,不通电时,排列则变得无序,从而阻止光线通过。
如图2-2所示:
TFT-LCD液晶显示器的显像原理是采用“背透式”照射方式。
当光源照射时,先通过下偏光板向上透出,借助液晶分子来传导光线。
由于上下火层的电极为TFT电极和公共电极,在TFT电极导通时,液晶分子的排列状态同样会发生改变,也通过遮光和透光来达到显示的目的。
但不同的是,由于TFT晶体管具有电容效应,能够保持电位状态,先前透光的液晶分子会一直保持这种状态,直到TFT电极下一次再加电改变其排列方式为止。
图2-2液晶显示原理图
从电子学角度阐述液晶显示器件的显示原理为:
在外加电场的作用下具有偶极矩的液晶棒状分子在排列状态上发生变化,使得通过液晶显示器件的光被调制,从而呈现或明或暗、透过与不透过的显示效果。
液晶显示器件中的每个显示像素都可以单独被电场控制,不同的显示像素按照驱动信号的控制在显示屏上合成各种图像,液晶显示驱动的功能就是建立这种电场。
液晶显示有三大优点:
液晶本身不发光,只是反射环境光;用十显示的液晶的厚度一般在几十微米以下,加上电极板也只有几毫米,所以液晶元件一般薄而且轻,应用十分方便;液晶显示器耗电量一般极低,基本上不耗电能。
2.2.3TFT元件的工作原理
TFT-LCD的象元由阵列基板侧面的液晶象元电极,公共电极以及封闭在两者之间的液晶构成,象元通过一个薄膜晶体管控制加到其上的电压,如图2-2所示:
TFT-LCD的每个象素都是一个薄膜晶体管,其具有存储的特性,且其存储时间的长短取决于TFT关态电阻和液晶象素的电容,存贮电容的RC常数。
因此,TFT-LCD的驱动方式不同于TN和STN。
TFT-LCD的象素在显示系统中的结构如图2-3所示:
当扫描驱动器施加给扫描电极一个选择电压时,TFT-LCD显示的灰度级由数据驱动器的电压和存储在象元上的电压决定。
即当TFT的栅极G与源极S未选通时,TFT处于截止态,源极S与漏极D之间相当于开路,外电路电压不会施加到液晶像素上。
当行扫描信号选通了某一行所有TFT的栅极G后,源扫描信号依次选通此行上TFT的源极S。
行扫描信号和源扫描信号同时选通的TFT
图2-3TFT-LCD的象元结构
将被打开,源、漏极之间导通。
源扫描信号即数据信号写入液晶像素和补偿电容Cs。
因为液晶像素与补偿电容对电荷的存储特性,在TFT截止后,写入的数据信号会保存一段时间。
可以设定这个保存时间为半帧周期,下半帧时,改变写入信号的极性,即可保证液晶像素处于交流驱动状态。
图2-4TFT-LCD象元在显示系统中的结构
FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
3过程论述
3.1控制电路设计
图3-1控制电路
AT89C51提供以下标准功能:
4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
管脚说明
:
内外程序存储器选择控制端。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
:
外部数据存储器写选通信号输出端,低电平有效。
:
外部数据存储器读选通信号输出端,低电平有效。
RST:
复位输入。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.1.1时钟电路设计
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路有两种方式:
一种是内部时钟方式,另一种为外部时钟方式。
本文用的是内部时钟方式。
如图3-2所示:
图3-2晶振电路
3.1.2复位电路设计
对单片机而言,复位功能是必须存在的,因为单片机每一次启动都需要复位,以使CPU及系统各部件都处于初始状态,并从初始状态开始进行工作。
复位电路有上电复位电路和开关复位电路等。
本设计采用的是上电复位电路。
如3-3所示,当
端通电时,复位电路通过电容给RST端加一个高电平,此高电平信号随
对电容的充电而逐渐降低,因此要保证电容的充电时间足够长来完成复位功能。
图3-3复位电路
3.1.3液晶模块驱动
表3-1液晶模块驱动引脚
编号
符号
引脚说明
编号
符号
引脚说明
1
FG
构造地
11
D0
DataI/O
2
VSS
电源地
12
D1
DataI/O
3
VDD
电源正极
13
D2
DataI/O
4
VO
液晶显示偏压调节
14
D3
DataI/O
5
写信号
15
D4
DataI/O
6
读信号
16
D5
DataI/O
7
使能信号
17
D6
DataI/O
8
数据/命令选择端
18
D7
DataI/O
9
VEE
LCD驱动电源
19
FS1
字体选择
10
复位端
图3-4液晶显示电路
3.2软件部分设计
显示屏软件模块:
初始化程序、主程序、多字滚动、显示程序、扫描程序。
显示程序的主要功能是向屏体提供显示数据,并产生各种控制信号,使屏幕按设计的要求显示。
软件设计中,显示屏的软件系统分为两层;第一层是底层的显示驱动程序,第二层是上层的系统应用程序。
显示驱动程序负责向屏体送显示数据,并负责产生行扫描信号和其他控制信号,配合完成LCD显示屏的扫描显示工作。
显示驱动器程序由定时器T0中断程序实现。
系统应用程序完成系统环境设置(初始化)、显示效果处理等工作,由主程序来实现。
3.2.1主程序
N
Y
图3-5主程序流程图
3.2.2初始子化程序
图3-6初始化子程序流程图
3.2.3显示子程序
显示驱动程序在进入中断后首先要对定时器T0重新赋初值,以保证显示屏刷新率的稳定,1/16扫描显示屏的刷新率(帧频)计算公式如下:
刷频率(帧频)=
溢=
(3-1)
其中f位晶振频率,t为定时器T0初值(工作在16位定时器模式)。
然后显示驱动程序查询当前燃亮的行号,从显示缓存区内读取下一行的显示数据,并通过串口发送给移位寄存器。
为消除在切换行显示数据的时候产生拖尾现象,驱动程序先要关闭显示屏,即消隐,等显示数据打入输出锁存器并锁存,然后再输出新的行号,重新打开显示。
N
N
Y
图3-7显示子程序流程图
4系统调试
4.1硬件调试
要注意将设计电路模块化,可一步一步分块进行调试,这样能够更快找出错误所在的地方。
4.2软件调试
编写程序时需用到Keil软件,输入自己的姓名、学号,生成字模,得到对应的程序。
然后将所有的程序编译完毕后在protues软件上进行仿真。
得到如下图所示的仿真结果:
图4-1仿真结果
(1)
图4-2仿真结果
(2)
5总结
在本次课程设计中,硬件的设计需要我们自己动手,软件的编程也要我们不断的调试,这就要求我们要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法,这样才能事半功倍,为我们节省出大量的时间。
在这次课程设计过程中我锻炼了自己的思考能力和动手能力。
加强了我思考问题的完整性和实际生活联系的可行性的能力。
还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。
并且使我掌握了有关器件的性能及测试方法,这对我今后的学习或者工作都有很大的帮助。
当然,在这过程中也难免出现了一些问题,比如由于对课本理论的不熟悉或粗心导致编程编写错误,最后仿真结果出不来。
这让我懂得了,作为一名设计工作者或是一名工程技术人员,要求具备的首要素质绝对应该是严谨。
只有以严谨的态度对待我们的工作,才能少出错。
在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
参考文献
[1]戴亚翔.田民波.TFT-LCD面板的驱动与设计[M].清华大学出版社,2008
[2]李广弟.单片机基础[M].北京航空航天大学出版社,1994
[3]赵晓安.MCS-51单片机原理及应用[M].清华大学出版社,2001
[4]何钦铭.颜辉.C语言程序设计[M].高等教育出版社,2008
[5]周润景.基于PROTEUS的电路及单片机系统设计与仿真[M].北京航空航天大学出版社,2006
附录1原理图
附录2源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#definewidth30//显示区宽度
#defineaddr_w0x0000//文本显示区首地址
#defineaddr_t0x00f0//图形显示区首地址
#definedata_oraP0//并行I/O
sbitwr=P3^6;//DataWriteintoT6963C,低有效
sbitrd=P3^7;//DataReadfromT6963C,低有效
sbitce=P2^7;//使能信号,低有效
sbitcd=P2^0;//指令数据控制,cd=H指令存取,cd=L数据存取
sbitrst=P2^4;//Lcmreset,低有效
sbitfs=P2^5;//字体选择,H:
6*8点阵;L:
8*8点阵
//外部中断1测试图片显示
sbitbf0=P1^0;//状态位
sbitbf1=P1^1;//状态位
sbitbf3=P1^3;//状态位
/*---------------测试状态----------------*/
voidchk_busy(ucharautowr)
{
data_ora=0xff;
cd=1;
wr=1;
rd=0;
if(autowr)
{while(bf3==0);}
else
{while((bf0==0)||(bf1==0));}
rd=1;
}
/*---------------延时子程序----------------*/
voiddelay(uintus)
{
while(us--);
}
voiddelay1(uintms)
{
uinti,j;
for(i=0;ifor(j=0;j<1000;j++);
}
/*---------------写命令----------------*/
voidwr_comm(ucharcomm)
{
chk_busy(0);
cd=1;
rd=1;
data_ora=comm;
wr=0;
wr=1;
}
/*---------------写数据----------------*/
voidwr_data(uchardat)
{
chk_busy(0);
cd=0;
rd=1;
data_ora=dat;
wr=0;
wr=1;
}
/*------------写命令或数据到LCD--------------*/
voidwr_od(uchardat,ucharcomm)//写一个数据和一个命令
{
wr_data(dat);
wr_comm(comm);
}
voidwr_td(uchardatl,uchardath,ucharcomm)//写两个数据和一个命令
{
wr_data(datl);
wr_data(dath);
wr_comm(comm);
}
voidwr_xd(uintdat,ucharcomm)//写一个16进制数据和一个命令
{
uchardatl,dath;
datl=dat;
dath=dat>>8;
wr_data(datl);
wr_data(dath);
wr_comm(comm);
}
voidwr_auto(uchardat)//自动写数据
{
chk_busy
(1);
cd=0;
rd=1;
data_ora=dat;
wr=0;
wr=1;
}
ucharcodetab3[]={
/*--宋体,宽x高=16x16--*/
0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x1F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xF8,
0x01,0x00,0x01,0x00,0xFF,0xFE,0x02,0x80,0x04,0x40,0x08,0x20,0x30,0x18,0xC0,0x06,/*"吴",0*/
0x02,0x00,0x01,0x00,0x7F,0xFE,0x40,0x02,0x91,0x14,0x09,0x20,0x01,0x00,0x1F,0xF0,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x50,0x10,0x20,/*"宵",1*/
0x10,0x10,0xFE,0xFE,0x10,0x10,0x7C,0x7C,0x10,0x10,0xFE,0xFE,0x10,0x10,0x3F,0xF8,
0x00,0x08,0x1F,0xF8,0x00,0x08,0x3F,0xF8,0x01,0x00,0x48,0x84,0x48,0x12,0x87,0xF2,/*"慧",2*/
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,/*"电",3*/
0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,/*"子",4*/
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x3C,0x38,0x42,0x08,0x42,0x08,0x02,0x08,0x04,
0x08,0x18,0x08,0x04,0x08,0x02,0x08,0x42,0x08,0x42,0x3E,0x3C,0x00,0x00,0x00,0x00,/*"13",5*/
0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x02,
0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x42,0x00,0x7E,0x00,0x00,0x00,0x00,/*"2",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00