资源预览内容
第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
第9页 / 共15页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
LCD12864(不带字库)LCD12864(不带字库)其实看了本版的 1602 教程以后很容易就可以掌握 12864 了。刚才看到有网友要 12864 教程, 俺就把博客里以前练习的一个程序弄过来,算作参考吧。不足之处请见谅。这个程序浪费了我很多时间,因为我一直没有找到 datasheet,12864 的型号实在太多了。为了这个程序,我在网上找了很多相关的例程,但大多都是 C 语言写的,可惜俺没学过 C,用起来不顺手,遂将其转成汇编,但是转后, 程序运行不正常, 郁闷啊。 好不容易找个汇编的吧,又写得很乱,没有头绪,没有 datasheet,看起来很费劲,最后终于找到一个相关的 datasheet,这才完成这个程序。总结一下:与其费力分析别人的程序,不如看 datasheet 自己写。下面总结一下 datasheet。→↑←ONE→且看 datasheet:12864 点阵型 LCD 简介12864 是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及 128×64 全点阵液晶显示器组成。 可完成图形显示,也可以显示 8×4 个(16×16 点阵)汉字。700)this.width=700;if(this.height700)this.height=700;在使用 12864LCD 前先必须了解以下功能器件才能进行编程。 12864内部功能器件及相关功能如下: 1. 指令寄存器(IR)IR 是用于寄存指令码,与数据寄存器数据相对应。当 D/I=0时,在 E 信号下降沿的作用下,指令码写入 IR。2数据寄存器(DR)DR 是用于寄存数据的,与指令寄存器寄存指令相对应。当 D/I=1 时,在下降沿作用下,图形显示数据写入 DR,或在 E 信号高电平作用下由 DR 读到 DB7DB0 数据总线。DR 和 DDRAM 之间的数据传输是模块内部自动执行的。 3 忙标志:BFBF 标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0 时,模块为准备状态,随时可接受外部指令和数据。利用 STATUS READ 指令,可以将 BF 读到 DB7 总线,从检验模块之工作状态。4显示控制触发器 DFF此触发器是用于模块屏幕显示开和关的控制。DFF=1 为开显示(DISPLAY OFF) , DDRAM 的内容就显示在屏幕上, DFF=0为关显示(DISPLAY OFF) 。DDF 的状态是指令DISPLAY ON/OFF 和 RST 信号控制的。5XY 地址计数器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地址计数器可以用指令 DISPLAY START LINE 预置。 因此,显示屏幕的起始行就由此指令控制,即 DDRAM 的数据从哪一行开始显示在屏幕的第一行。 此模块的DDRAM共64行,屏幕可以循环滚动显示 64 行。12864LCD 的指令系统及时序该类液晶显示模块(即 KS0108B 及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表 2所示:700)this.width=700;if(this.height700)this.height=700;其他的自己下个 datasheet 好好看吧,这里不再截图了。不过我要强调关于行列和页的解释: 从上向下共 64 行, 每 8行为一页, 共八页, 从左到右共 128 列, 左半屏 0 到 63 列,右半屏 0 到 63 列。显示的时候,每页以列为单位显示。→↑← TWO→程序实例:;#;*;程序名称:LCD12864;主控芯片:89c51,12MHZ;编者心得:看别人程序不如仔细看 datasheet;移用核心:看 datasheet 按需要修改即可;程序编写者:buyixin (不亦心);编写时间:2009 年 10 月 10 日 20:33;不亦心的博客:http:/hi.baidu.com/不亦心/;*;#;/变量申明/EBITP3.0 ;LCD 使能端RWBITP3.1 ;LCD 读/写端RSBITP3.2 ;命令/数据控制端CS1BITP3.3 ;左半屏CS2BITP3.4 ;右半屏WR_DATADATA30H ;数据暂存区YDATA31H ;列数据暂存区;/主程序开始/ORG0000HAJMPSTARTORG0030HSTART:MOV SP,#60H;设置堆栈LCALLCLR_Screen;调用清屏子程序LCALLInit;调用初始化子程序;-左半屏显示-REP:MOV R2,#00H;用于记录显示个数MOVY,#00H;用于增加 LCD 列数MOVDPTR,#TAB;取字码;-左上半字显示-REP1:MOV R3,#10H;记录列数MOVWR_DATA,#0C0H ;设置行数(第一行开始显示)LCALLWR_Left_COM;调用左半屏写命令子程序MOVWR_DATA,#0BBH ;设置页数(第 4 页)LCALLWR_Left_COMCLRA;设置显示开始列数ADDA,YADDA,#50HMOVWR_DATA,ALCALLWR_Left_COMREP2:MOV A,#00HMOVCA,A+DPTRMOVWR_DATA,ALCALLWR_Left_Byte ;调用左半屏写数据子程序INCDPTRDJNZR3,REP2;-左下半字显示-MOVR3,#10H;左下MOVWR_DATA,#0C0HLCALLWR_Left_COMMOVWR_DATA,#0BCH ;第五页LCALLWR_Left_COMCLRAADDA,YADDA,#50HMOVWR_DATA,ALCALLWR_Left_COMREP3:MOV A,#00HMOVCA,A+DPTRMOVWR_DATA,ALCALLWR_Left_ByteINCDPTRDJNZR3,REP3;-实现左半屏显示 3 个字-INCR2MOVA,yADDA,#10HMOVY,ACJNER2,#03H,REP1;-右半屏显示-MOVR2,#00HMOVY,#00H;-右上半字显示-REP4:MOV R3,#10HMOVWR_DATA,#0C0HLCALLWR_Right_COM ;调用右半屏写入命令子程序MOVWR_DATA,#0BBHLCALLWR_Right_COMCLRAADDA,YADDA,#40HMOVWR_DATA,ALCALLWR_Right_COMREP5:MOV A,#00HMOVCA,A+DPTRMOVWR_DATA,ALCALLWR_Right_Byte ;调用右半屏写入数据子程序INCDPTRDJNZR3,REP5;-右下半字显示-MOVR3,#10HMOVWR_DATA,#0C0HLCALLWR_Right_COMMOVWR_DATA,#0BCHLCALLWR_Right_COMCLRAADDA,YADDA,#40HMOVWR_DATA,ALCALLWR_Right_COMREP6:MOV A,#00HMOVCA,A+DPTRMOVWR_DATA,ALCALLWR_Right_ByteINCDPTRDJNZR3,REP6;-实现右半屏显示 2 个字-INCR2MOVA,yADDA,#10HMOVY,ACJNER2,#02H,REP4;-循环显示-LJMPREP;/初始化子程序/Init:MOV WR_DATA,#3EH ;关显示LCALLWR_COM;调用全屏写入命令子程序MOVWR_DATA,#3FH;开显示LCALLWR_COMRET;/左半屏写入字节子程序/WR_Left_Byte: CLR CS1;选择左半屏SETBCS2CLRRW;写SETBRS;选择写命令MOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAY;调用延时子程序,这里用延时来代替忙信号检测RET;/右半屏写入字节子程序/WR_Right_Byte: SETB CS1CLRCS2CLRRWSETBRSMOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAYRET;/全屏写入字节子程序/WR_Byte:CLR CS1CLRCS2CLRRWSETBRSMOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAYRET;/左半屏写入命令子程序/WR_Left_COM: CLR CS1SETBCS2CLRRSCLRRWMOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAYRET;/右半屏写入命令子程序/WR_Right_COM: SETB CS1CLRCS2CLRRSCLRRWMOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAYRET;/全屏写入命令字程序/WR_COM:CLR CS1CLRCS2CLRRSCLRRWMOVA,WR_DATASETBEMOVP0,ACLRELCALLDELAYRET;/全屏清屏子程序/CLR_Screen: MOV WR_DATA,#0C0HLCALLWR_COMMOVR0,#0B8HMOVR1,#00HLOOP:MOV WR_DATA,R0LCALLWR_COMMOVWR_DATA,#40HLCALLWR_COMLOOP1:MOV WR_DATA,#0FFH ;全屏清黑(这里我是用反色显示汉字的)LCALLWR_ByteINCR1CJNER1,#40H,LOOP1INCR0CJNER0,#0C0H,LOOPRET;/延时子程序/DELAY:MOV R7,#25HDJNZR7,$RET;/字型码表/TAB:;- 文字: 不 -;- 隶书 12; 此字体下对应的点阵为:宽 x 高=16x16-DB0FFH,0FFH,0FFH,0DFH,0CFH,0CFH,0DFH,1FH,1FH,5FH,0DFH,0DFH,0DFH,0FFH,0FFH,0FFHDB0FFH,0F7H,0F7H,0F3H,0FBH,0F9H,0FCH,0C0H,0C0H,0FFH,0FEH,0FCH,0F1H,0F3H,0F7H,0F7H;- 文字: 亦 -;- 隶书 12; 此字体下对应的点阵为:宽 x 高=16x16-DB0FFH,0BFH,0BFH,0BFH,3FH,0DFH,1FH,0CFH,0CFH,1FH,0DFH,9FH,9FH,0BFH,0BFH,0FFHDB0FFH,0FFH,0EBH,0ECH,0E6H,0F3H,0F8H,0EFH,0EFH,0E0H,0FFH,0FEH,0FDH,0FBH,0FFH,0FFH;- 文字: 心 -;- 隶书 12; 此字体下对应的点阵为:宽 x 高=16x16-DB0FFH,0FFH,7FH,0FFH,7FH,0FFH,0FFH,3FH,8FH,0FFH,7FH,3FH,0BFH,0FFH,0FFH,0FFHDB0F7H,0F1H,0F8H,0FFH,0FEH,0FEH,0FCH,0F9H,0F3H,0F1H,0E6H,0E7H,0C7H,0E7H,0E7H,0FFH;- 文字: 制 -;- 隶书 12; 此字体下对应的点阵为:宽 x 高=16x16-DB0FFH,7FH,0BFH,8FH,0BFH,0FH,2FH,3FH,0BFH,0FFH,1FH,0FFH,0CFH,0FH,0FFH,0FFHDB0FEH,0FEH,0EEH,0E0H,0FCH,0C0H,0FCH,0F9H,0E1H,0EFH,0E8H,0CFH,0C7H,0E0H,0FFH,0FFH;- 文字: 作 -;- 隶书 12; 此字体下对应的点阵为:宽 x 高=16x16-DB0FFH,9FH,9FH,1FH,1FH,6FH,0BFH,9FH,0CFH,0FH,9FH,9FH,9FH,0BFH,0BFH,0FFHDB0FFH,0FFH,0FFH,0E0H,0E0H,0FFH,0FFH,0FFH,0FFH,0C0H,0FAH,0FAH,0FAH,0FAH,0FBH,0FFH;/程序结束/END 以上程序我用的是反显。→↑← THREE→硬件连接及仿真效果图(仅为仿真目的,不做实际应用)700)this.width=700;if(this.height700)this.height=700;
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号