LCD12864不带字库 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.height>'700')this.height='700';">






在使用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时,模块为准备状态,随时可接受外部指令和数据。

利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。

4.显示控制触发器DFF

此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。

DDF的状态是指令DISPLAY ON/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)

LCD12864(不带字库) lcd12864字库表
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.height>'700')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/不亦心/

;*********************************************
;#############################################
;//////变量申明///////////////////////////////
E BITP3.0 ;LCD 使能端
RWBITP3.1 ;LCD 读/写端
RSBITP3.2 ;命令/数据控制端
CS1 BITP3.3 ;左半屏
CS2 BITP3.4 ;右半屏
WR_DATA DATA 30H ;数据暂存区
Y DATA 31H ;列数据暂存区
;//////主程序开始//////////////////////////////
ORG 0000H
AJMPSTART
ORG 0030H
START:MOV SP,#60H ;设置堆栈
LCALL CLR_Screen;调用清屏子程序
LCALL Init;调用初始化子程序
;------左半屏显示------------------------------
REP:MOV R2,#00H ;用于记录显示个数
MOV Y,#00H;用于增加LCD列数
MOV DPTR,#TAB ;取字码
;------左上半字显示------------------------------
REP1: MOV R3,#10H ;记录列数
MOV WR_DATA,#0C0H ;设置行数(第一行开始显示)
LCALL WR_Left_COM ;调用左半屏写命令子程序
MOV WR_DATA,#0BBH ;设置页数(第4页)
LCALL WR_Left_COM
CLR A ;设置显示开始列数
ADD A,Y
ADD A,#50H
MOV WR_DATA,A
LCALL WR_Left_COM
REP2: MOV A,#00H
MOVCA,@A+DPTR
MOV WR_DATA,A
LCALL WR_Left_Byte ;调用左半屏写数据子程序
INC DPTR
DJNZR3,REP2
;------左下半字显示--------------------------------
MOV R3,#10H;左下
MOV WR_DATA,#0C0H
LCALL WR_Left_COM
MOV WR_DATA,#0BCH ;第五页
LCALL WR_Left_COM
CLR A
ADD A,Y
ADD A,#50H
MOV WR_DATA,A
LCALL WR_Left_COM
REP3: MOV A,#00H
MOVCA,@A+DPTR
MOV WR_DATA,A
LCALL WR_Left_Byte
INC DPTR
DJNZR3,REP3
;------实现左半屏显示3个字---------------------------
INC R2
MOV A,y
ADD A,#10H
MOV Y,A
CJNER2,#03H,REP1
;------右半屏显示------------------------------------
MOV R2,#00H
MOV Y,#00H
;------右上半字显示----------------------------------
REP4:MOV R3,#10H
MOV WR_DATA,#0C0H
LCALL WR_Right_COM ;调用右半屏写入命令子程序
MOV WR_DATA,#0BBH
LCALL WR_Right_COM
CLR A
ADD A,Y
ADD A,#40H
MOV WR_DATA,A
LCALL WR_Right_COM
REP5: MOV A,#00H
MOVCA,@A+DPTR
MOV WR_DATA,A
LCALL WR_Right_Byte ;调用右半屏写入数据子程序
INC DPTR
DJNZR3,REP5
;------右下半字显示----------------------------------
MOV R3,#10H
MOV WR_DATA,#0C0H
LCALL WR_Right_COM
MOV WR_DATA,#0BCH
LCALL WR_Right_COM
CLR A
ADD A,Y
ADD A,#40H
MOV WR_DATA,A
LCALL WR_Right_COM
REP6: MOV A,#00H
MOVCA,@A+DPTR
MOV WR_DATA,A
LCALL WR_Right_Byte
INC DPTR
DJNZR3,REP6
;------实现右半屏显示2个字-----------------------------
INC R2
MOV A,y
ADD A,#10H
MOV Y,A
CJNER2,#02H,REP4
;------循环显示----------------------------------------
LJMPREP
;//////初始化子程序///////////////////////////////////
Init: MOV WR_DATA,#3EH ;关显示
LCALL WR_COM ;调用全屏写入命令子程序
MOV WR_DATA,#3FH ;开显示
LCALL WR_COM
RET
;//////左半屏写入字节子程序///////////////////////////
WR_Left_Byte: CLR CS1 ;选择左半屏
SETBCS2
CLR RW ;写
SETBRS ;选择写命令
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY;调用延时子程序,这里用延时来代替忙信号检测
RET
;//////右半屏写入字节子程序///////////////////////////////
WR_Right_Byte: SETB CS1
CLR CS2
CLR RW
SETBRS
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY
RET
;//////全屏写入字节子程序////////////////////////////////
WR_Byte:CLR CS1
CLR CS2
CLR RW
SETBRS
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY
RET
;//////左半屏写入命令子程序/////////////////////////////
WR_Left_COM: CLR CS1
SETBCS2
CLR RS
CLR RW
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY
RET
;//////右半屏写入命令子程序//////////////////////////////////
WR_Right_COM: SETB CS1
CLR CS2
CLR RS
CLR RW
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY
RET
;//////全屏写入命令字程序/////////////////////////////////////
WR_COM: CLR CS1
CLR CS2
CLR RS
CLR RW
MOV A,WR_DATA
SETBE
MOV P0,A
CLR E
LCALL DELAY
RET
;//////全屏清屏子程序//////////////////////////////////////////
CLR_Screen: MOV WR_DATA,#0C0H
LCALL WR_COM
MOV R0,#0B8H
MOV R1,#00H
LOOP: MOV WR_DATA,R0
LCALL WR_COM
MOV WR_DATA,#40H
LCALL WR_COM
LOOP1:MOV WR_DATA,#0FFH ;全屏清黑(这里我是用反色显示汉字的)
LCALL WR_Byte
INC R1
CJNER1,#40H,LOOP1
INC R0
CJNER0,#0C0H,LOOP
RET
;//////延时子程序//////////////////////////////////
DELAY:MOV R7,#25H
DJNZR7,$
RET
;//////字型码表////////////////////////////////////
TAB:
;-- 文字: 不 --
;-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --
DB 0FFH,0FFH,0FFH,0DFH,0CFH,0CFH,0DFH,1FH,1FH,5FH,0DFH,0DFH,0DFH,0FFH,0FFH,0FFH
DB 0FFH,0F7H,0F7H,0F3H,0FBH,0F9H,0FCH,0C0H,0C0H,0FFH,0FEH,0FCH,0F1H,0F3H,0F7H,0F7H

;-- 文字: 亦 --
;-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --
DB 0FFH,0BFH,0BFH,0BFH,3FH,0DFH,1FH,0CFH,0CFH,1FH,0DFH,9FH,9FH,0BFH,0BFH,0FFH
DB 0FFH,0FFH,0EBH,0ECH,0E6H,0F3H,0F8H,0EFH,0EFH,0E0H,0FFH,0FEH,0FDH,0FBH,0FFH,0FFH

;-- 文字: 心 --
;-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --
DB 0FFH,0FFH,7FH,0FFH,7FH,0FFH,0FFH,3FH,8FH,0FFH,7FH,3FH,0BFH,0FFH,0FFH,0FFH
DB 0F7H,0F1H,0F8H,0FFH,0FEH,0FEH,0FCH,0F9H,0F3H,0F1H,0E6H,0E7H,0C7H,0E7H,0E7H,0FFH

;-- 文字: 制 --
;-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --
DB 0FFH,7FH,0BFH,8FH,0BFH,0FH,2FH,3FH,0BFH,0FFH,1FH,0FFH,0CFH,0FH,0FFH,0FFH
DB 0FEH,0FEH,0EEH,0E0H,0FCH,0C0H,0FCH,0F9H,0E1H,0EFH,0E8H,0CFH,0C7H,0E0H,0FFH,0FFH

;-- 文字: 作 --
;-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --
DB 0FFH,9FH,9FH,1FH,1FH,6FH,0BFH,9FH,0CFH,0FH,9FH,9FH,9FH,0BFH,0BFH,0FFH
DB 0FFH,0FFH,0FFH,0E0H,0E0H,0FFH,0FFH,0FFH,0FFH,0C0H,0FAH,0FAH,0FAH,0FAH,0FBH,0FFH
;//////程序结束/////////////////////////////////////////////
END

以上程序我用的是反显。
→↑← THREE→硬件连接及仿真效果图(仅为仿真目的,不做实际应用)


'700')this.width='700';if(this.height>'700')this.height='700';">

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/63570.html

更多阅读

不带R的月份不吃蚝 r语言 月份

好友W从岛上来温哥华过圣诞,也带来了亲自赶海收获的蚝。西方有句俗语说:“不带R的月份不吃蚝(Don't eat oystersunless there is an R in themonth)”,就是说,吃蚝的最佳月份是每年九月至来年四月(Sept

动态图一组 你特么的,不带这样吓人的好不好… 突然吓人动态图

你特么的,不带这样吓人的好不好…世界上最温暖的三个字,不是“我爱你”,不是“我想你”,不是“相信我”,而是“随便花”。。。姑娘你这是干嘛~~~~这是我见过史上最贱的熊,没有之一!(转)看什么看!!!!!”卧槽,这货太带感了。。。你特么!想上我没那么容

骂人不带脏话的狠语句 骂人脏话越脏越好

骂人不带脏话的狠语句 分享转载复制地址日志地址:请用Ctrl+C复制后贴给好友。转播到微博转载自 1419786428 2011年06月18日 21:25 阅读(212) 评论(0) 分类:个人日记举报字体:中▼ 小中大1、长的惊险.....有创

《转》骂人不带脏字的狠话 骂人不带脏字的狠话长

应网友要求,整理了一篇骂人的话 越毒越好的骂人宝典,包括骂人带脏字的话和骂人不带脏字的话。当然,骂人是不对的,骂人是不好的,越毒越好的骂人就更不可取了,骂人要慎重啊。骂人带脏字的话:??你从小缺钙,长大缺爱,姥姥不疼,舅舅不爱。左脸欠抽,

声明:《LCD12864不带字库 lcd12864字库表》为网友孤独密分享!如侵犯到您的合法权益请联系我们删除