当前位置:文档之家› 12864液晶学习笔记

12864液晶学习笔记

12864液晶学习笔记
12864液晶学习笔记

学习笔记:12864液晶模块的详细使用

(2012-10-17 09:23:32)

转载▼

分类:电子学

标签:

杂谈

备注:这篇文章是对12864操作的具体介绍,仅限刚接触12864的新手,大神请拍砖,文章写的较散,建议先参考12864手册及控制驱动器

ST7920英文手册有个初步理解之后再阅读该篇文章,将会有更深的认识。强烈建议阅读ST7920英文手册,细节内容里面有详细介绍,中文的12864也是从中译过来的。

本文分三个步骤介绍12864的内部资源原理,指令集详细讲解,以及应用例子。

对12864的所有操作概括起来有4种:

1)、读忙状态(同时读出指针地址内容),初始化之后每次对12864的读写均要进行忙检测。

2)、写命令:所有的命令可以查看指令表,后续讲解指令的详细用法。写地址也是写指令。

3)、写数据:操作对象有DDRAM、CGRAM、GDRAM。

4)、读数据:操作对象也是DDRAM、CGRAM、GDRAM。

对12864的学习首相要了解其内部资源,知道了它里面有哪些东西,你就可以更加方便的使用它。

先介绍几个英文的名字:

DDRAM:(Data Display Ram),数据显示RAM,往里面写啥,屏幕就会显示啥。

CGROM:(Character Generation ROM),字符发生ROM。里面存储了中文汉字的字模,也称作中文字库,编码方式有GB2312(中文简体)和BIG5(中文繁体)。笔者使用的是育松电子的QC12864B,讲解以此为例。

CGRAM:(Character Generation RAM),字符发生RAM,,12864内部提供了64×2B的CGRAM,可用于用户自定义4个16×16字符,每个字符占用32个字节。

GDRAM:(Graphic Display RAM):图形显示RAM,这一块区域用于绘图,往里面写啥,屏幕就会显示啥,它与DDRAM的区别在于,往DDRAM中写的数据是字符的编码,字符的显示先是在CGROM中找到

字模,然后映射到屏幕上,而往GDRAM中写的数据时图形的点阵信息,每个点用1bit来保存其显示与否。

HCGROM:(Half height Character Generation ROM):半宽字符发生器,就是字母与数字,也就是ASCII码。

至于ICON RAM(IRAM):貌似市场上的12864没有该项功能,笔者也没有找到它的应用资料,所以不作介绍。

下面就围绕着上面列举的这列资源展开对12864的讲解:

DDRAM:

笔者使用的这块12864内部有4行×32字节的DDRAM空间。但是某一时刻,屏幕只能显示2行×32字节的空间,那么剩余的这些空间呢?它们可以用于缓存,在实现卷屏显示时这些空间就派上用场了。

DDRAM结构如下所示:

80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH

90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH

地址与屏幕显示对应关系如下:

第一行:80H、81H、82H、83H、84H、85H、86H、87H

第二行:90H、91H、92H、93H、94H、95H、96H、97H

第三行:88H、89H、8AH、8BH、8CH、8DH、8EH、8FH

第四行:98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

说明:红色部分的数据归上半屏显示,绿色部分的数据归下半屏显示。一般我们用于显示字符使用的是上面两行的空间,也就是80H~8FH,90H~9FH,每个地址的空间是2个字节,也就是1个字,所以可以用于存储字符编码的空间总共是128字节。因为每个汉字的编码是2个字节,所以每个地址需要使用2个字节来存储一个汉字。当然如果将2个字节拆开来使用也可以,那就是显示2个半宽字符。

DDRAM内部存储的数据是字符的编码,可以写入的编码有ASCII 码、GB2312码、BIG5码。笔者使用的12864字库貌似不太全,字符“数”都无法显示,而是显示其他字符。如果显示长篇汉字文章就不太适合吧。

DDRAM数据读写:

所有的数据读写都是先送地址,然后进行读写。对DDRAM写数据时,确保在基本指令集下(使用指令0x30开启),然后写入地址,之后连续写入两个字节的数据。读数据时,在基本指令集下先写地址,然后假读一次,之后再连续读2个字节的数据,读完之后地址指针自动加一,跳到下一个字,若需要读下一个字的内容,只需再执行连续读2个字节的数据。这里的假读需要注意,不光是读CGRAM需要假读,读其他的GDRAM、DDRAM都需要先假读一次,之后的读才是真读,假读就是读一次数据,但不存储该数据,也就是说送地址之后第一次读的数据时错误的,之后的数据才是正确的。(dummy为假读)

关于编码在DDRAM中的存储需要说明事项如下:

1)、每次对DDRAM的操作单位是一个字,也就是2个字节,当往DDRAM写入数据时,首先写地址,然后连续送入2个字节的数据,先送高字节数据,再送低字节数据。读数据时也是如此,先写地址,然后读出高字节数据,再读出低字节数据(读数据时注意先假读一次)。

2)、显示ASCII码半宽字符时,往每个地址送入2个字节的ASCII 编码,对应屏幕上的位置就会显示2个半宽字符,左边的为高字节字符,右边的为低字节字符。

3)、显示汉字时,汉字编码的2个字节必须存储在同一地址空间中,不能分开放在2个地址存放,否则显示的就不是你想要的字符。每个字中的2个字节自动结合查找字模并显示字符。所以,如果我们往一个地址中写入的是一个汉字的2字节编码就会正确显示该字符,编码高字节存放在前一地址低字节,编码低字节存放在后一地址高字节,显然他们就不会结合查找字模,而是与各地址相应字节结合查找字模。

4)、因为控制器ST7920提供了4个自定义字符,所以这4个自定义字符也是可以显示出来的,同样这4个自定义字符也是采用编码的方式,但是这4个字符的编码是固定的,分别是0000H,0002H,0004H,0006H。如下图所示:

上图只是把2个字符的CGRAM空间画出来,后续还有2个字符。可以看到每个字符都有16行16列,每一行使用2个字节,因此一个字符占用的空间是32字节,地址是6位的,4个字符的地址分别是:00H~0FH、10H~1FH、20H~2FH、30H~3FH。编码使用2个字节,可以看到有2个

位是任意的,说明其实这4个字符的编码可以有多个,只是我们常用前面列举的4个编码。

CGRAM:(数据读写)

CGRAM的结构就是上面所示了,这里再补充一些读写CGRAM的内容,读写之前先写地址,写CGRAM的指令为0x40+地址。但是我们写地址时只需要写第一行的地址,例如第一个字符就是0x40+00H,然后连续写入2个字节的数据,之后地址指针会自动加一,跳到下一行的地址,然后再写入2个字节的数据。其实编程实现就是写入地址,然后连续写入32个字节的数据。读数据也是先写首地址,然后假读一次,接着连续读32个字节的数据。

GDRAM:(绘图显示RAM)

绘图RAM的空间结构如下图所示:

这些都是点阵,绘图RAM就是给这些点阵置1或置0,可以看到其实它本来是32行×256列的,但是分成了上下两屏显示,每个点对应了屏幕上的一个点。要使用绘图功能需要开启扩展指令。然后写地址,再读写数据。

GDRAM的读写:

首先说明对GDRAM的操作基本单位是一个字,也就是2个字节,就是说读写GDRAM时一次最少写2个字节,一次最少读2个字节。

写数据:先开启扩展指令集(0x36),然后送地址,这里的地址与DDRAM中的略有不同,DDRAM中的地址只有一个,那就是字地址。而GDRAM中的地址有2个,分别是字地址(列地址/水平地址X)和位地址(行地址/垂直地址Y),上图中的垂直地址就是00H~31H,水平地址就是00H~15H,写地址时先写垂直地址(行地址)再写水平地址(列地址),也就是连续写入两个地址,然后再连续写入2个字节的数据。如图中所示,左边为高字节右边为低字节。为1的点被描黑,为0的点则显示空白。这里列举个写地址的例子:写GDRAM地址指令是

0x80+地址。被加上的地址就是上面列举的X和Y,假设我们要写第一行的2个字节,那么写入地址就是0x00H(写行地址)然后写0x80H(列地址),之后才连续写入2个字节的数据(先高字节后低字节)。再如写屏幕右下角的2个字节,先写行地址0x9F(0x80+32),再写列地址

0x8F(0x80+15),然后连续写入2个字节的数据。编程中写地址函数中直接用参数(0x+32),而不必自己相加。

读数据:先开启扩展指令集,然后写行地址、写列地址,假读一次,再连续读2字节的数据(先高字节后低字节)。

读写时序:

读写时序图如下:(上图为写,下图为读)

时序图中的信号引脚就是12864主要的引脚,分别是:RS:命令/数据寄存器选择端

WR:读写控制端

E:使能端

DB7~DB0:数据端

所有对12864的操作都是围绕着几根引脚展开的。包括写命令、写数据、读数据、读状态就是通过这些引脚的高低电平搭配来实现的。

根据时序图可以编写相应的写命令函数、写数据函数、读数据函数、读状态函数。需要的注意的是有效数据出现的那段时间Tc必须合适,不能太短,否则会造成读写失败。

给出几个函数示例:

//忙检测,若忙则等待,最长等待时间为60ms

void busychk_12864(void){

unsigned int timeout = 0;

E_12864 = 0;

RS_12864 = 0;

RW_12864 = 1;

E_12864 = 1;

while((IO_12864 & 0x80) && ++timeout != 0); //忙状态检测,等待超时时间为60ms

E_12864 = 0;

}

//写命令子程序

void wrtcom_12864(unsigned char com){

busychk_12864();

E_12864 = 0;

RS_12864 = 0;

RW_12864 = 0;

IO_12864 = com;

E_12864 = 1;

delay_12864(50); //50us使能延时!!!注意这里,如果是较快的CPU应该延时久一些

E_12864 = 0;

}

//读数据子程序

unsigned char reddat_12864(void){

unsigned char temp;

busychk_12864();

E_12864 = 0;

IO_12864 = 0xff; //IO口置高电平,读引脚

RS_12864 = 1;

RW_12864 = 1;

E_12864 = 1;

delay_12864(50); //使能延时!!!注意这里,如果是较快的CPU应该延时久一些 temp = IO_12864;

return temp;

}

//写数据子程序

void wrtdat_12864(unsigned char dat){

busychk_12864();

E_12864 = 0;

RS_12864 = 1;

RW_12864 = 0;

E_12864 = 1;

IO_12864 = dat;

delay_12864(50); //使能延时!!!注意这里,如果是较快的CPU应该延时久一些 E_12864 = 0;

}

其中,忙检测是必要的,当BF=1时,表示内部正在进行有关的操作,即处于忙状态。在BF变回0之前ST7920不会接受任何指令。MCU必须检测BF以确定ST7920内部操作是否完成,然后才能再发送指令。也可以用延时来替代忙检测,但是需要延时足够的时间。盲检测实际就是读内部的状态寄存器,该寄存器最高位(D7)为忙标志BF,剩余7位为地址指针的内容,所以进行盲检测实际上也把地址指针中的地址读出来了。

指令集:

指令集分为基本指令集和扩展指令集,使用相应的指令集必须先写相应指令表明后续指令均为该类指令。如使用基本指令集时,写指令(0x30),需要使用扩展指令集时写指令(0x34)切换到扩展指令集。

一)基本指令集(RE=0):(使用扩展指令集先写指令0x30,这使得RE=0)

清屏指令(0x01):往DDRAM写满0x20,指针地址写0x00。表现在屏幕就是显示空白。

回车指令(0x02/0x03):地址指针内容写0x00.

进入模式:0 0 0 0 0 1 I/D S:设置读写数据之后光标、显示移位的方向。内部有2个可编程位,I/D表示读写一个字符后数据指针是加一还是减一。I/D=1指针加一,I/D=0指针减一。S=1开启整屏移动。

S I/D= H H,屏幕每次左移一个字符。

S I/D= H L ,屏幕每次右移一个字符。

但是平时不开启屏幕移动,这里说明一个概念,就是屏幕移动,实际试验中若开启了屏幕移动你会发生显示是灰常怪异的,说明如下:由于DDRAM的结构是下方表所示:

上半屏下半屏

80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH 90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH

在未开启屏移时,屏幕是以表格第一列作为参考起点,然后前8列归上半屏显示,后8列归下半屏显示。如果此时向左屏移一个字符,那么DDRAM内容与显示映射关系变为:

80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH

90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH

可以看到实际上原来第三第四行开始的字符跑到了第一行第二行的末尾,整个DDRAM的结构就是一种循环的结构,发生屏移时DDRAM与显示映射关系不断在改变。但是这不太符合我们的阅读习惯,所以如果需要使用该项功能还需编程校正之。

显示、光标、闪烁开关:0 0 0 0 0 0 1 D C B:

D=1: 显示开(Display) C=1: 光标开(Cursor) B=1: 光标位置闪烁开(Blink)。为0则为关。

光标显示移位控制:0 0 0 1 S/C R/L X X

说明:

LL:这时仅仅是将地址指针AC的值减1。在屏幕上表现是光标左移一个字符。

LH:这时仅仅是将地址指针AC的值加1。在屏幕上表现是光标右移一个字符。

HL:AC指针不变,向左屏移一个字符。这是DDRAM结构循环左移,80H接在8FH后面,90H接在9FH后面。这与上面讲的屏移是一样的。

HH:AC指针不变,向右屏移一个字符。这是DDRAM结构循环右移,80H接在8FH后面,90H接在9FH后面。

功能设置:0 0 1 DL X RE X X:(切换基本指令集与扩展指令集)DL=1表示8为接口,DL=0表示4为接口。

RE=1表示开启扩展指令,RE=0表示使用基本指令。

开启基本指令则设置为0x30,开启扩展指令则设置为0x34。CGRAM地址设置:0x40+地址。地址范围是00H~3FH。前提是SR=0,即允许设置IRAM和CGRAM地址!!!

DDRAM地址设置:只有字地址。如下表所示。(注意DDRAM地址有4行×16字)如下所示:

80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH

90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH

所以某一时刻只能显示其中的2行。只有卷动显示才能将另两行的数据显示出来。

读忙标志(地址):同时忙标志和地址读出来。忙状态时,ST7920不会接受任何指令。按照时序图将RS置0,RW置1,然后读取状态寄存器。

写RAM(DDRAM/CGRAM/GDRAM):写了控制逻辑(函数wrtcom_12864(地址);)之后,直接送数据(wrtdat_12864)。写完后地址指针根据进入模式中的设置加一或减一。写数据前先写地址,而写地址本身是一个写地址命令,然后再写数据。

读RAM(DDRAM/CGRAM/GDRAM):记得先假读一次,后面的才是真读,假读之后不需要再假读了,除非重设了地址。

二)扩展指令集(RE=1):(使用扩展指令集先写指令0x34,这使得RE=1)

待机模式:0x01,不影响DDRAM,所以跟清屏指令不同,任何指令可以结束待机模式。

卷动地址/IRAM地址允许设置:0 0 0 0 0 0 1 SR:

SR=1:允许设置垂直卷动地址。SR=0:允许设置IRAM和CGRAM 地址。

设置卷动/IRAM地址:0x40+地址。(卷动地址为行地址,即纵向地址).

这里讲解卷动,卷动就是上下滚屏,实现屏幕的垂直滚动。

卷动地址:地址范围为0x00~0x63,共64行卷动地址其实就是垂直地址。每一个地址代表着DDRAM中的一行的像素点。卷动一次就是把该行所有点移到上半屏和下半屏幕最上方。

80H、81H、82H、83H、84H、85H、86H、87H、88H、89H、8AH、8BH、8CH、8DH、8EH、8FH

90H、91H、92H、93H、94H、95H、96H、97H、98H、99H、9AH、9BH、9CH、9DH、9EH、9FH

A0H、A1H、A2H、A3H、A4H、A5H、A6H、A7H、A8H、A9H、AAH、ABH、ACH、ADH、AEH、AFH

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H、B8H、B9H、BAH、BBH、BCH、BDH、BEH、BFH

还是DDRAM的结构图,需要注意的是卷屏是分上半屏卷动和下半屏卷动,两屏之间没有关系,也就是DDRAM中左边红色部分在上半屏滚动,右边绿色部分在下半屏滚动。

B0H、B1H、B2H、B3H、B4H、B5H、B6H、B7H的下一行是

80H、81H、82H、83H、84H、85H、86H、87H

也就是说左边是一个上下相接的循环结构。同理右边也是上下相接的循环结构。左边内存中的字符上下滚动。右边内存中的字符上下滚动,两者木有关系。

要开启卷动,首先开启扩展指令集,然后允许卷动地址设置,再设置卷动地址。

wrtcom_12864(0x34); //打开扩展指令

wrtcom_12864(0x03); //允许输入卷动地址

wrtcom_12864(0x40 + 地址//设置卷动地址

wrtcom_12864(0x30); //回到基本指令

要实现全屏滚动,就必须使用循环不断地修改卷动地址。从00~63如此循环,但遗憾的是这也不符合我们的阅读习惯,后续的应用的中将讲解全屏滚动的实现方法。这里只是把卷动原理讲清楚。

反白显示:0 0 0 0 0 1 R1 R0:

R1、R0初始化的值为00。选择1~4任一行反白显示并可决定是否反白。

如何开启反白显示:首先开启扩展指令(0x34),然后设置选中某一行设置反白显示(0x04+R1R0)。00为第一行,01为第二行,10为第三行,11为第四行。需要说明的是,这里的行是指DDRAM所有内存的行,而不是显示的行,屏幕只显示2行。

所以如果我们开启第3第4行的反白显示,不卷动我们是看不到效果的。同时,如果我们开启第1行反白显示,那么在屏幕中第1行第3行都会反白显示,第2行则对应屏幕第2第4行,这一点需要注意。

如何关闭反白显示:只需在此写一次地址即可关闭,也就说,第一次写第一开启反白,第二次写相同的地址关闭反白显示。

wrtcom_12864(0x34); //反白显示试验

wrtcom_12864(0x04); //开启反白显示

delay_12864(60000); //延时

delay_12864(60000); //延时

wrtcom_12864(0x04); //关闭反白显示

wrtcom_12864(0x30); //开启基本指令集

扩展功能设置:0x36设置绘图显示开。

当GDRAM写完了之后,写0x36则屏幕显示你所绘制的图形。

0 0 0 0 1 DL x RE G x (RE=1扩展指令,G=1开绘图显示,DL=1表示8为接口)

设置GDRAM地址:绘图时,需要将GDRAM的地址写入地址指针中,然后才能写入数据。连续写入两个字节,第一个为行地址(Y),第二个为列地址(X)。

需要注意的是:写了数据之后,地址指针会自动加一(以字为单位),当到达该行的行尾时,指针下一次加一会使得地址指针跳回该行行首,也就说如果地址值为8FH时,下一次它就是80H(以第一行为例)。指针地址在本行之间循环。

指令介绍完

再讲下初始化过程,根据ST7920的手册提供的初始化步骤就可以了。

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

12864液晶显示图片原理(完整版)

51单片机综合学习 12864液晶原理分析1 辛勤学习了好几天,终于对12864液晶有了些初步了解~没有视频教程学起来真有些累,基本上内部程序写入顺序都是根据程序自我变动,然后逆向反推出原理…… 芯片:YM12864R P-1 控制芯片:ST7920A带中文字库 初步小结: 1、控制芯片不同,寄存器定义会不同 2、显示方式有并行和串行,程序不同 3、含字库芯片显示字符时不必对字符取模了 4、对芯片的结构地址一定要理解清楚

5、显示汉字时液晶芯片写入数据的顺序(即显示的顺序)要清楚 6、显示图片时液晶芯片写入数据的顺序(即显示的顺序)要清楚 7、显示汉字时的二级单元(一级为八位数据写入单元)要清楚 8、显示图片时的二级单元(一级为八位数据写入单元)要清楚 12864点阵液晶显示模块(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入

到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64液晶屏上的位置由行号(line,0~63)与列号(column,0~63)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,0~7)和列地址(Yaddress,0~63)确定。每个存储单元存储8个液晶点的显示信息。

带字库12864液晶详解

12864液晶 一、概述 带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: l 低电源电压(VDD:+3.0--+5.5V) l 显示分辨率:128×64点 l 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) l 内置 128个16×8点阵字符 l 2MHZ时钟频率 l 显示方式:STN、半透、正显 l 驱动方式:1/32DUTY,1/5BIAS l 视角方向:6点 l 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 l 通讯方式:串行、并口可选 l 内置DC-DC转换电路,无需外加负压 l 无需片选信号,简化软件设计 l 工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明

*注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口 管脚号管脚名称电平管脚功能描述 1 VSS 0V 电源地 2 VCC 3.0+5V 电源正 3 V0 - 对比度(亮度)调整 RS=“H”,表示DB7——DB0为显示数据 4 RS(CS)H/L RS=“L”,表示DB7——DB0为显示指令数据 R/W=“H”,E=“H”,数据被读到DB7——DB0 5 R/W(SID) H/L R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR 6 E(SCLK) H/L 使能信号 7 DB0 H/L 三态数据线 8 DB1 H/L 三态数据线 9 DB2 H/L 三态数据线 10 DB3 H/L 三态数据线 11 DB4 H/L 三态数据线 12 DB5 H/L 三态数据线 13 DB6 H/L 三态数据线 14 DB7 H/L 三态数据线 15 PSB H/L H:8位或4位并口方式,L:串口方式(见注释1) 16 NC - 空脚 17 /RESET H/L 复位端,低电平有效(见注释2) 18 VOUT - LCD驱动电压输出端 19 A VDD 背光源正端(+5V)(见注释3) 20 K VSS 背光源负端(见注释3)

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

12864点阵型液晶显示屏的基本原理与使用方法(很详细)

12864点阵型液晶显示屏的基本原理与使用方法(很详细) 点阵LCD的显示原理 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。 那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示: 图1“A”字模图 而中文的“你”在字模中的记载却如图2所示:

图2“你”字模图 12864点阵型LCD简介 12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字。 管脚号管脚名称LEVER管脚功能描述 1VSS0电源地 2VDD+5.0V电源电压 3V0-液晶显示器驱动电压 4D/I(RS)H/L D/I=“H”,表示DB7∽DB0为显示数据 D/I=“L”,表示DB7∽DB0为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR 6E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 7DB0H/L数据线 8DB1H/L数据线 9DB2H/L数据线 10DB3H/L数据线 11DB4H/L数据线 12DB5H/L数据线 13DB6H/L数据线 14DB7H/L数据线 15CS1H/L H:选择芯片(右半屏)信号 16CS2H/L H:选择芯片(左半屏)信号 17RET H/L复位信号,低电平复位

12864液晶屏使用手册

12864液晶屏手册 一、液晶显示模块概述 12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。 主要技术参数和显示特性: 电源:VDD ~+5V(内置升压电路,无需负压); 显示内容:128列×64行(128表示点数) 显示颜色:黄绿 显示角度:6:00钟直视 LCD类型:STN 与MCU接口:8位或4位并行/3位串行 配置LED背光 多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 二、外形尺寸 1.外形尺寸图 2.主要外形尺寸 项目标准尺寸单位 模块体积××mm

二、模块引脚说明 逻辑工作电压(VDD):~ 电源地(GND):0V 工作温度(Ta):0~60℃(常温) / -20~75℃(宽温) 三、接口时序 模块有并行和串行两种连接方法(时序如下): 8位并行连接时序图 MPU写资料到模块

MPU从模块读出资料 2、串行连接时序图

串行数据传送共分三个字节完成: 第一字节:串口控制—格式11111ABC A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令 C固定为0 第二字节:(并行)8位数据的高4位—格式DDDD0000 第三字节:(并行)8位数据的低4位—格式0000DDDD 串行接口时序参数:(测试条件:T=25℃VDD=

备注: 1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,(一般在输入每天指令前加个delay)那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。 2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。 具体指令介绍: 1、清除显示

LCD12864显示屏 带中文字库

蓝屏LCD12864显示屏带中文字库带背光12864-5V ST7920 需要用串口,请把 R9上的0欧电阻改到R10 带中文字库的,兰屏,白字 以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序: ORG 0000H RS EQU P3.7;确定具体硬件的连接方式 RW EQU P3.6 ;确定具体硬件的连接方式 E EQU P3.5 ;确定具体硬件的连接方式 MOV P1,#00000001B ;清屏并光标复位 ACALL ENABLE;调用写入命令子程序 MOV P1,#00111000B ;设置显示模式:8位2行5x7点阵 ACALL ENABLE ;调用写入命令子程序 MOV P1,#00001111B ;显示器开、光标开、光标允许闪烁 ACALL ENABLE ;调用写入命令子程序 MOV P1,#00000110B ;文字不动,光标自动右移 ACALL ENABLE ;调用写入命令子程序 MOV P1,#0C0H ;写入显示起始地址(第二行第一个位置) ACALL ENABLE ;调用写入命令子程序 MOV P1,#01000001B ;字母A的代码 SETB RS ;RS=1 CLR RW ;RW=0 ;准备写入数据 CLR E ;E=0 ;执行显示命令

ACALL DELAY ;判断液晶模块是否忙? SETB E ;E=1 ;显示完成,程序停车 AJMP $ ENABLE: CLR RS ;写入控制命令的子程序 CLR RW CLR E ACALL DELAY SETB E RET DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序 CLR RS SETB RW CLR E NOP SETB E JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待 RET END 程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址0C0H,最后输入要显示的字符A的代码41H。 SMC1602A(16*2)模拟口线接线方式 连接线图: --------------------------------------------------- |LCM-----51 | LCM-----51 | LCM------51 | ------------------------------------------------| |DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0 | |DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1 | |DB2-----P1.2 | DB6-----P1.6 | E--------P2.2 | |DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND| --------------------------------------------------- [注:AT89S52使用12M晶振] =============================================================*/

玩转12864液晶(1)--显示字符

在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C) 关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。 我们先来了解一下它的并行连接情况。 下面是电路连接图

从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。 通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。 看看并行模式下的写时序图:

根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。 读时序图如下: 根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;

(完整版)12864lcd显示部分试验总结报告

12864lcd显示部分试验总结报告 管岱2014.12.19 【实验目的】 在12864液晶显示屏上能够显示出在4×4小键盘上输入的激励源频率值,如输入“789HZ”、“8MHZ”、“2.3KHZ”,显示出“789H”、“8M”、“2.3K”。并且要求此部分程序有较好的可移植性,在最后对电阻率值的显示上能够较好的应用。 【实验原理】 12864-3A接口说明表: 在12864液晶显示原理的基础上,通过在ise上编写vhdl语言,使之能够在fpga学习板上顺利显示数据。

【实验内容】 12864的显示原理并不难理解,并且在以前也用汇编语言实现过,所以本次实验的难点不在于显示原理的理解,而在于VHDL语言的编写。 在实验初期,由于对vhdl语言的不熟练,我们“类比”汇编语言的显示程序,编写出如下的程序: 发现编译时就出现了问题,出现如“multi-source in unit <*> on signal <*>”的报错。在仔细调试检查后发现,我们错误的原因在于:在不同的进程中对同一个信号赋值。例如,在写指

令的进程中,将rs信号置‘0’,而在后面写数据的进程中又将rs置‘1’,由于在vhdl中各进程之间是并行的关系,因此这样编写程序会出现在同一时刻对同一个引脚赋高电平和低电平,从而出现矛盾。虽然在程序实际运行中,写指令进程在系统一上电就会完成,远早于写数据进程,但是在逻辑上这样编写是不符合VHDL语言的规则的。 因此,我们利用状态机的思想,将写指令和写数据的两个进程合二为一。程序片段如下: 利用状态机,将写指令和写数据的各个步骤分为一个一个分立的状态,顺序执行。这样编写将对同一个引脚信号的变化放在一个进程中,很好的解决了之前存在的问题。

LCD12864液晶显示模块(中文资料)

FYD12864液晶中文显示模块

(一) (一)概述 (3) (二)(二)外形尺寸 1 方框图 (3) 2 外型尺寸图 (4) (三)(三)模块的接口 (4) (四)(四)硬件说明 (5) (五) 指令说明 (7) (五)(五)读写操作时序 (8) (六)(六)交流参数 (11) (七)(七)软件初始化过程 (12) (八)(八)应用举例 (13) (九)(九)附录 1半宽字符表 (20) 2 汉字字符表 (21) 一、概述 FYD12864-0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 基本特性: ●●低电源电压(VDD:+3.0--+5.5V)

●●显示分辨率:128×64点 ●●内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) ●●内置 128个16×8点阵字符 ●●2MHZ时钟频率 ●●显示方式:STN、半透、正显 ●●驱动方式:1/32DUTY,1/5BIAS ●●视角方向:6点 ●●背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 ●●通讯方式:串行、并口可选 ●●内置DC-DC转换电路,无需外加负压 ●●无需片选信号,简化软件设计 ●●工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 二、方框图 3、外形尺寸图

带中文字库LCD12864液晶仿真

字库LCD12864液晶 /*----------------------------------------------- 名称:LCD12864 字库液晶芯片组st7920 ------------------------------------------------*/ #include #include #include /******************************************************************/ /* 定义数组 */ /******************************************************************/ unsigned char code IC_DAT[]; unsigned char code IC_DAT2[]; unsigned char code Photo1[]; /******************************************************************/ /* 定义接口信息 */ /******************************************************************/ sbit RS =P2^4; sbit WRD=P2^5; sbit E= P2^6; sbit PSB=P2^1; sbit RES=P2^3; /******************************************************************/

12864液晶显示程序

12864液晶显示程序 由北京迪特福科技编撰提供

#include #include sbit RS = P2^5; sbit RW = P2^6; sbit E = P2^7; sbit RES = P3^5; #define Lcd_Bus P0 //MCU P1<------> LCM #define FIRST_ADDR 0 //定义字符/汉字显示起始位置 unsigned char code zk[]={ 0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f ,0x3e,0x1f, 0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0 ,0x0f,0xc0, }; unsigned char code BMP1[]={ /*-- 调入了一幅图像:D:\3033B\3033.bmp --*/ /*-- 宽度x高度=128x64 --*/ /*--总共52行数据,每行16个数据--*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x0C,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x07,0xF1,0x00,0x03,0x01,0x00,0xF0,0x00 ,0x00,0x00, 0x18,0x00,0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x03,0x81,0x08,0x98,0x00 ,0x00,0x00, 0x10,0x1F,0x07,0x06,0x00,0x00,0x08,0x01,0x00,0x04,0x81,0x11,0x88,0x00 ,0x00,0x00, 0x10,0x21,0x0D,0x83,0xE3,0xC0,0x0F,0x02,0x00,0x04,0xC1,0x31,0x30,0x00 ,0x00,0x00, 0x10,0x21,0x18,0x83,0x06,0x40,0x09,0x82,0x00,0x0F,0xC1,0x21,0xE0,0x00 ,0x00,0x00, 0x10,0x2E,0x11,0x86,0x06,0x40,0x00,0x86,0x00,0x08,0x43,0xC3,0xE0,0x00 ,0x00,0x00, 0x30,0x30,0x11,0x86,0x04,0x40,0x41,0x84,0x10,0x18,0x63,0x82,0x18,0x00 ,0x00,0x00, 0x20,0x1E,0x1F,0x84,0x04,0x60,0x7E,0x04,0x08,0x10,0x23,0x04,0x0E,0x00 ,0x00,0x00, 0x3F,0x83,0x00,0xE0,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x38,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x6C,0x3C,0x00,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x42,0x22,0x03,0xFD,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x40,0x62,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x46,0x42,0x00,0x22,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00, 0x00,0x00,0x44,0x42,0x00,0x23,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,

12864LCD液晶显示屏中文资料

12864LCD液晶显示屏中文资料 一、概述 二、带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字. 也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 三、基本特性: (1)、低电源电压(VDD:+3.0--+5.5V)(2)、显示分辨率:128×64点(3)、内置汉字字库,提供8192个16×16点阵汉字(简繁体可选) (4)、内置 128个16×8点阵字符(5)、2MHZ时钟频率(6)、显示方式:STN、半透、正显(7)、驱动方式:1/32DUTY,1/5BIAS (8)、视角方向:6点(9)、背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10 (10)、通讯方式:串行、并口可选(11)、内置DC-DC转换电路,无需外加负压(12)、无需片选信号,简化软件设计(13)、工作温度: 0℃ - +55℃ ,存储温度: -20℃ - +60℃ 模块接口说明: *注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。 *注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能)过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板:51单片机(AT89S52)+带字库液晶12864(ST7920)+DS1302(实时时钟) 实现功能:简单,数字时钟+日期(以后会不断完美)。 C语言源程序如下: #include #include #define uchar unsigned char #define uint unsigned int /*DS1302 端口设置 */ sbit SCK=P3^6; //DS1302时钟 sbit SDA=P3^4; //DS1302 IO sbit RST = P3^5; // DS1302复位 bit ReadRTC_Flag; //读DS1302全局变量 /* 12864端口定义*/ #define LCD_data P0 //带字库液晶12864数据口 sbit LCD_RS = P2^4; //寄存器选择输入 sbit LCD_RW = P2^5; //液晶读/写控制 sbit LCD_EN = P2^6; //液晶使能控制 sbit PSB=P2^1; //并口控制 sbit RES=P2^3; uchar code dis1[] = {" 电子设计天地"}; //液晶显示的汉字 uchar code dis2[] = {"有志者,事竟成!"}; uchar code dis4[] = {'0','1','2','3','4','5','6','7','8','9'}; unsigned char temp; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void lcd_pos(uchar X,uchar Y); //确定显示位置 unsigned char l_tmpdate[7]={0,7,16,19,10,1,9};//秒分时日月周年 09-10-19 16:07:00 code unsigned char write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日

LCD12864图形液晶并口显示

LCD12864图形液晶并口显示 【教学引入】 液晶屏,在生活中很常见,我们常见的液晶显示器,如电脑的显示器,电视机,手机等等。 液晶屏在生活中已得到了普遍应用,它显示个各种各样的画面。 【教学目标】 1、掌握LCD12864液晶屏的用法; 2、编写LCD12864液晶屏的指令代码; 【知识目标】 1、掌握LCD12864液晶屏的用法; 2、掌握LCD12864液晶屏指令代码; 【教学准备】 电脑、Proteus、Keil 【教学方法】 教法:讲授法、讨论法 学法:练习法、探究法 【教学课时】 四课时 【教学过程】 一、12864液晶介绍 (1)12864是128*64点阵液晶模块的点阵数简称,业界约定俗成的简称。12864点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。12864M汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

12864引脚说明 查阅“12864M.PDF”12864M液晶显示模块技术手册——四、用户指令集 1、指令表1:(RE=0:基本指令表),如下图,讲解了12864的基本指令集和扩充指令集。

当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0。“RE”为基本指令集与扩充指令集的选择控制位元,往后的指令集将维持在最后的状态。 当选择G=0 :绘图显示OFF,汉字显示的时,12864屏只能显示8X4=32个汉字,下面是汉字显示的坐标

二、12864液晶屏驱动电路 原件名称所属类(Category) 所属子类(Sub-category) AT89C52 Microprocessor ICs 8051 Family POT-HG Resistors Variable RESPACK-8 Resistors Resistor Packs LCD12864A 自制- AT89C52的P0口连接12864的并行数据口,RP1为P0口的上拉排阻。 三、52代码编写 (1)打开keil uVision4,建立一个新的工程,工程名为"12864 graphic LCD parallel display",保存类型*.uvproj,单片机型号AT89C52。在工程中添加12864 graphic LCD parallel display.c文件,如下图

LCD12864液晶的使用之字库型液晶(一)

LCD12864液晶的使用之字库型液晶(一) 2011年02月15日星期二 16:44 下面介绍下带字库的液晶,由于Proteus中没有,就以实物为准吧!我手头上这块液晶是QY128*64HZ1,它的驱动器是ST7920,想必大家很熟悉了,百度、谷歌一下它的芯片手册很多!在学习此块液晶之前,建议大家好好看看它的驱动芯片的手册!它的驱动和LCD1602很像,甚至,读忙、写指令和写数据函数都是一样的,就初始化不一样,因为指令系统不同嘛!下面是我手头字库液晶的实物图。 (手机拍的,图片质量差了些,大家见谅!)

字库型液晶显示可以分为串行方式和并行方式两种,通过引脚PSB进行选择,它只有一个驱动芯片,不像Proteus中无字库液晶有两个驱动芯片。显示是整体显示,而不是左右屏的显示!大家一定要注意! 1、控制口信号说明:

注:①忙标志Bust_flag=1说明LCD内部正忙,此时不能对LCD进行操作,忙标志的判断由DB7也就是数据口的最高位所决定!这和LCD1602一样! ②上面对RS和RW的操作需配合使能信号EN来操作!否则无效! 1、显示说明 (1)、字符产生ROM(CGROM) 里面提供了8192(213)个汉字GB2132宋体 (2)、显示数据RAM(DDRAM) 内部提供64*2位空间,最多可控制4行16字,也就是16个中文字型显示,当写入显示数据RAM时,可分别显示CGROM和CGRAM的字型,可以用来显示三种字型:半角英文数字型、CGRAM字型和CGROM的中文字型,三种字型的选择,由在DDRAM总写入的编码选择,在0000H—0006H的编码中(其代码分别为0000、0002、0004、0006共四个)将选择CGRAM的自定义字型,02H —7FH的编码中将显示半角英文数字型的字型(也就是ASCII码,大小为16*8),至于A1以上的编码将自动结合下一个位元组,组成两个位元组的编码,从而形成一个中文字型的编码,也就是说显示一个汉字要两个ASCII码显示的位置,即大小为16*16。BIG(A140—D75F),GB(A1A0—F7FF)。 (3)、字型产生RAM 上面已经介绍了该种液晶提供四组可定义显示,是16*16大小的自定义图像空间,通过在特定的编码位置,写入我们要显示的自定义图像即可,这个和 LCD1602液晶的自定义显示字符的原理是一样的!这个将在下文加以详细介绍

12864液晶显示器(ST7920)显示程序(并口)

12864液晶显示器(ST7920)显示程序(并口) 附字模软件作者:纪小年16 七月2009 时间:下午10:25 and have 10 条评论 前两天写了一个ST7920控制12864显示的串口程序,今天瞎逛的时候发现了这个超强悍的并口程序,转载一下。来源:CnChina 做了比较详细的注释,看不懂的可以问我。下面的图片中12864所显示的logo就是我用这个程序得到的。 附程序: /******************************************************************** ********** Copyright 2007 All rights reserved. 文件名: .c 模块名称:st7920 并行方式驱动12864液晶驱动 功能概要:st7920显示驱动 取代版本:0.0.1 修改人:pulan 完成日期:2007.07.08 升级说明:create CPU: stc89c58 主频:11.0592M 液晶型号:128*64 生产厂家:驱动芯片:st7920 ********************************************************************* *********/ #include #define uint unsigned int #define uchar unsigned char #define x1 0x80 //1000 0000 #define x2 0x88 //1000 1000 #define y 0x80 //1000 0000 #define comm 0 //定义传送指令代码为0 #define dat 1 //定义传送数据代码为1 sbit RS = P2^0; //H=数据; L=指令;

LCD12864字符显示

/******************************************************** LCD12864字符显示 ********************************************************/ #include #include #include #include #define uchar unsigned char #define uint unsigned int //宏定义 /*****LCD接口定义*****/ sbit LCD_RS = P2^0; //1:输入数据;0:输入命令 sbit LCD_RW = P2^1; //1:读数据0:写数据 sbit LCD_EN = P2^2; //LCM使能端 //sbit LCD_PSB = P2^3; //串并口选择1:并口模式; 0:串口模式; #define LCD_DATA P1 //LCD总线端口 /*****LCD功能初始化指令*****/ #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H #define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置 #define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动) #define FUN_MODE 0x30 //工作模式:8位基本指令集 #define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白 #define DISPLAY_OFF 0x08 //显示关 #define CURSE_DIR 0x14 //游标向右移动:AC=AC+1 #define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH #define SET_DD_AC 0x80 /*****汉字地址表*****/ uchar code addr_tab[]={ //便于根据汉字坐标求出地址 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置 }; /*****n(ms)延时子程序*****/ void delayms(uint t) //约延时n(ms) { uint i; while(t--) { for(i=0;i<150;i++);

相关主题
文本预览
相关文档 最新文档