LCD12864不带字库Word文档格式.docx
《LCD12864不带字库Word文档格式.docx》由会员分享,可在线阅读,更多相关《LCD12864不带字库Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
)this.width='
;
if(this.height>
)this.height='
"
>
在使用12864LCD前先必须了解以下功能器件才能进行编程。
12864内部功能器件及相关功能如下:
1.指令寄存器(IR)IR是用于寄存指令码,与数据寄存器数据相对应。
当D/I=0时,在E信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)DR是用于寄存数据的,与指令寄存器寄存指令相对应。
当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。
DR和DDRAM之间的数据传输是模块内部自动执行的。
3.忙标志:
BFBF标志提供内部工作情况。
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行。
12864LCD的指令系统及时序该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。
其指令表如表2所示:
其他的自己下个datasheet好好看吧,这里不再截图了。
不过我要强调关于行列和页的解释:
从上向下共64行,每8行为一页,共八页,从左到右共128列,左半屏0到63列,右半屏0到63列。
显示的时候,每页以列为单位显示。
TWO&
程序实例:
#############################################
*********************************************
程序名称:
LCD12864
主控芯片:
89c51,12MHZ
编者心得:
看别人程序不如仔细看datasheet
移用核心:
看datasheet按需要修改即可
程序编写者:
buyixin(不亦心)
编写时间:
2009年10月10日20:
33;
不亦心的博客:
//////变量申明///////////////////////////////
EBITP3.0;
LCD使能端
RWBITP3.1;
LCD读/写端
RSBITP3.2;
命令/数据控制端
CS1BITP3.3;
左半屏
CS2BITP3.4;
右半屏
WR_DATADATA30H;
数据暂存区
YDATA31H;
列数据暂存区
//////主程序开始//////////////////////////////
ORG0000H
AJMPSTART
ORG0030H
START:
MOVSP,#60H;
设置堆栈
LCALLCLR_Screen;
调用清屏子程序
LCALLInit;
调用初始化子程序
------左半屏显示------------------------------
REP:
MOVR2,#00H;
用于记录显示个数
MOVY,#00H;
用于增加LCD列数
MOVDPTR,#TAB;
取字码
------左上半字显示------------------------------
REP1:
MOVR3,#10H;
记录列数
MOVWR_DATA,#0C0H;
设置行数(第一行开始显示)
LCALLWR_Left_COM;
调用左半屏写命令子程序
MOVWR_DATA,#0BBH;
设置页数(第4页)
LCALLWR_Left_COM
CLRA;
设置显示开始列数
ADDA,Y
ADDA,#50H
MOVWR_DATA,A
LCALLWR_Left_COM
REP2:
MOVA,#00H
MOVCA,@A+DPTR
LCALLWR_Left_Byte;
调用左半屏写数据子程序
INCDPTR
DJNZR3,REP2
------左下半字显示--------------------------------
MOVR3,#10H;
左下
MOVWR_DATA,#0C0H
MOVWR_DATA,#0BCH;
第五页
CLRA
REP3:
LCALLWR_Left_Byte
DJNZR3,REP3
------实现左半屏显示3个字---------------------------
INCR2
MOVA,y
ADDA,#10H
MOVY,A
CJNER2,#03H,REP1
------右半屏显示------------------------------------
MOVR2,#00H
MOVY,#00H
------右上半字显示----------------------------------
REP4:
MOVR3,#10H
LCALLWR_Right_COM;
调用右半屏写入命令子程序
MOVWR_DATA,#0BBH
LCALLWR_Right_COM
ADDA,#40H
REP5:
LCALLWR_Right_Byte;
调用右半屏写入数据子程序
DJNZR3,REP5
------右下半字显示----------------------------------
MOVR3,#10H
LCALLWR_Right_COM
MOVWR_DATA,#0BCH
REP6:
LCALLWR_Right_Byte
DJNZR3,REP6
------实现右半屏显示2个字-----------------------------
CJNER2,#02H,REP4
------循环显示----------------------------------------
LJMPREP
//////初始化子程序///////////////////////////////////
Init:
MOVWR_DATA,#3EH;
关显示
LCALLWR_COM;
调用全屏写入命令子程序
MOVWR_DATA,#3FH;
开显示
LCALLWR_COM
RET
//////左半屏写入字节子程序///////////////////////////
WR_Left_Byte:
CLRCS1;
选择左半屏
SETBCS2
CLRRW;
写
SETBRS;
选择写命令
MOVA,WR_DATA
SETBE
MOVP0,A
CLRE
LCALLDELAY;
调用延时子程序,这里用延时来代替忙信号检测
RET
//////右半屏写入字节子程序///////////////////////////////
WR_Right_Byte:
SETBCS1
CLRCS2
CLRRW
SETBRS
LCALLDELAY
//////全屏写入字节子程序////////////////////////////////
WR_Byte:
CLRCS1
//////左半屏写入命令子程序/////////////////////////////
WR_Left_COM:
SETBCS2
CLRRS
//////右半屏写入命令子程序//////////////////////////////////
WR_Right_COM:
SETBCS1
//////全屏写入命令字程序/////////////////////////////////////
WR_COM:
//////全屏清屏子程序//////////////////////////////////////////
CLR_Screen:
MOVWR_DATA,#0C0H
MOVR0,#0B8H
MOVR1,#00H
LOOP:
MOVWR_DATA,R0
MOVWR_DATA,#40H
LOOP1:
MOVWR_DATA,#0FFH;
全屏清黑(这里我是用反色显示汉字的)
LCALLWR_Byte
INCR1
CJNER1,#40H,LOOP1
INCR0
CJNER0,#0C0H,LOOP
//////延时子程序//////////////////////////////////
DELAY:
MOVR7,#25H
DJNZR7,$
//////字型码表////////////////////////////////////
TAB:
--文字:
不--
--隶书12;
此字体下对应的点阵为:
宽x高=16x16--
DB0FFH,0FFH,0FFH,0DFH,0CFH,0CFH,0DFH,1FH,1FH,5FH,0DFH,0DFH,0DFH,0FFH,0FFH,0FFH
DB0FFH,0F7H,0F7H,0F3H,0FBH,0F9H,0FCH,0C0H,0C0H,0FFH,0FEH,0FCH,0F1H,0F3H,0F7H,0F7H;
亦--
DB0FFH,0BFH,0BFH,0BFH,3FH,0DFH,1FH,0CFH,0CFH,1FH,0DFH,9FH,9FH,0BFH,0BFH,0FFH
DB0FFH,0FFH,0EBH,0ECH,0E6H,0F3H,0F8H,0EFH,0EFH,0E0H,0FFH,0FEH,0FDH,0FBH,0FFH,0FFH;
心--
DB0FFH,0FFH,7FH,0FFH,7FH,0FFH,0FFH,3FH,8FH,0FFH,7FH,3FH,0BFH,0FFH,0FFH,0FFH
DB0F7H,0F1H,0F8H,0FFH,0FEH,0FEH,0FCH,0F9H,0F3H,0F1H,0E6H,0E7H,0C7H,0E7H,0E7H,0FFH;
制--
DB0FFH,7FH,0BFH,8FH,0BFH,0FH,2FH,3FH,0BFH,0FFH,1FH,0FFH,0CFH,0FH,0FFH,0FFH
DB0FEH,0FEH,0EEH,0E0H,0FCH,0C0H,0FCH,0F9H,0E1H,0EFH,0E8H,0CFH,0C7H,0E0H,0FFH,0FFH;
作--
DB0FFH,9FH,9FH,1FH,1FH,6FH,0BFH,9FH,0CFH,0FH,9FH,9FH,9FH,0BFH,0BFH,0FFH
DB0FFH,0FFH,0FFH,0E0H,0E0H,0FFH,0FFH,0FFH,0FFH,0C0H,0FAH,0FAH,0FAH,0FAH,0FBH,0FFH
//////程序结束/////////////////////////////////////////////
END以上程序我用的是反显。
THREE&
硬件连接及仿真效果图(仅为仿真目的,不做实际应用)'