12864带字库(ST7920控制器)液晶学习

12864带字库(ST7920控制器)液晶学习
12864带字库(ST7920控制器)液晶学习

在此指出,这一篇文章出至网络上zhaoshan413之手,感谢他的无私贡献,让大家轻松玩转带字库12864!~~

[p=30, 2, left]之前说学完12864字库液晶后和大家交流一下心得,一直没有时间,今天整理一下发上来,希望对想学习的朋友能有点帮助…首先说明一点,本人也是初学者,自感水平不高,若有不足及不对之处,望情指正…以下以并行口传输为例,别的还不会,呵呵![/p]

[p=30, 2, left]先传一下ST7920的芯片说明书:[/p][p=30, 2, left]https://www.360docs.net/doc/0911049197.html,/bbs/redirect.php?tid=7676&goto=lastpo st#lastpost[/p][p=30, 2, left]

ST7920(字库)12864.pdf

(2010-12-01 10:46:58, Size: 1.65 MB, Downloads: 1689)

[/p]

[p=30, 2, left]一、首先说一下关于驱动函数的书写,这些是液晶显示的基础一般包括四个函数:

1、写命令函数;

2、写数据函数;

3、读状态函数;

4、读数据函数;

这四个函数并不是必须全部写的,具体要看你实现的功能,如果只是单纯的显示汉字和字符,写命令、写数据、读状态这三个函数就够了,如过你还需要进行一些绘图的操作,那读数据函数也必须书写。

另外关于读状态函数,其实也就是用于判忙操作,我看郭天祥的书里面是这样说的:原则上每次对控制器进行读写操作之前,都必须进行读写检测,由于单片机的操作速度慢于液晶控制器的反应速度,因此可不进行读写检测,或者只进行简短的延时即可。因此,读状态函数也可以不写,只用简短的延时函数替换即可。

1、写操作的编写:

首先看一下时序图[/p]

[p=30, 2, left]

时序.JPG

[/p][p=30, 2, left]由图可见操作很简单:

1>RS=1(写数据操作);或者RS=0(写命令操作);

2>RW=0;//指明为写操作

3>E=1;

4>DB=data;//data为你要写入的命令或数据值

5>E=0;[/p][p=30, 2, left]以下是我的驱动函数,仅供参考:[/p][p=30, 2, left]

CODE:

/********************************液晶端口定义**************************/

#define lcd_data P0 //数据口

sbit RS = P2^4; //选择寄存器(并行) 0:指令寄存器1:数据寄存器;

sbit RW = P2^5; //读写控制脚(并行) 0:写入 1:读出

sbit E = P2^6; //读写数据启始脚(并行)

sbit PSB = P2^1; //串并方式选择引脚,0为串行模式,1为8/4位数据口模式

sbit RST = P2^3; //复位引脚

//******************************************************* *

//延时函数

//******************************************************* *

void delay(unsigned int k)

{

unsigned int i;

unsigned char j;

for(i=0;i

{

for(j=0;j<10;j++);

}

}

//******************************************************* *

//延时1ms函数

//******************************************************* *

void delay_ms(unsigned int k)//延时0.994us,晶振12M

{

unsigned int x,y;

for(x=k;x>0;x--)

for(y=121;y>0;y--);

}

//******************************************************* *

//写命令函数

//******************************************************* *

void LcdWcom(unsigned char WCom)

{

delay(1);

RS=0; //指明操作对象为指令寄存器

RW=0; //指明为写操作

E=1;

lcd_data=WCom; //将命令写入总线

E=0;

}

//******************************************************* *

//写数据函数

//******************************************************* *

void LcdWdata(unsigned char WData)

{

delay(1);

RS=1; //指明操作对象为数据寄存器

RW=0; //指明为写操作

E=1;

lcd_data=WData; //将数据写入总线

E=0;

}[/p][p=30, 2, left]二、初始化操作[/p][p=30, 2, left]以8位并行操作为例,操作流程图如下:[/p][p=30, 2, left]

初始化.JPG

[/p][p=30, 2, left]初始化操作如下:[/p][p=30, 2, left]1>芯片上电;[/p][p=30, 2, left]2>延时40ms以上;[/p][p=30, 2, left]3>复位操作:RST出现一个上升沿(RST=1;RST=0;RST=1;);[/p][p=30, 2, left]4>功能设定;[/p][p=30, 2, left]5>延时100us以上;[/p][p=30, 2, left]6>再次进行功能设定;[/p][p=30, 2, left]7>延时37us;[/p][p=30, 2, left]8>显示开关控制;[/p][p=30, 2, left]9>延时100us 以上;[/p][p=30, 2, left]10>清除显示;[/p][p=30, 2, left]11>延时10ms以上;[/p][p=30, 2, left]12>进入点设置;[/p][p=30, 2, left]13>初始化结束;[/p][p=30, 2, left]这里我遇到了一个小问题,我的液晶按照这个顺序进行初始化结果不正确,无法显示,最后我把调整了一下就可以了,调整后的顺序为:清除显示进入点设置显示开关控制,不知道是什么原因,知道的告诉我一声…[/p][p=30, 2, left]

CODE:

//******************************************************* *

//显示初始化函数

//******************************************************* *

void Display_Init(void)

{

delay_ms(45); //延时45ms

PSB=1; //8位并行口

//复位操作

RST=1;delay(1);

RST=0;delay(1);

RST=1;delay(1);

//功能设定

LcdWcom(0x30); //设置为8位并行口,基本指令集

delay(10);

LcdWcom(0x30); //再次设置为8位并行口,基本指令集

delay(5);

// //显示开关控制

// LcdWcom(0x0c); //游标显示关,正常显示,整体显示开

// delay(10);

//清除显示

LcdWcom(0x01);

delay_ms(12); //延时12ms

//进入点设置

LcdWcom(0x06); //设置为游标右移,DDRAM位地址加1,画面不移动

delay(5);

LcdWcom(0x0C); //开显示

}[/p][p=30, 2, left]三、显示基本的字符和汉字[/p][p=30, 2, left]1、要想显示汉字或字符,首先要确定显示的位置,看看芯片说明书上关于屏幕地址的分配:[/p]

[p=30, 2, left]

DDRAM位址.JPG

[/p][p=30, 2, left]由于此液晶为128*64,即是横向128个点,竖向64个点,由于该液晶控制器支持的字符为8*16,汉字为16*16,因此只能显示四行,如果是汉字,为每行显示8个,如果是字符,每行显示16个。[/p][p=30, 2, left]由上图设置DDRAM地址的指令可知,最高位为1,余下7位为地址值,因此就对应了为什么起始地址为80H的原因(即对应的写地址指令为1000 0000);因此如果你要设定显示的地址为第一行的第一个位置,只需要调用写指令函数,写入0x80即可。[/p][p=30, 2, left]存在的问题:参考网上的程序及在试验过程中发现,实际能显示出来的地址分布式这样的[/p][p=30, 2, left]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 //第四行汉字位置[/p][p=30, 2, left]百思不得其解,尤其让人受不了的是居然是第一行和第三行地址接续,而不是第二行,有明白的高手给讲解一下…[/p][p=30, 2, left]设定DDRAM地址参考程序:[/p][p=30, 2, left]

CODE:

//******************************************************* *

//设置光标函数

//参数说明:x为行号,y为列号

//******************************************************* *

void Set_Cursor(unsigned char x, unsigned char y)

{

unsigned char i;

switch(x)//确定行号

{

case 0x00: i=0x80; break;//第一行

case 0x01: i=0x90; break;//第二行

case 0x02: i=0x88; break;//第三行

case 0x03: i=0x98; break;//第四行

default : break;

}

i = y+i;//确定列号

LcdWcom(i);//写地址

}[/p][p=30, 2, left]2、显示字符[/p][p=30, 2, left]由数据手册可查看可以显示的字符及其显示码:[/p]

[p=30, 2, left]

半宽字.JPG

[/p][p=30, 2, left]因此,当你设置好所要显示的光标位置后,即可调用写数据函数,写入对应相应字符的显示码,比如要显示!就应该写入0x21。[/p][p=30, 2, left]

//******************************************************* *

//显示字符函数

//******************************************************* *

void Display_Char(unsigned char Alphabet)

{

delay(1);

LcdWdata(Alphabet); //写入需要显示字符的显示码

}显示!实例:[/p][p=30, 2, left]

CODE:

/**********************显示单个字符*************************/

Set_Cursor(0,0); //光标地址设定

Display_Char(0x21); //显示字符!

[/p][p=30, 2, left]效果图:[/p][p=30, 2, left]

1.JPG

[/p][p=30, 2, left]扩展程序:在指定位置显示字符串

//******************************************************* *

//指定位置显示字符串函数

//参数说明:x为行号,y为列号

//******************************************************* *

void Display_String(unsigned char x,unsigned char y,unsigned char *Alphabet)

{

unsigned char i=0;

Set_Cursor(x,y); //设置显示的起始地址

while(Alphabet[i]!='\0')

{

LcdWdata(Alphabet[i]); //写入需要显示字符的显示码

i++;

}

}显示字符串实例:[/p][p=30, 2, left]

CODE:

/***********************显示字符串*************************/

Display_String(1,0,"https://www.360docs.net/doc/0911049197.html,"); / /显示字符串效果图:[/p][p=30, 2, left]

2.JPG

[/p][p=30, 2, left]3、显示汉字[/p][p=30, 2, left]

[/p][p=30, 2, left]因为一个汉字占用两个字节的大小,因此要想显示一个汉字,需要进行两个数据写入操作。[/p][p=30, 2, left]所支持的8192个16*16的汉字详见数据手册附录中的ST7920GB中文字型码表。[/p][p=30, 2, left]参考程序:[/p][p=30, 2, left]

CODE:

//******************************************************* *

//指定位置显示汉字函数

//参数说明:x为行号,y为列号

//******************************************************* *

void Display_HZ(unsigned char x,unsigned char y,unsigned char *HZ)

{

Set_Cursor(x,y); //设置显示的起始地址

LcdWdata(HZ[0]); //写入需要显示汉字的高八位数据

LcdWdata(HZ[1]); //写入需要显示字符的低八

}显示汉字实例:[/p][p=30, 2, left]

CODE:

/************************显示汉字*************************/ Display_HZ(0,1,"电"); //显示电

Display_HZ(0,2,"子"); //显示子

Display_HZ(0,3,"园"); //显示园效果图:[/p][p=30, 2, left]

3.jpg

[/p][p=30, 2, left][/p][p=30, 2, left][/p][p=30, 2, left][/p][p=30, 2, left]扩展程序:[/p][p=30, 2, left]

//******************************************************* *

//指定位置显示一行汉字函数,可自动换行

//参数说明:x为行号,y为列号

//******************************************************* *

void Display_HZ_Line(unsigned char x,unsigned char y,unsigned char *HZ)

{

unsigned char i=0;

Set_Cursor(x,y); //设置显示的起始地址

while(HZ[i]!='\0')

{

LcdWdata(HZ[i++]); //写入需要显示汉字的高八位数据

LcdWdata(HZ[i++]); //写入需要显示字符的低八位数据

if((y+i)%16==0) //如果满一行

{

x++;

if(x==4) //如果满一屏

x=0;

Set_Cursor(x,0); //重新设置显示的起始地址

}

}

}

[/p][p=30, 2, left]显示一行汉字实例:[/p][p=30, 2, left]

CODE:

/************************显示一行汉字*********************/ Display_HZ_Line(2,0,"欢迎转载,转载请注明出处,谢谢!");//显示一行汉字效果图:[/p][p=30, 2, left]

4.jpg

[/p][p=30, 2, left]再来一个整体的现实效果[/p][p=30, 2, left]

CODE:

//******************************************************* *******************

//说明:程序主函数

//******************************************************* *******************

void main(void)

{

/***********************液晶初始化***************************/

Display_Init();

/**********************显示单个字符*************************/

Set_Cursor(0,0); //光标地址设定

Display_Char(0x21); //显示字符!

/***********************显示字符串*************************/

Display_String(1,0,"https://www.360docs.net/doc/0911049197.html,"); //显示字符串

/************************显示汉字*************************/ Display_HZ(0,1,"电"); //显示电

Display_HZ(0,2,"子"); //显示子

Display_HZ(0,3,"园"); //显示园

/************************显示一行汉字*********************/ Display_HZ_Line(2,0,"欢迎转载,转载请注明出处,谢谢!");//显示一行汉字

while(1);

}[/p][p=30, 2, left]

5.jpg

[/p]

最新回复

love_wjgyga at 2010-12-01 12:24:08

[i=s] 本帖最后由love_wjgyga 于2010-12-1 16:23 编辑

[p=30, 2, left]四、关于CGRAM的使用:[/p][p=30, 2, left]

[/p][p=30, 2, left]可以参考这个网站的程序: http://bbs.友好站点,请勿转贴.com/ShowTopic.aspx?id=81220 ST7920自行产生RAM提供使用者图像定义(造字)功能,可以提供四组16*16点的自定义图像空间,使用者可以将内部自行没有提供的图像自行定义到CGRAM中,便可以通过DDRAM显示在液晶屏上。注意:网上介绍说ST7920芯片同屏幕不能显示4个以上自定义汉字(用CGRAM)。显示CGRAM字型:将16位元资料写

入DDRAM中,一共有0000H,0002H,0004H,0006H四种编码。[/p]

[p=30, 2, left]

CGRAM1.JPG

[/p][p=30, 2, left]

CGRAM2.JPG

[/p][p=30, 2, left]操作步骤:[/p][p=30, 2, left]1>设置为扩充指令集;[/p][p=30, 2, left]2>设置SR=O,允许设定CGRAM地址;[/p][p=30, 2, left]3>设置为基本指令集;[/p][p=30, 2, left]4>循环执行以下操作写入16个字节数据(设定CGRAM的存储地址;写入自定义数据);[/p][p=30, 2, left]5>设置DDRAM地址[/p][p=30, 2, left]6>写入显示CGRAM显示码[/p][p=30, 2, left]CGRAM参考程序:[/p][p=30, 2, left]

CODE:

//************************************************** ******

//设置CGRAM字库

//ST7920 CGRAM(用户自定义图标)空间分布

//空间1地址:40H~4FH共16个地址,一个地址对应两个字节数据;对应调用码:0000H

//空间2地址:50H~5FH共16个地址,一个地址对应两个字节数据;对应调用码:0002H

//空间3地址:60H~6FH共16个地址,一个地址对应两个字节数据;对应调用码:0004H

//空间4地址:70H~7FH共16个地址,一个地址对应两个字节数据;对应调用码:0006H

//参数说明:num为空间编号,CGRAM_ZIKU为地址指针

//************************************************** ******

void SET_CGRAM(unsigned char num,unsigned char *CGRAM_ZIKU)

{

unsigned char i,add;

LcdWcom(0x34); //再次设置为8位并行口,扩展指令集LcdWcom(0x02); //SR=0,允许设置CGRAM地址

LcdWcom(0x30); //恢复设置为8位并行口,基本指令集

add=(num<<4)|0x40; //计算CGRAM的首地址

for(i=0;i<16;i++)

{

LcdWcom(add+i); //设置CGRAM的首地址

LcdWdata(CGRAM_ZIKU[i*2]); //写入高8位数据

LcdWdata(CGRAM_ZIKU[i*2+1]);//写入低8位数据

}

}

//************************************************** ******

//指定位置显示CGRAM自造字函数

//参数说明:x为行号,y为列号,num为编号

//************************************************** ******

void Display_CGRAM(unsigned char x,unsigned char y,unsigned char num)

{

Set_Cursor(x,y); //设置显示的起始地址

LcdWdata(0x00); //写入需要显示汉字的高八位数据LcdWdata(num*2); //写入需要显示字符的低八位数据

}[/p][p=30, 2, left]显示CGRAM自定义字库实例:[/p][p=30, 2, left]

CODE:

/******************************************CGRAM字库定义****************************************/

unsigned char code CGRAM_ZIKU_I2C[32]=

{

0x03,0x80,0x00,0x80,0xF8,0x8E,0x23,0x91,0x22,0x21,0x 22,0x20,0x23,0xA0,0x20,0x20,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x11,0x F8,0x0E,0x00,0x00,0x00,0x00

};//I2C

/********************显示自定义的CGRAM********************/

SET_CGRAM(1,&CGRAM_ZIKU_I2C); //把自定义的字库写入CGRAM Display_CGRAM(0,1,1); //指定位置显示自定义的字库[/p][p=30, 2, left]效果图:[/p][p=30, 2, left]

6.jpg

[/p]

五、关于GDRAM绘图模式的操作

ST7920提供64×32 个字节的空间(由扩充指令设定绘图RAM 地址),最多可以控制256×64 点阵的二维绘图缓冲空间,在更改绘图RAM 时,由扩充指令设置GDRAM地址先垂直地址后水平地址(连续2个字节的数据来定义垂直和水平地址),再2个字节的数据给绘图RAM(先高8位后低8 位)。地址分布如下:[p=30, 2, left]

GDRAM.JPG

[/p][p=30, 2, left]

QUOTE:

[/p][p=30, 2, left]一位网友对GDRAM的理解:ST7920最多可以控制256×64 点阵的二维绘图缓冲空间,而12864只是使用了ST7920控制器功能的一半。究竟是哪一半,我们可以对比GDROM的地址来理解。把GDROM地址方块理解为像素,垂直为0到63,水平为0到255(也就是16x16个),则整个面板像素为256×64 ,而12864制造时把垂直地址32--63折掉,只取到上面的一半,也就是256x32的一块长条(暂且理解为长条吧)。制作液晶是把长条水平截成两半,0--7和8到15两部分,再把8--15的那一半挪到下面便构成了128x64的液

晶。

不知道有没有说明白了...⊙﹏⊙b汗,表达不好!![/p][p=30, 2, left] [/p][p=30, 2, left]操作步骤:[/p][p=30, 2, left]1>设置为扩充指令集,关闭绘图模式;[/p][p=30, 2, left]2>写两字节的GDRAM地址,先写垂直地址,后写水平地址地址;[/p][p=30, 2, left]3>写入两字节的数据,先写高八位数据,后写低八位数据;[/p][p=30, 2, left]4>打开绘图模式;[/p][p=30, 2, left]5>设置回基本指令集;[/p][p=30, 2, left]

CODE:

//************************************************** ******

//填充GDRAM数据:

//参数:dat为填充的数据

//************************************************** ******

void GUI_Fill_GDRAM(unsigned char dat)

{

unsigned char i;

unsigned char j;

unsigned char k;

unsigned char bGDRAMAddrX = 0x80; //GDRAM水平地址unsigned char bGDRAMAddrY = 0x80; //GDRAM垂直地址

for(i=0;i<2;i++)

{

for(j=0;j<32;j++)

{

for(k=0;k<8;k++)

{

LcdWcom(0x34); //设置为8位MPU接口,扩充指令集,绘图模式关

LcdWcom(bGDRAMAddrY+j); //垂直地址Y LcdWcom(bGDRAMAddrX+k); //水平地址X

LcdWdata(dat);

LcdWdata(dat);

}

}bGDRAMAddrX = 0x88;

}

LcdWcom(0x36); //打开绘图模式

LcdWcom(0x30); //恢复基本指令集,关闭绘图模式

带字库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并行数据传输汉字及图形显示程序

今天终于完成了12864带字库液晶模块的图象和中英文字母显示,图象显示显示了自己的一副照片,呵呵,还认得出是自己,开心啊。。。硬件连接方式是:并口直接访问。 这是汉字显示程序: #include #include #define uchar unsigned char #define datawr 0x1200 //写数据通道 #define comwr 0x1000 //写控制命令通道 #define datare 0x1300 //读数据通道 #define comre 0x1100 //读忙通道 uchar code disp_data[]={" 浙江大学 " //第一行,第一页 "04级通信工程一班" //第三行 " 宁波理工学院 " //第二行 " 竞赛小组 " //第四行 "128X64液晶显示器" //第一行,第二页 " 测试程序 " //第三行 " 07年07月25日 " //第二行 " Tornado "}; //第四行 void set12864(); void write_command(uchar command); void write_page(uchar data_add); void read_page(uchar data_add); void delays(uchar cont); void main() { while(1) { set12864(); //初始化12864 write_page(0); //写入一页数据 read_page(0x30); //读出一页数据到内部RAM delays(2); //延时2s write_page(64); //写入下一页数据 delays(2); //延时2s } }

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中文字库

梁国书for(;1;) study; 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点

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

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 串口 时钟显示

/*12864LCD (ST7920)驱动程序 可显示年月日时分秒及加减时钟切换*/ #include /*引脚定义*/ #define CS P2_0 //片选高电平有效单片LCD使用时可固定高电平 #define SID P2_1 //串数究谳 #define SCLK P2_2 //串同步时钟信号 #define PSB P2_3 //低电平时表示用串口驱动,可固定低电平;高电平并行驱动 #define RESET P2_4 //LCD复位,LCD模块自带复位电路,可不接或接高电平vcc #define key P2_5 //因有定义,因此可以写成P2_5或sbit key=P2^5; /*函数全局声明*/ void write(bit start, unsigned char ddata);//bit start;定义一个位的变量,他是1或0 void sendbyte(unsigned char bbyte); void delaynms(unsigned int di); void lcdinit(void); void lcdtest(void); void lcdcls(void); /*存放字符串的数组*/ unsigned char code ma[] ={"2015年08月24日"}; unsigned char code ma2[]={" 时分秒"}; unsigned char code ma3[]={"12864 液晶时钟"}; unsigned char code ma4[]={"0123456789"}; unsigned char code ma5[]={"年"}; unsigned char code ma6[]={"月"}; unsigned char code ma7[]={"日"}; unsigned int count; //定义变量统计中断累计次数 unsigned int s,m,h; //定义变量储存秒、分钟和小时 unsigned int ss,mm,hh; //定义变量储存秒、分钟和小时 unsigned int n,u,r; //定义变量储存年、月、日 void lcdinit(void) //初始化LCD { delaynms(10); //启动等待,等LCM讲入工作状态 PSB=0; ; //串口驱动模式;PSB=1时为并行 // RESET=0; delaynms(1); RESET=1; // 复位LCD // CS=1; //串行数据口 write(0,0x30); // DL=0,4位数据;DL=1,8位数据RE=1,扩充指令操作;RE=0,基本指令操作; write(0,0x0c); //显示打开,光标关,反白关 write(0,0x01); //清屏,将DDRAM的地址计数器归零 } void write(bit start, unsigned char ddata) //写指令或数据bit start;定义一个位的变量,他是1或0

玩转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 ;

12864中文资料及字库说明书

FYD12864液晶中文显示模块 一、概述 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℃ 二、方框图

三、模块接口说明 *注释1:如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。*注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。 *注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。 2.2并行接口

带中文字库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液晶显示DS1302数字时钟C源程序

51单片机+带字库液晶12864+DS1302数字时钟C源程序(无按键修改功能) 2009-10-19 16:47 经过两天的搜索与调试,在别人程序的基础上,不断修改,终于调试成功了这个程序。目前还不能修改时间与日期,只是以预定时间以始。 适用于开发板: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}; //秒分时日月周年最低位读写位 code unsigned char read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

基于proteus的不带字库的12864的仿真程序(带仿真图)

基于proteus的不带字库的12864的仿真 程序(带仿真图) 作者:心如止水(武汉工程大学) /****************************************************** ****** 本程序为不带字库的12864汉字及英文字符的显示程序, 可以说此程序是所有12864显示程序中最简单最易懂的 显示程序。之所以写这个程序,是因为我看很多学单片 机的人(特别是初学者)对12864有一种恐惧感,觉得它 很难,看完这个程序,相信你能明白它的显示原理。 还要注意的是:带中文字库和不带中文字库的程序不一样, 不可混用。 ******************************************************* *****/ 先上图吧,哈哈

下面看程序吧,相信你一定能看懂,很简单的哟!!!#include #define uchar unsigned char #define uint unsigned int //sbit databus=P1; #define databus P1

//sbit Reset = P3^0; //复位 sbit rs = P3^7; //指令数据选择 sbit e = P3^5; //指令数据控制 sbit cs1 = P3^3; //左屏幕选择,低电平有效 sbit cs2 = P3^4; //右屏幕选择 sbit wr = P3^6; //读写控制 //sbit busy = P1^7; //忙标志 void SendCommand(uchar command); //写指令 void WriteData(uchar dat);//写数据 void LcdDelay(uint time); //延时 void SetOnOff(uchar onoff);//开关显示 void ClearScreen(uchar screen); //清屏 void SetLine(uchar line); //置页地址 void SetColum(uchar colum);//置列地址 void SetStartLine(uchar startline);//置显示起始行 void SelectScreen(uchar screen);//选择屏幕 void Show1616(uchar lin,uchar colum,uchar *address);//显示一个汉字 void InitLcd(); //初始化 void ResetLcd(); //复位 void Show_english(uchar lin,uchar colum,uchar *address); const uchar code hzk[] = { /*-- 文字: I --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- 文字: c --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00, /*-- 文字: a --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20, /*-- 文字: n --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20, /*-- 文字: --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

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液晶的自定义显示字符的原理是一样的!这个将在下文加以详细介绍

SG12864-12带汉字库LCD显示器

中文字库液晶显示模块使用 手册 SG12864 深圳市显能实业有限公司 深圳市福田区上梅林越华路12号珠宝城大厦四楼电话:0755-******** 传真:0755-******** http://https://www.360docs.net/doc/0911049197.html, E-mail:shine@https://www.360docs.net/doc/0911049197.html,

一、液晶显示模块概述 1. 液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文 汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接 口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画 面移位、睡眠模式等。 2. 外观尺寸:93×70×12.5mm 3. 视域尺寸:73×39mm 外形尺寸图 二、模块引脚说明 128X64 引脚说明 引脚名称方向说明引脚名称方向说明 1 VSS - GND(0V) 11 DB4 I 数据4 2 VDD - Supply Voltage For Logic (+5v) 12 DB5 I 数据5 3 VO - Supply Voltage For LCD (+5v) 13 DB6 I 数据6 4 RS (CS) O H: Data L: Instruction Code 14 DB7 I 数据7 5 R/W (SID) O H: Read L: Write 15 PSB O H: Parallel Mode L: Serial Mode 6 E (SCLK) O Enable Signal 16 NC - 空脚 7 DB0 I 数据0 17 /RST O Reset Signal 低电平有效 8 DB1 I 数据1 18 NC - 空脚 9 DB2 I 数据2 19 LEDA - 背光源正极(LED+5V) 10 DB3 I 数据3 20 LEDK - 背光源负极(LED-OV) 外形尺寸 ITEM NOMINAL DIMEN UNIT 模块体积 93×78×12.5 mm 视域 70.7×38.8 mm 行列点阵数 128×64 dots 点距离 0.52×0.52 mm 点大小 0.48×0.48 mm

Lcd12864最全中文资料

128*64LCD液晶显示屏中文资料 一、概述 二、带中文字库的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并行接口

12864带字库程序

#include #include #define uchar unsigned char #define uint unsigned int /*TS12864A-3 端口定义*/ #define LCD_data P0 //数据口 sbit LCD_RS = P1^0; //寄存器选择输入 sbit LCD_RW = P1^1; //液晶读/写控制 sbit LCD_EN = P2^5; //液晶使能控制 sbit LCD_PSB = P1^2; //串/并方式控制 sbit wela = P2^6; sbit dula = P2^7; uchar code dis1[] = {"欢迎指导工作"}; uchar code dis2[] = {"淮南师范学院"}; uchar code dis3[] = {"罗雷雷"}; uchar code dis4[] = {"胡伟伟"}; #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; uchar IRDIS[2]; uchar IRCOM[4]; void delay0(uchar x); //x*0.14MS void beep(); void dataconv(); void lcd_pos(uchar X,uchar Y); //确定显示位置 /*******************************************************************/ /* */ /* 延时函数*/ /* */ /*******************************************************************/ void delay(int ms) { while(ms--) { uchar i; for(i=0;i<250;i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }

LCD12864中文字库使用说明

(一)(一)概述 (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液晶的使用之无字库型(一) 2011年02月15日星期二 14:07 过年回家没办法联网,没办法上传LCD12864教程,还请大家见谅!现在就和大家一起LCD12864的使用! LCD12864分为两种,带字库和不带字库的,个人比较喜欢不带字库的,因为显示汉字的时候可以选择自己喜欢的字体,而带字库的液晶,只能显示GB2312的宋体,当然了,也可以显示其他的字体,不过不是液晶本身字库中带的了,而是用图片的形式显示。本讲由于内容较多,故分两篇进行讲解,本人水平有限,难免有错误之处,还望大家批评改正! 首先介绍下不带字库的LCD12864,现就以Proteus中的LCD12864为例进行讲解,Proteus 中AMPIRE128*64,其液晶驱动器为KS0108,我在网上搜了好就都没找到它的datasheet,不过我们可以找到类似的芯片的手册,它的控制逻辑和HD61202是类似的,我们可以网上下载它的datasheet进行参考。 与带字库液晶不同,此块液晶中含有两个液晶驱动器,一块驱动器控制64*64个点,左右显示,这就是为什么AMPIRE128*64引脚有CS1和CS2的原因。学习液晶主要看的它的指令系统,再次先说明一下“页”的概念,此液晶有8页,一页有8行。68/8=8; 再介绍一下其他的几个重要指令: 指令一、行设置命令 由此可见其显示的其实行为0xC0,有规律的改变起始行号,可以实现滚屏的效果 指令二、页(page)设置指令 起始页为0xB8显示的RAM共64行,分为8页,每页有8行,刚才在上面已经讲过。 指令三、列(Y address)地址设置指令 第一列为0x40一直到0x7F共64列,因为此液晶有128列,所以有两块驱动芯片驱动。

12864各种画图程序(带字库)

/****************************************************************************** ******************************************************************************* *********/ //程序说明:本程序为12864(st7920)驱动程序,只实现了最简单的显示功能 //端口设置:RS、RW、EN分别为P0口的0、1、2,数据口为P2口 //注意:1、要想在液晶屏上同时显示自定义字库和绘图必须先显示自定义字库 // 2、本程序所有函数均有用且正确,由于我的keil未破解不能编译,所以将其注释了 // 3、用取模软件取的图形或汉字必须是逐行取的,因为本函数是在液晶上逐行打点的 /****************************************************************************** ******************************************************************************* ********/ #include #include //内含-NOP-函数 #include //内含rand()函数 #define uchar unsigned char #define uint unsigned int //**********宏定义所需指令 #define BASIC_SET 0x30 #define EXTEND_SET 0x34 #define DRA W_ON 0x36 #define DRA W_OFF 0x34 //*************端口定义 sbit LCD_RS = P0^0; sbit LCD_RW = P0^1; sbit LCD_EN = P0^2; //************变量定义 //uchar dis1[10]; //****************短延时 void delay(uint k) { uint i; uchar j; for(i = 0; i < k ;i ++) for(j = 0; j < 10 ;j ++); }

相关文档
最新文档