12864液晶图形滚动显示仿真论文.docx
《12864液晶图形滚动显示仿真论文.docx》由会员分享,可在线阅读,更多相关《12864液晶图形滚动显示仿真论文.docx(40页珍藏版)》请在冰豆网上搜索。
![12864液晶图形滚动显示仿真论文.docx](https://file1.bdocx.com/fileroot1/2023-2/5/428ed4d4-bffc-473c-852b-214e616d7c73/428ed4d4-bffc-473c-852b-214e616d7c731.gif)
12864液晶图形滚动显示仿真论文
2.5AMPIRE128*64与单片机接口11
附录21
12864液晶图形滚动显示仿真
学生姓名:
张家义学号:
***********
学院:
物理电子工程学院专业:
电子科学与技术
指导教师:
马占卿职称:
副教授
摘要:
12864液晶具有功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。
本论文以Proteus软件中自带的AMPIRE128×64液晶(基于KS0108控制器)为研究对象,重点分析了其工作原理和编程方法。
通过对AT89C51单片机的编程实现了12864液晶的图形滚动显示仿真。
关键词:
单片机;AMPIRE128*64LCD显示;Proteus
Abstract:
12864liquidcrystaldisplay(LCD)withlowpowerconsumption,smallvolume,lightweight,ultra-thin,etcmanyothermonitorstheincomparableadvantages,inrecentyears,itiswidelyusedinsinglechipmicrocomputercontrolofintelligentinstruments,metersandlowpowerconsumptionelectronicproducts.InthispaperbyProteussoftwarebuilt-inAMPIRE128x64LCD(basedonKS0108controller)astheresearchobject,analyzeditsworkingprincipleandprogrammingmethod.BasedonAT89C51singlechipmicrocomputerprogrammingrealizedthesimulationof12864LCDgraphicsscroll.
Keywords:
MCU;AMPIRE128*64LCDdisplay;Proteus
1绪论
1.1论文背景介绍
随着国内外工业的日益发展,目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
LCD低压微功耗平板型结构,被动显示(无眩光,不刺激人眼,不会引起眼睛疲劳),显示信息量大(因为像素可以做得很小),易于彩色化(在色谱上可以非常准确的复现),无电磁辐射(对人体安全,利于信息保密),长寿命。
广泛应用于可视化,人机交互界面。
从世界范围来看,液晶显示产业方兴未艾,发展势头正旺。
预计今后十年、二十年液晶显示器都将是平板显示的主流产品。
我国液晶显示行业尽管也走过了二十多个年头,有了一定的基础。
但与先进国家与地区相比差距还很大,要迎头赶上,还只能算刚刚开始。
俗话说:
兵马未动,粮草先行。
液晶显示相关材料对于器件产业的发展至关重要。
我们在这方面总体讲,还很落后,还有许多薄弱环节,应当引起各方重视。
液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。
LCD可分为段位式LCD、字符式LCD和点阵式LCD。
其中,段位式LCD和字符式LCD只能用于字符和数字的简单显示,不能满足图形曲线和汉字显示的要求;而点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕上下左右滚动,动画功能,分区开窗口,反转,闪烁等功能,用途十分广泛。
LCD产品制造涉及光学、半导体、电机、化工、材料等各项领域,上下游所需VI技术层面极广,极少有单一厂商能从材料到成品全部都做,因此各领域分工明显。
LCD产业上游材料包括玻璃基板、ITO导电玻璃、偏光板、彩色滤光片、背光模块、液晶、半导体制造工序所需光罩,液晶驱动IC、印刷电路板(PCB)等。
1.2研究现状综述
如何开发智能型的图形液晶控制系统已成为人们研究的当务之急。
我们知道,一个较好的系统既要有较强的适应性和通用性,还要有较强的功能性,较高的性价比,很高的实用价值。
图形液晶控制技术也有了不断的进步。
图形液晶显示已成为大多数仪器正常工作的前提,而且对显示的要求也越来越严格。
因此,液晶显示与控制方法的研究越来越受到人们的重视。
图形液晶控制系统能很好解决显示控制中的各种问题,所以图形液晶显示控制系统的研究具有很大的市场潜力。
随着国内外工业的日益发展,图形液晶显示技术也有了不断的进步。
图形液晶显示作为显示终端,图形液晶显示器主要用来显示图形、汉字和字符。
KSO1O8是一种常用的功能较强的一种图形液晶显示控制器,而C语言作为单片机编程语言具有通用性和移植性强的等特点。
开发基于C语言的KS0108显示驱动程序,可被其他应用系统直接嵌入和移植使用,节约了使用者单独编程和开发的时间和效率,对简化工业控制设计过程和缩短设计周期有着非常积极和促进作用。
1.3论文的主要任务
本论文的主要任务是实现12864液晶的图形显示及滚动仿真。
我选用的是Proteus软件中自带的AMPIRE128×64液晶(基于KS0108控制器),重点分析了KS0108的指令系统以及编程方法。
以AT89C51为核心控制器,通过程序设计,实现汉字和图形的显示。
然后通过按键控制汉字和图形的滚动显示。
论文前期主要任务为搜集12864液晶资料,重点掌握其工作原理;论文中期任务主要为通过对12864液晶的指令系统的掌握,编写程序代码,在Proteus软件中进行仿真调试,同时开始论文的写作。
论文后期主要任务为完善程序的设计,仿真的结果以及论文的写作。
2硬件电路设计
2.1硬件系统结构图
此设计控制系统由AT89C51单片机芯片、LCD显示电路、复位电路、晶体振荡电路和按键组成,如图1所示:
图1总设计框图
2.2AT89C51单片机最小系统设计
单片机最小系统主要由单片机AT89C51、电源电路、复位电路、时钟电路组成。
2.2.1AT89C51单片机
AT89C51是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C51单片机在电子行业中有着广泛的应用。
其主要功能特性有以下几点:
(1)与MCS-51产品指令系统完全兼容
(2)4k字节可反复擦写(大于1000次)FlashROM;
(3)32个可编程I/O口线;
(4)128x8bit内部RAM;
(5)2个16位可编程定时/计数器中断;
(6)时钟频率0-24MHz;
(7)可编程UART串行通道;
(8)6个中断源;
(9)三级加密程序存储器;
(10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
(11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
AT89C51为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc51相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
其引脚图如图2所示。
图2AT89C51引脚图
2.2.2时钟电路设计
单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得到的时钟信号比较稳定,实际使用中常采用这种方式。
图3振荡电路图
2.2.3复位电路设计
单片机在启动运行时,都需要先复位,它的作用是使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。
MCS-51系列单片机本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。
复位电路的作用就是使单片机在上电时能够复位或运行出错时进行复位状态。
图4按键与上电复位电路
2.3AMPIRE128*64简介
本系统采用液晶显示模块AMPIRE128X64,为单色LCD,其外形如图5所示。
屏幕分为两半控制,控制引脚为CS1和CS2,数据通过移位寄存器输入。
图5AMPIRE128*64外形图
管脚一共18个。
CS1左半屏片选端,CS2右半屏片选端;VCC、GND就是VCC、GND,没啥好说的;V0液晶显示驱动电压,在网上找的仿真实例中有的这个脚就悬空,我是通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,有的资料上也叫D/I,我估计是DATA和INSTRUCTIONS这两个单词的缩写;R/W读写选择信号,H为读,L为写,这肯定是READ和WRITE的缩写。
E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0,如果只写不读的话可以接地处理。
DB0-DB7数据传输端口。
RST复位信号,不过还没弄明白是怎么回事,参考一些资料后接VCC处理。
-VOUT估计和V0差不多,液晶显示驱动电压。
2.3.1点阵LCD的显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?
这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图6所示:
图6“A”字模图
而中文的“你”在字模中的记载却如图7所示:
图7“A”字模图
2.3.2读操作时序
读操作时序如图8所示:
图8读操作时序图
2.3.3写操作时序
写操作时序如图9所示:
图9写操作时序图
2.4AMPIRE128*64的指令系统
此类液晶显示模块的指令系统比较简单,共有七种。
其指令如表2所示。
1.显示开/关指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
0
0
0
1
1
1
1
1
D
D=1:
开显示(DISPLAYON)意即显示器可以进行各种显示操作
D=0:
关显示(DISPLAYOFF)意即不能对显示器可以进行各种显示操作
2.显示起始行设置指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
0
1
1
A5
A4
A3
A2
A1
A0
前面在Z地址计数器一节已经描述了显示起始行是由Z地址计数器控制的。
A5∽A0的6位地址自动送入Z地址计数器,起始行的地址可以是0∽63的任意一行。
例如:
选择A5∽A0是62,则起始行与DDRAM行的对应关系如下:
DDRAM行:
62630123·····················2829
屏幕显示行:
123456·····················3132
3.页设置指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
0
1
0
1
1
1
A2
A1
A0
所谓页地址就是DDRAM的行地址,8行为一页,模块共64行即8页,A2∽A0表示0∽7页。
读写数据对地址没有影响,页地址由本指令或RST信号改变复位后页地址为0。
页地址与DDRAM的对应关系见DDRAM地址表。
4.列地址设置指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
0
0
1
A5
A4
A3
A2
A1
A0
此指令的作用是将A5∽A0送入列地址计数器,作为DDRAM的列地址指针。
在对DDRAM进行读写操作后,列地址指针自动加1,指向下一个DDRAM单元。
DDRAM地址表如表1所示:
CS1=1
CS2=1
Y=
0
1
···
62
63
0
1
···
62
63
行号
X=0
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
0
↓
7
↓
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
DB0
↓
DB7
8
↓
55
X=7
DB0
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
DBO
↓
DB7
56
↓
63
表1DDRAM的地址与显示位置关系对照图
5.读状态指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
1
BUSY
0
ON/
OFF
RET
0
0
0
0
当R/W=1D/I=0时,在E信号为“H”的作用下,状态分别输出到数据总线(DB7∽DB0)的相应位。
ON/OFF:
表示DFF触发器的状态(见DFF触发器一节)。
RST:
RST=1表示内部正在初始化,此时组件不接受任何指令和数据。
6.写数据指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
0
1
D7
D6
D5
D4
D3
D2
D1
D0
D7∽D0为显示数据,此指令把D7∽D0写入相应的DDRAM单元,Y地指针自动加1。
7.读数据指令
代码
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
形式
1
1
D7
D6
D5
D4
D3
D2
D1
D0
此指令把DDRAM的内容D7∽D0读到数据总线DB7∽DB0,Y地址指针自动加1。
由RAM地址映射表可知LCD显示屏由两片控制器控制,分别用CS1和CS2控制。
每个内部带有64X64位(512字节)的RAM缓冲区,对应关系如图3所示。
图3LCD地址映射图
整个屏幕分左、右两个屏,每个半屏右8页,每页有8行,注意数据是竖行排列。
显示一个字要16*16点,全屏有128*64个点,故可显示32个中文汉字。
每两页显示一行汉字,可显示4行汉字,每行8个汉字,共32个汉字。
而显示数据需要16*8个点,可显示数据是汉字的两陪。
屏幕是通过CS1、CS2两信号来控制的,不同的组合方式所选的屏幕是不同的,对应关系如表6所示。
CS1
CS2
选屏
0
0
全屏
0
1
左屏
1
0
右屏
1
1
不选
表6屏幕选择表
2.5LCD与单片机接口
AMPIRE128*64液晶的引脚如表2所示:
管脚号
管脚名称
LEVER
管脚功能描述
1
CS1
H/L
H:
选择芯片(右半屏)信号
2
CS2
H/L
H:
选择芯片(左半屏)信号
3
GND
0
电源地
4
VCC
+5.0V
电源电压
5
V0
-
液晶显示器驱动电压
6
RS
H/L
RS=“H”,表示DB7∽DB0为显示数据
RS=“L”,表示DB7∽DB0为显示指令数据
7
R/W
H/L
R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
8
E
H/L
R/W=“L”,E信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
9
DB0
H/L
数据线
10
DB1
H/L
数据线
11
DB2
H/L
数据线
12
DB3
H/L
数据线
13
DB4
H/L
数据线
14
DB5
H/L
数据线
15
DB6
H/L
数据线
16
DB7
H/L
数据线
17
RST
H/L
复位信号,低电平复位
18
VOUT
-10V
LCD驱动负电压
表2AMPIRE128*64的引脚
在使用12864LCD前先必须了解以下功能器件才能进行编程。
12864内部功能器件及相关功能如下:
1.指令寄存器(IR)
IR是用于寄存指令码,与数据寄存器数据相对应。
当D/I=0时,在E信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)
DR是用于寄存数据的,与指令寄存器寄存指令相对应。
当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。
DR和DDRAM之间的数据传输是模块内部自动执行的。
3.忙标志:
BF
BF标志提供内部工作情况。
BF=1表示模块在内部操作,此时模块不接受外部指令和数据。
BF=0时,模块为准备状态,随时可接受外部指令和数据。
利用STATUSREAD指令,可以将BF读到DB7总线,从检验模块之工作状态。
4.显示控制触发器DFF
此触发器是用于模块屏幕显示开和关的控制。
DFF=1为开显示(DISPLAYOFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAYOFF)。
DDF的状态是指令DISPLAYON/OFF和RST信号控制的。
5.XY地址计数器
XY地址计数器是一个9位计数器。
高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。
X地址计数器是没有记数功能的,只能用指令设置。
Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
6.显示数据RAM(DDRAM)
DDRAM是存储图形显示数据的。
数据为1表示显示选择,数据为0表示显示非选择。
DDRAM与地址和显示位置的关系见DDRAM地址表。
7.Z地址计数器
Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。
当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。
Z地址计数器可以用指令DISPLAYSTARTLINE预置。
因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。
此模块的DDRAM共64行,屏幕可以循环滚动显示64行。
2.6电路设计图
电路设计图如图10所示:
图10电路设计图
3程序设计
3.1keil简介
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
3.2程序流程图
基于单片机的12864液晶显示软件设计主要由显示子程序、读出并处理12864LCD显示程序等组成。
为了充分发挥AT89C51优越的性能价格比,系统软件采用C语言编写以增强系统的实时性。
在设计上尽量做到硬件“软化”,使系统硬件设计得到简化。
程序流程图如图11所示。
图11程序流程图
3.312864LCD主程序
3.3.1引脚定义
sbitRS=P1^0;//RS为0---命令;1----数据
sbitRW=P1^1;//RW为1---写;0---读
sbitEN=P1^2;//使能端
sbitCS1=P2^1;//片选1低电平有效,控制左半屏
sbitCS2=P2^0;//片选1低电平有效,控制右半屏
sbitKEY1=P3^0;
sbitKEY2=P3^1;
sbitKEY3=P3^2;
sbitKEY4=P3^3;//四个按键控制口
3.3.2读写操作
ucharRead_LCD(void)//读数据函数
{
ucharvalue;
Read_busy();
LCD_databus=0xFF;//先进行一次空读操作
RS=1;
RW=1;
EN=1;
_nop_();
_nop_();
EN=0;
LCD_databus=0xFF;//读取真正的数据
RS=1;
RW=1;
EN=1;
value=LCD_databus;
_nop_();
_nop_();
EN=0;
returnvalue;
}
voidwrite_LCD_data(uchardat)//写数据函数
{
Read_busy();
RS=1;//选择数据
RW=0;
LCD_databus=dat;
EN=1;//EN由1----0锁存有效数据
_nop_();
_nop_();
EN=0;
}
3.3.3设置指令
voidSet_pag