液晶显示控制电路与程序Word文件下载.docx
《液晶显示控制电路与程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《液晶显示控制电路与程序Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
AT89S51的复位引脚RST外接开关复位电路,当电路工作后,闭合开关,只要在RST引脚上出现2个机器周期以上的高电平,单片机即可复位。
若RST始终保持高电平,则可对AT89S51循环复位。
开关复位电路的组成如原理图——电阻R2和开关S1串联后与电容C3并联,然后与R1串联对+5V电压进行分压,R1一端接地另一端接复位信号引脚RST。
AT89S51模块:
作为核心组成部件之一,ATS8951单片机给YM12864R液晶显示提供控制信号和进行数据传输,从整体上实现液晶显示控制。
AT89S51片内ROM全都采用FlashROM,具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。
AT89S51片内具有计算机正常运行所必需的部件,片外有很多供扩展用的(总线,并行和串行的输入/输出)管脚,便于扩展,很容易组成一定规模的计算机应用系统。
具有丰富的控制指令,控制功能强。
此外其体积小,功耗低,价格便宜。
YM12864R液晶显示模块:
YM12864R液晶显示模块,在其控制芯片ST7920调控下用来显示最终结果。
除显示液晶块外,还包含两个重要外围电路——开关复位电路及电源控制电路,具体如原理图所示。
YM12684的复位引脚RET外接开关复位电路,当开关闭合时,RET引脚接地,模块复位;
当开关断开时,复位信号无效。
此外,外接电源电路利用滑动变阻器分压分别给YM12864R的电源地引脚VSS和LCD驱动电压输入端引脚V0供电。
2.3电路原理图
电路原理图如图2.2所示,其中单片机AT89S51引脚P3.0-P3.2与YM12864R中RS、R/W、E的连接在图中以网络标签的形式给出。
此外,相较于系统设计框图在液晶显示模块控制芯片的调控上,对复位引脚处以简单开关复位电路控制,而电压地VSS及LCD的操作电压以变阻器控制。
图2.2电路原理图
2.4相关芯片介绍
AT89S51:
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51引脚图如图2.3,其内部I/O部件包括:
1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
2、两个16位定时计数器;
(TMOD,TCON,TL0,TH0,TL1,TH1)
3、一个串行通信接口;
(SCON,SBUF)
4、一个中断控制器;
(IE,IP)
图2.3AT89S51引脚图
ST7920:
【4】
ST7920是台湾矽创电子公司生产的中文图形控制芯片,它是一种内置128*64-12汉字图形点阵的液晶显示控制模块,用于显示汉字及图形。
该芯片共内置8192个中文汉字(16*16点阵)、128个字符的ASCII字符库(8*16点阵)及64*256点阵显示RAM(GDRAM)。
为了能够简单、有效地显示汉字和图形,该模块内部设计有2MB的中文字型CGROM和64*256点阵的GDRAM绘图区域;
同时,该模块还提供有4组可编程控制的16*16点阵造字空间;
除此之外,为了适应多种微处理器和单片机接口的需要,该模块还提供了4位并行、8位并行、2线串行以及3线串行等多种接口方式。
利用上述功能可方便地实现汉字、ASCII码、点阵图形、自造字体的同屏显示,所有这些功能(包括显示RAM、字符产生器以及液晶驱动电路和控制器)都包含在集成电路芯片里,因此,只要一个最基本的微处理系统就可以通过ST7920芯片来控制其它的芯片。
ST7920的主要技术参数和显示特性如下:
电源:
VDD(-2.7~+5.5V)+5V(内置升压电路,一般无需负压);
功耗:
正常模式:
450μA,睡眠模式:
3μA,低功耗模式:
30μA;
显示内容:
128列*64行;
显示颜色:
黄绿;
显示角度:
6:
00钟直视;
LCD类型:
STN;
与MCU接口:
8位并行/3位串行;
配置有LED背光显示功能;
带有自动启动复位按钮(RESET);
在对ST7920读或写时,会用到两个8位的寄存器,一个是数据寄存器DR,另一个是指令寄存器IR。
通过数据寄存器DR可以存取DDRAM、CGRAM、CGROM及IRAM的值。
待存取的目标RAM的地址可通过命令来选择,每次数据寄存器DR的操作应以上次选择的目标RAM为主体来进行读出或写入。
通过RS和RW的状态可以选择不同的读写模式,具体配置方法如表1所列。
表1ST7920的寄存器读写状态
RS
RW
功能说明
低电平0
MPU写指令到指令寄存器IR
高电平1
读出忙标志及地址计数器的状态
MPU写指令到数据寄存器DR
MPU从数据寄存器DR读出指令
2.5程序主流程图以及子流程图
整个程序除主函数外包含以下几个子函数:
ST7920初始化、写指令、写数据、汉字显示、延时、清屏。
ST7920初始化子函数用来完成液晶显示模块的初始化操作并设置显示的方式及必要的参数,为显示操作做好必要的准备;
写指令函数向指令寄存器写入不同的命令从而控制液晶显示芯片的显示。
写数据函数向数据寄存器写入数据从而在液晶显示屏上显示相应的或字符字符或此外写指令操作与写数据操作的过程基本一致,区别在于写状态对RS及RW的状态选择不同;
汉字显示函数包含设置所要显示的汉字或字符的显示的地址,向显示RAM(DDRAM)写入所要显示汉字区码的高八位及低八位三个操作,从而实现在液晶屏上显示字符的功能;
延时函数进行一定时间的等待,代替判断忙标志函数,使得上一个指令可以执行完毕,液晶屏处于空闲状态,以便于执行下一条指令;
清屏函数用来清除屏幕,进行新的显示;
汉字显示主程序包含初始化和调用汉字显示函数显示汉字两个操作,其完成整个汉字送液晶显示的调度。
汉字显示子函数流程、ST7920初始化、写指令、写数据子函数流程分别如图2.4、图2.5、图2.6及图2.7所示。
其中,图2.6流程向ST7920写各种操作指令,图2.6流程向ST7920写各种操作数据,区别在于写状态对RS及RW的状态选择不同。
延时子函数流程如图2.8所示,图2.9为汉字显示主流程,其完成整个汉字送液晶显示的调度。
图2.4汉字显示子函数
图2.5ST7920初始化
图2.6写指令子函数
图2.8延时子函数
图2.7写数据子函数
图2.9汉字显示主流程
三、ST7920指令说明
ST7920的指令集包括基本指令和扩充指令,其中基本指令有11条,扩充指令有7条。
每一个指令的长度都为8位。
16×
8点阵的ASCII字符代码也是8位。
但是16×
16点阵中文字符的代码为16位,必须分为两次传送,先传送高8位,再传送低8位。
具体指令如下:
1、清除显示
CODE:
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
1
功能:
清除显示屏幕,把DDRAM位址计数器调整为“00H”。
2、位址归位
X
把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM。
3、进入设定点
I/D
S
把DDRAM位址计数器调整为“00H”,游标回原点,该功能不影响显示DDRAM功能:
执行该命令后,所设置的行将显示在屏幕的第一行。
显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
4、显示状态开/关
D
C
B
D=1;
整体显示ONC=1;
游标ONB=1;
游标位置ON。
5、游标或显示移位控制
S/C
R/L
X
设定游标的移动与显示的移位控制位:
这个指令并不改变DDRAM的内容。
6、功能设定
DL
RE
DL=1(必须设为1)RE=1;
扩充指令集动作RE=0:
基本指令集动作。
7、设定CGRAM位址
AC5
AC4
AC3
AC2
AC1
AC0
设定CGRAM位址到位址计数器(AC)。
8、设定DDRAM位址
AC6
设定DDRAM位址到位址计数器(AC)。
9、读取忙碌状态(BF)和位址。
BF
读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值。
10、写资料到RAM
D7
D6
D5
D4
D3
D2
D1
D0
写入资料到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM)。
11、读出RAM的值
从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)。
12、待命模式(12H)
进入待命模式,执行其他命令都可终止待命模式。
13、卷动位址或IRAM位址选择(13H)
SR
SR=1;
允许输入卷动位址SR=0;
允许输入IRAM位址。
14、反白选择(14H)
R1
R0
选择4行中的任一行作反白显示,并可决定反白的与否。
15、睡眠模式(015H)
SL
SL=1;
脱离睡眠模式SL=0;
进入睡眠模式。
16、扩充功能设定(016H)
1RE
G
RE=1;
扩充指令集动作RE=0;
基本指令集动作G=1;
绘图显示ONG=0;
绘图显示OFF。
17、设定IRAM位址或卷动位址(017H)
AC5~AC0为垂直卷动位址SR=0;
AC3~AC0写ICONRAM位。
址
18、设定绘图RAM位址(018H)
设定GDRAM位址到位址计数器(AC)。
当ST7920在接收指令前,MCU必须先确认ST7920处于空闲状态。
即读取BF=0,才能接收新的指令;
如果在送出一条指令前不检查BF状态,则需要延时一段时间,确保上一条指令执行完毕。
"
RE"
是基本指令集与扩充指令集的选择控制位,当更改"
的状态后,后续指令维持在最后状态。
除非再次更改"
状态,否则使用相同指令集时,无需要重新设置"
。
四、具体功能程序及硬件实现
4.1主要功能程序实现
Ø
通过改变RS和RW的状态选择不同的读写模式,定义写指令及写数据子函数,以便调用来完成数据在液晶显示器上的显示,其中,通过延时调用来避开向液晶送数据的忙状态。
子函数定义如下:
voidwcom(unsignedchard)//写指令子函数
{
delay
(2);
RW=0;
//写选通
RS=0;
//写指令
P0=d;
//将要写的数据送给P1口
E=1;
//使能有效
E=0;
//关闭使能信号
delay(10);
}
voiddat(unsignedchard)//写数据子函数
RS=1;
//数据操作
清屏以便重新显示:
voidclearlcd()//清屏
wcom(0x01);
//清除显示
}
对硬件端口及液晶显示器初始化:
voidinit()//初始化子函数
{
wcom(0x38);
//功能设定
wcom(0x08);
//关显示指令
wcom(0x06);
//游标右移
wcom(0x0c);
//开显示指令
clearlcd();
//清屏
定义汉字显示子程序,以便调用向液晶显示器送显示数据:
voidhanzi(unsignedcharw,unsignedcharwb1,unsignedcharwb2)
{wcom(w);
//设置起始地址
dat(wb1);
//数据送液晶显示
dat(wb2);
编写主函数以完成最终整个实现程序过程的调度:
voidmain()
{
inti;
init();
//调用初始化函数进行初始化操作
while
(1)
{
for(i=0;
i<
32;
i++)
hanzi(addr[i],mx[i][0],mx[i][1]);
;
//调用汉字显示,向液晶送数据显示
}
4.2软硬件实现过程
完成硬件电路的设计及焊接
完成软件的设计并编写具体程序
1、新建工程
在菜单Project-NewProject中新建工程my1.uv2;
2、选择CPU
根据对话框选择CPU类型(公司、型号等)本次课程设计采用ATMEL公司的AT89S51,点击确定按钮后出现如下对话框,选择“否”。
3、新建文件
点击File-New,新建文件,并保存为lcm.c;
4、添加源文件
点击Project-Window中Target1文件夹右边的“+”号,显示子文件夹SourceGroup1,选中SourceGroup1文件夹并点击鼠标“右键”,出现快捷菜单。
点击AddFilesToGroup‘SourceGroup1’,在对话框中完成源文件向工程的添加。
添加完成后,在ProjectWorkspace窗口的SourceGroup1项前多了“+”号,点击“+”号即可看到所添加的文件“lcm.c”
5、编译
用快捷按钮Buildtarget对工程进行编译,在OutputWindow中有编译提示信息,可根据该信息对源文件进行修改。
6、软件仿真
点击Strat/StopDebugSession,可对程序进行设置断点、单步、连续等执行操作。
7、HEX文件设置
选中Target1文件夹并点击鼠标“右键”,选择快捷菜单中的OptionforTarget‘Target1’。
在“Output”对话框中选中复选框(CreateHEXFile),即可使工程在编译时生成紧凑的机器码(my1.hex)。
调试
调试主要分为硬件调试和软件调试:
硬件调试:
主要是检测硬件电路是否有短路、断路、虚焊等。
在焊接电路板的时候,应该从最基本的最小系统开始,分模块,逐个进行焊接测试。
在对各个硬件模块进行测试时,要保证软件正确的情况下去测试硬件,要不然发生错误时,不知道到底是哪一方出错了。
当然,在设计的过程中也存在着失误和不足。
具体步骤及测试结果如下:
1、检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导
线是否完全连接,测试结果所有连接线都已连接好;
2、单片机的晶振是否起振,用示波器观察波形,测试结果波形都很好;
3、检查各芯片的功能是否正常,检测按键的导通情况,测试结果正常。
软件调试:
软件部分是先参考书上的例子,然后自己根据硬件电路写程序,由于以前所学是C语言,所以这个系统在编写程序过程中都采用C语言编写。
刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。
软件调试主要是程序调试,将整个显示程序按照实现功能分为各子模块进行调试。
ISPlay1.3烧写软件使用
1、ISPJTAG硬件连接
将ISPJTAG分别与并口和