当前位置:文档之家› 无字库12864液晶的驱动方法

无字库12864液晶的驱动方法

无字库12864液晶的驱动方法
无字库12864液晶的驱动方法

无字库12864液晶的驱动方法

在制作单片机系统时,一般都需要用显示器件来显示单片机的工作状态并显示输出结果,如LED、数码管和液晶显示器等。LED最简单,但能给出的信息很少。数码管能清晰地显示数字和部分字母,但是耗电较大,不适合使用电池供电的装置。

常见的液晶显示器有段式液晶、字符液晶和图形液晶等。其中,段式液晶最省电,但对于通用显示使用起来不很方便,只能显示固定式数字或符号,而且需要专用驱动电路或特殊的单片机。

字符液晶(如1602)用得比较多,容易和单片机配合,但是一般都需要5V工作电压,虽然现在也有3V就可以工作的模块,但是体积还是较大,而且只能显示数字和西文字符,无法显示图形和汉字。

点阵液晶模块既可以显示ASCII字符,又可以显示汉字和图形,相对于前面几种,具有更大的灵活性,所以使用得越来越多。不过常用的图形液晶因为显示面积增加,体积比字符液晶(如1602)更大,价格也更贵。初学者要注意的是,12864图形点阵液晶随着厂家设计使用的驱动芯片不同,驱动程序有所区别,不像1602那样基本通用。

几种常见的12864图形点阵模块

12864点阵液晶模块分为带汉字库和不带汉字库两大类,目前带汉字库的通常是ST7920驱动,它可以工作在汉字字符方式和图形点阵方式,很多制作都用它,如果需要显示较多汉字,用它最为方便。

在显示汉字数量很少的场合,我们可以使用更加廉价的、不带字库的点阵液晶模块,这正是本文重点介绍的。它们的控制电路有KS0108和ST7565两种:KS0108很简单,一共只有7条指令,可是它没有串行接口;ST7565有20多条指令(最常用的也就几条),有串行接口,可选串行或并行工作。KS0108和ST7565的指令和上述带字库的ST7920区别较大,所以初学者买液晶时一定要搞清楚是哪种驱动电路。即使同样的驱动电路,不同厂家或者不同型号的产品,具体细节仍可能不同。例如有的片选信号是高电平有效,有的却是低电平有效,有的把显示区分为左右两半分别选取,有的却不加区分。所以使用前要仔细看厂家说明,如果没有,就要看液晶模块背面给出的具体型号,根据这个型号去查找使用手册。

笔者最近在淘宝网上搜寻到一款12864的图形点阵液晶,只有4cm宽、3.5cm高,显示面积为3.2cm宽、1.95cm高,非常小巧。更加难能可贵的是它可以在3V低电压工作,很适合我们制作小型便携装置。该液晶模块型号是SP12864FPD-12CSBE,由北京集粹电子设备公司出品,它的外形见图1。

图1 12864图形点阵液晶模块

图2 小小日历钟(文字界面)

图3 小小日历钟(图形界面)

图2、图3所示为笔者用它制作的一个小小日历钟,它的特点是具有可以随意转换的文字和图形界面。文字界面除了显示年月日时分秒,在右上角还有一个小鸡啄米的小动画,图形界面用指针在刻度上指示出时分秒,是不是有点新意呢?图4所示是调频收音机的显示屏,用进度条指示音量,用刻度尺显示信号强度,比1602只能显示数字和字母要生动多了。没有字库用起来是否很麻烦?其实搞清了图形点阵的基本工作原理,用起来并不麻烦却更灵活,不带字库我们就按需要打造字符!

图4 调频收音机

图5 液晶模块采用“COG”封装

图6 点阵液晶显示原理

下面就谈谈这个液晶的驱动方法,以后将给出一些制作实例,以帮助初学者用它做出具有个性的东西。

液晶模块SO12864-12C简介

此型号小液晶包括一系列子型号,详见

https://www.doczj.com/doc/9811649676.html,/files856985665897965/productpdf/2010-4-29/522625504.pdf。这次所用的SO12864FPD-12CSBE只是其中的一种,我们先来了解一下它的主要特性:

◆ 逻辑或电源电压2.8~5.5V;

◆ 蓝色背光,背光电压3V;

◆ 串行接口,用 8个焊盘引出包括电源、背光、地和控制线数据线;

◆ 不带字库,需要自己编辑外部字模数组;

◆ 速度较快,用时钟1MHz的AVR单片机驱动,编程时无须附加脉冲额外延时;

◆ 使用ST7565电路,命令代码一共23条。

显然,它十分适合低压小尺寸场合应用,串行接口最大限度减少了液晶和单片机的连线,虽说比并行慢一点,实际上如果不是频繁刷屏影响并不大。要自己编制字库确实比较麻烦,

但是只要显示的文字量少,制作小字模也不困难,反而可以自己打造个性化的字体,使得显示具有特色。

把液晶模块翻过来,如图5所示,发现电路板上没有通常液晶模块的黑胶封装集成电路,原来这个液晶采用的是“COG”封装,就是把集成电路直接绑定在液晶玻璃板上。

它的8个接口焊盘位于模块上方,定义如下:

片选CS:它为低电平才能进行操作,在加载数据后至少维持40ns低电平。

1.复位RES:启动时至少维持1μs低电平以使液晶内部复位,然后升高,再过1μs完成复位,以后才能对液晶进行操作。

2.命令数据选择A0:高电平为数据,低电平为命令。、

3.串行时钟SCL:顶底宽度至少25ns,低时A0和SI至少稳定20ns,然后在上升沿加载数据或命令。

4.串行数据SI:同上,在SCL上升沿加载后至少还要保持10ns稳定。

5.电源正VCC:最低2.8V,标准3V,最大5.5V。

6.地VSS。

7.背光LED+:蓝色背光最低2.8V,标准3V,最大3.2V,使用时要注意不要超过。

8.在串行模式时,一个命令或数据字节要分为8次加载,从最高位开始。

图形点阵的显示原理

12864点阵液晶的图形显示原理都差不多。液晶屏x方向(水平)具有128列像素从左到右为第0列……第127列,y方向(垂直)具有64行像素。每8行组成1页,从上到下就是第0页……第7页。这样以列号和页号为坐标,就可以指定交叉位置的8个像素。例如第0、1、2、3列第1页的8个像素,如图6所示。在液晶内部有一块显示缓存区,按照列号和页号就可以对显缓区的某个字节写数,该字节的8位二进制数就对应了液晶屏同样位置的像素的亮灭,如对第1列第1页的那个缓存单元写入0X80即0b10000000,那么液晶对应位置的最下面一点7亮(低位在上高位在下)其余都灭,如果第2列第1页写入0X0F即

0b00001111,则该位置上方4个点0123亮,其余像素不亮,第3列第1页写0X33,则该处间隔2点亮。这样就可以通过程序控制液晶屏的任意像素了。不同的液晶屏指令代码可能不同(例如这个屏和常见的7920驱动不一样),屏幕划分也可能不同,例如有的是分为左右两半,每半边64列,有的是分为上下两半等。

液晶SO12864-12C的编程要点

控制液晶最基本的工作就是往液晶的控制器写入命令码或往显缓区写入数据码,是命令还是数据由加到上述A0的电平高低决定:高,数据;低,命令。

因为现在是串行传送,所以只能由高到低一位位写。

串行只能写不能读。以前要靠读来判定液晶是否忙,这个液晶速度较高,实际使用证明串行传输不用读忙。

编程就是用单片机的几根口线按照所需的时序发出高低电平,再往液晶里送入代码或数据。控制脉冲和代码脉冲的时序关系如图7所示。

图7 控制脉冲和代码脉冲的时序关系

最常用的几个命令

显示开/关:代码:0XAF(开),0XAE(关)启动复位后为“关”,必须在液晶初始化时置“开”。

1.页地址定位:代码:0XB0……0XB7,对应第0页到第7页,复位后自动安置为第0页。

2.列地址定位:列地址是0X00……0X7F,但不是直接用列地址而要转换为双字节代码。方法是0X10加原高4位和0X00加原低4位。例如第33列,本是0X21,现在应该转换为0X12和0X01,分2次写入。

3.写显示数据:代码就是显示数据,控制脉冲A0为高。

4.复位:代码0XE2,通过程序使得液晶恢复各种起始默认状态。

5.有了这几条命令就已经可以使液晶画出以像素点为基础的图形或字符了。有些其他命令(如对比控制、亮度、偏压等)就取默认值,无需修改(初始化要用一下),还有些很有用的命令(如反向列页扫描、起始行、反白显示等),需要时再去查资料不迟。有了上述命令代码,我们就可以通过汇编或C语言,按照控制时序编出子程序或函数,以便在程序中使用。C语言因为易读性好、通用性好、移植性好所以用得较多,下面就给出一些C的函数,由它们就构成了液晶的驱动。

驱动液晶的基本C函数

我们用C语言编程,在C语言里,用“函数”把单片机的一系列具体操作包装起来起个函数名,需要时直接按名调用即可,非常方便。

首先必须解决怎样对液晶串行写数据的问题,然后按照A0线的高低,我们就可以自行编出写数据函数和写命令函数。

一下只列出函数说明和用法举例,函数的具体内容可到《无线电》网站上下载C程序代码。

串行传送1字节数据函数,参数为待传字节。1.

void LcdWriByte(unsigned char nn) //nn就是待写字节

这个是最基本的函数,不过我们不直接用它而是把它放在其他写数据函数里调用。

写命令。参数为命令码。2.

void LcdWriCommand(unsigned char command);

例如,打开显示:LcdWriCommand(0XAF);

写数据。参数为待写的显示数据。 3.

void LcdWriData(unsigned char data);

例如,写显示一个点的数据: LcdWriData(0X01);

指定列、页地址。参数为列地址x和页地址y。 4.

void LcdSetxy(unsigned char x,unsigned chary);

例如:LcdSetxy(68,2);//设置显示地址为第68列、第2页。

通常和上一个函数连用,见下一节函数应用举例。

在以上基本函数基础上我们还可以根据命令码推演出几个便于使用的功能函数。

开显示。

5.void LcdOn(void );

例:LcdOn( );

关显示。

6.void LcdOff(void );

例:LcdOff( );

软复位。用它可以在任何时刻使液晶屏回到起始状态而显示缓冲区内容不变。

7.void LcdReset(void );

例:LcdReset( );

刷屏。

8.void LcdCls(unsigned char data );

就是用数据data写满显示缓冲区,data如果为0,那全屏刷白(无像素显示),如果data 为0XFF则全屏刷黑(像素全部亮)。如果为0XAA呢?感兴趣的读者不妨实验一下。

例:LcdCls(0 );

最后给出该液晶的初始化函数,在系统启动后,MCU初始化以后就进行液晶初始化。

LCD初始化。

9.Void Lcd_ini();

通常在程序开始阶段进行,对各种参数进行设置,具体初始化项目请参看函数内容和注解。函数应用举例

在指定位置画1点

1.先给定页和列坐标,就指定了1列8个像素点,1个点的位置从上到下对应数值为0X01、0X02、0X04、0X08、0X10、0X20、0X40、0X80。

例如在第9列、第3页最低位画点:

LcdSetxy(9,3);

LcdWriData(0X80);

在指定位置画连续8个点构成的短竖线

2.例如位置同上,则

LcdSetxy(9,3);

LcdWriData(0XFF);

画水平线

3.例如从第10列起在第3页底部画1根长度50像素点的连续直线:

unsigned char i;

LcdSetxy(10,3);

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

{

LcdWriData(0X80); //循环中列地址自动递增

}

明白了以上基础,我们就可以进一步画出长短竖线、更粗的水平线、水平双线矩形方框、黑块等,这样就可以画简单图形了。

怎样显示字符或汉字

字符和汉字实质是在一个矩形区域内由一系列像素点构成的图形,也就是点阵图。例如在一个8×8点阵区域内,字母“L”点阵如图8左所示。如果要在第0页第0……第7列显示这个字符,那么就应该在相应的显示缓冲区装入相应的数据如右边图所示,这里用1表示显示像素,不显示的像素都是0,为清楚起见图中就不标出,上方表示列号0……7,那么从0列开始,各列的二进数和16进数分别表示为:

0B00000000 : 0X00

0B01000010 : 0X42

0B01111110 : 0X7E

0B01000010 : 0X82

0B01000000 : 0X40

0B01000000 : 0X40

0B01100000 : 0X60

0B00000000 : 0X00

所以我们就用一个8元素的数组来表示这个“L”:

const unsigned char L[8]={0X00,0X42,0X7E,0X82,0X40,0X40,0X60,0X00};

要在液晶上的第3页第6列显示这个“L”,就使用如下函数:

LcdShow88(unsigned x,unsigned y, const char *p);

其中p指向8点阵字符数组,那么具体代码为:

LcdShow88(6,3, L);

打造字模就是按照所需显示的文字符号一一编制各自的数组,上述8×8点阵就可以在1页高度内显示,实际上其上下左右都要留空,这样有效的点阵只有6×6,要显示数字和ASCII字符尚可,简单笔画的汉字也行,可是笔画稍多的汉字就不行了。对于汉字显示我们一般使用16×16点阵的字模。这样的汉字高度占2页,宽度是16列,12864的液晶可以显示4行,每行8个字。所有的12864液晶不论尺寸大小都是如此。

一个16点阵字模数组具有32个元素,每一页有16个元素。因此显示这样的汉字时,就要给同一列的某一页和下一页分别写入各自的16个元素。例如汉字“钟”的字模数组为:const unsigned char

ZHONG[?]={0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8 ,0x10,0x00,

0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00 };

要在第2页、第6列开始显示“钟”,我们用一个函数:

LcdShow1616(unsigned x,unsigned y, const char *p);

其中参数x 是列,y是页,p指向字模数组,具体的代码为:

LcdShow1616(6,2, ZHONG);

这样,汉字就显出来了。

最后,交代一下取得点阵汉字字模的方法。

编制字模数组的好帮手——字模软件的使用

因为我们现在需要的汉字量很少,所以可以使用一些字模提取软件自己制作所需的字模。以一个很好用的绿色免费“畔畔字模提取软件”为例加以说明。

此软件在各大程序网站都有下载,下载解压后就可使用,开启界面如图9所示。选取Shape :方形,Mode:C51,取模顺序选第4种,即点阵图右上为A,右下为B,左上为C,

左下为D,这是按照先右半从上到下,后左半从上到下的顺序取模。

图9

图10

图11

图12

然后在下面输入框里输入汉字回车后,左边显示点阵字,见图10。对点阵自行修饰改动,用鼠标点选即可,例如竖笔加粗等,这里没改。

点右旋90度按钮,点阵汉字右旋90度,其目的是由上往下取码,相当于显示时从左往右显示。点“提取字模”按钮,字模代码呈现在点阵下面,见图11。注意字模码有2行,

上行对应旋转后的右半区域从上往下取码,下行对应左半区域从上往下取码,这就等同于旋转前的汉字从左往右取码,而上行代码对应的是汉字的上半代码,下行则对应的是汉字的下半代码。正好符合上述汉字显示程序先显示上半部后显示下半部的要求。这样就取得了例子中的字模代码。

可以把所需的汉字逐一取码,然后存在二维表中,就形成了16×16点阵字模数组。

因为单片机FLASH ROM程序存储空间较大而RAM较小,而一个16点阵汉字占据32字节,10个字就320字节,对于RAM通常在几百到1K字节以下的单片机嫌太大,所以字库应该存放在FLASH区比较合理。但是读出FLASH中的数据,程序还要变一下,以使用GCC编程为例,前述字模常量和程序修改如下:

const unsigned char_[?]PROGMEM{0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x1 0,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x 02,0x02,0xFF,0x02,0x02,0x07,0x00,0x00,};

要在第2页第6列显示“钟”,用一个稍稍不同的函数:

LcdShowFlash1616(unsigned x,unsigned y, const char *p);

即:LcdShowFlash1616(6,2, ZHONG_);

就行了。

以上各有关函数具体内容可到《无线电》网站上下载。

制作非标准的字模

有时我们需要一些“非标准的”字符,例如12宽×16高或者8×8字符,同样也可以使用上述工具,不过这时字符就要用鼠标在选定区域内逐点点出,因为他提取的时候还是针对16×16点阵,所以最后还要去除多余的0字节,如图12表示一个数字9的取模。得到的代码上下排都去掉最后4个0字节如图中下面画线的那8个。最后每个字就24字节,程序中循环此书作相应改变。

好了喋喋不休一大堆,基本方法都交代了,说得口干看得头大,这次就到这里,下次结合一个具体的小日历钟,看看该怎么整。

大大小小的液晶模块在电子市场里有很多种,读者朋友不一定限于笔者所用的型号,如果有兴趣,在淘宝网上搜索小12864液晶即可。

带字库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)

很好用的12864驱动程序

/////////////////////////////////////////////////////////// #include #include #define uchar unsigned char #define uint unsigned int //////////单片机与液晶显示的引脚连接///////// sbit P32=P3^2; //RST sbit P33=P3^3; //CS2 sbit P34=P3^4; //CS1 sbit P35=P3^5; //E sbit P36=P3^6; //rs&DI sbit P37=P3^7; // R/W ////////延时///////// void delay(uint v) { while(v!=0)v--; } ////////复位/////////// void reset() { P32=0; delay(10); P32=1; delay(10); } ////////write code写指令/////// void wcode(uchar c,uchar cs1,uchar cs2) { P34=cs1; P33=cs2; P37=0; P36=0; P1=c; P35=0; delay(10);

P35=1; delay(10); P35=0; } /////////write data写数据/////////////// void wdata(uchar c,uchar cs1,uchar cs2) { P34=cs1; P33=cs2; P37=1; P36=0; P1=c; P35=0; delay(10); P35=1; delay(10); P35=0; } ////////////set start设置起始行///////////// void set_startline(uchar i)//起始行。11A5A4A3A2A1A0 共有64行 // 液晶显示器的最底层为第一行 { i=0xc0+64-i;//此算法为把最顶层做为第一层 wcode(i,1,1); } ////////////set 页值设置,起始列值函数///////////// void set_adr(uchar x,uchar y) { x=x+0xb8;//页地址设置。10111A2A1A0 DDRAM的8行为一页,A0~A2为页码,LCD为64行8页 y=y+0x40;//列地址设置。01A5A4A3A2A1A0 两半屏分别有64列,A0~A5送入列地址计数器, //作为列(Y)地址指针。每读写一次其自动加一,指向下一列DDRAM单元wcode(x,1,1); wcode(y,1,1); } ///////////on/off开/关显示函数//////////////

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

梁国书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、外形尺寸图

使用无字库12864液晶模块制作温湿度计

使用无字库12864液晶模块制作温湿度计 日历钟就摇身一变成为一个小小温湿度计啦。虽然气象要素很多,不过我们最常用的就是气温和湿度。一个是冷热程度,一个是环境空气中含水蒸气的多少。一般家用温度计很常见,湿度计就比较少,以前有一种干湿球温度计,但是用起来比较麻烦,准确度也不高。现在应用电子技术我们就可以做一个可以同时显示温度、湿度、时间的小仪器,放在家里以便随时监测我们的小环境。它的特点如下: 1.在单片机ATMega8L-8PU(以下简称M8)和日历钟电路DS1302的基础上,使用一个在工厂经过精密校准的数字式温度、湿度传感器AM2301作为探头; 2.当24小时连续工作时,纵然工作电流仅为几毫安,也不宜使用纽扣电池供电。这次选用可充电的 3.6V聚合物锂电池,使它的放置地点可以不受电源限制,可以在室内,也可以在不受阳光直射和雨水接触的室外; 3.具有文字和图形界面,可以显示温度和湿度数值,以及12小时内的湿度变化记录曲线,为什么是湿度曲线呢?因为气温的变化规律一般比较稳定,湿度就不一样了,我们可以从湿度变化趋势估计一下未来的晴雨可能,这比看燕子飞高飞低要靠谱些吧?两个界面用按键切换; 4.具备锂电池线性充电电路,通过USB接口从外部取得5V电源,一边供给充电,一边维持电路继续工作;全部元器件安装在一块70mm×90mm的小万用板上,正面、背面外形见图1、图2。正面左边那个黑色小乌龟壳就是温湿度探头。 图2 电路板背面元器件分布和连线 电路原理 电路见图3。图形点阵液晶、单片机M8、时钟电路DS1302和上次小小日历钟基本相同,不再重复。有两点稍稍不同:1.液晶的控制虽然还是通过M8的PD口,但具体接线有所改变,不再占用两根串口线PD0和PD1,目的是为今后可能和外部通信预留接口。这好办,编程时重新定义即可;

Protues中单片机驱动12864仿真

Protues中单片机驱动lcd12864液晶显示屏仿真: Protues中lcd12864是无字库的,要让它显示一个数字或者汉字或者图片,都需要先对其取模。那么首先介绍介绍一款比较好用的取模软件,百度搜索“zimoV2.2”就可以了。下面先介绍这个取模软件的使用方法: 1.打开软件,界面如下: 2.通常我们显示汉字用的是16×16的像素大小,而显示数字用的是16×8的格式,那么选择文字输入区字体选择,弹出的界面选择如下:

3.其次在“其他选项”中,选择如下: 4.上面设置好之后我们就可以在文字输入区输入汉字了,以“Ctrl”+“Enter”结束:

的模存放在相应的数组中:

上面为取模软件的使用方法,下面开始正式教给读者单片机驱动lcd12864液晶显示屏的方法,在这之前,需要对无字库lcd12864液晶显示屏有个基础的了解,相关引脚如下:管脚名称LEVER 管脚功能描述 VSS 0 电源地 VDD +5.0V 电源电压 V0 - 液晶显示器驱动电压 D/I(RS) H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0 R/W=“L”,E=“H→L”数据被写到IR或DR E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0 R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0 DB0 H/L 数据线 DB1 H/L 数据线 DB2 H/L 数据线 DB3 H/L 数据线 DB4 H/L 数据线 DB5 H/L 数据线 DB6 H/L 数据线 DB7 H/L 数据线 CS1 H/L H:选择芯片(右半屏)信号 CS2 H/L H:选择芯片(左半屏)信号 RET H/L 复位信号,低电平复位 VOUT -10V LCD驱动负电压 LED+ - LED背光板电源 LED- - LED背光板电源 通过控制CS1和CS2可以用来使能左半屏和右半屏,两个半屏的页和列都是相同的,如下图:

带字库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中文资料及字库说明书

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(无时钟芯片显示时间)

/************************************************************************** 在无字库的12864LCD上显示时、分、秒;没有用时钟芯片 MCU:STC89C52 晶振:11.0592MHz 作者:罗元俊 时间:2014.06.25 **************************************************************************/ #include typedef unsigned char uchar; typedef unsigned int uint; #define Port P0 // 数据端口 #define Disp_On 0x3f // 开显示 #define Disp_Off 0x3e // 关显示 #define Col_Add 0x40 // 列地址 #define Page_Add 0xb8 // 页地址 #define Start_Line 0xc0 // 起始页 sbit RS = P2^6; sbit RW = P2^5; sbit EN = P2^7; sbit CS1 = P3^2; sbit CS2 = P3^3; uint t = 0; //全局变量:秒表(用于计数时间的增量) uchar sec,min,hour; // 全局变量:秒、分、时 uchar a,b,c,d,e,f; // 秒、分、时的个位和十位 uchar code HZ_tab[][32] = { {/*-- 文字: 潜--*/ /*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0xC2,0x0C,0x80,0x10,0x94,0x54,0x3F,0x54,0x90,0x54,0x3F,0x54,0x94,0x10,0x00, 0x04,0x04,0x7E,0x01,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x01,0x00}, {/*-- 文字: 龙--*/ /*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0xF0,0x10,0x11,0x16,0xD0,0x10,0x10,0x00, 0x80,0x40,0x20,0x18,0x06,0x41,0x20,0x10,0x3F,0x44,0x42,0x41,0x40,0x40,0x78,0x00}, {/*-- 文字: 花--*/ /*-- 新宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x04,0x04,0x04,0x84,0x6F,0x04,0x04,0x04,0xE4,0x04,0x8F,0x44,0x24,0x04,0x04,0x00, 0x04,0x02,0x01,0xFF,0x00,0x10,0x08,0x04,0x3F,0x41,0x40,0x40,0x40,0x40,0x78,0x00},

protues中无字库12864汉字显示程序

#include #define uint unsigned int #define uchar unsigned char void page(uchar ye); void lie(uchar lie); sbit reset1=P3^0; sbit rs=P3^7; sbit e=P3^5; sbit cs1=P3^3; sbit cs2=P3^4; sbit rw=P3^6; sbit busy1=P1^7; const uchar code hz[]={ /*-- 文字: 王--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x02,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, /*-- 文字: 者--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x20,0x20,0x24,0x24,0x24,0x24,0xBF,0x64,0x24,0x34,0x28,0x24,0x22,0x20,0x20,0x00, 0x10,0x08,0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00, /*-- 文字: 归--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xFC,0x00,0x00,0xFF,0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00, 0x00,0x87,0x40,0x30,0x0F,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00, /*-- 文字: 来--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x08,0x08,0x28,0xC8,0x08,0x08,0xFF,0x08,0x08,0x88,0x68,0x08,0x08,0x00,0x00, 0x21,0x21,0x11,0x11,0x09,0x05,0x03,0xFF,0x03,0x05,0x09,0x11,0x11,0x21,0x21,0x00, /*-- 文字: 谁--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40,0x42,0xCC,0x00,0x40,0x20,0xF8,0x4F,0x48,0x49,0xFE,0x48,0x48,0x48,0x08,0x00, 0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x22,0x22,0x22,0x3F,0x22,0x22,0x22,0x20,0x00, /*-- 文字: 的--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xF8,0x0C,0x0B,0x08,0x08,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0xF8,0x00,0x00, 0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x43,0x80,0x40,0x3F,0x00,0x00, /*-- 文字: 时--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00, 0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00, /*-- 文字: 代--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x00,0x80,0x60,0xF8,0x07,0x20,0x20,0x20,0x7F,0xA0,0x10,0x11,0x16,0x10,0x10,0x00, 0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00, /*-- 文字: 大--*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

带字库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};

无字库12864使用protues仿真

原理图: 原程序: #include<> #define uchar unsigned char #define uint unsigned int #define Port P0 //DB0~DB7数据口 sbit EN=P2^2;//使能 sbit RW=P2^1;//读写 sbit RS=P2^0;//数据/命令 sbit CS2=P2^3;//片选 sbit CS1=P2^4; /*图片“生活不易,知行合一”*/ unsigned char code tu[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00, 0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF 8,0xF8, 0x7C,0x7C,0x7C,0x7C,0x3E,0x3E,0x3E,0x3E,0x3E,0x3F,0x1F,0x1F,0x1F,0x1F,0x1 F,0x1F, 0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0 F,0x0F,

0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x3E,0x3E,0x3E,0x3 E,0x3E, 0x7C,0x7C,0x7C,0x7C,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC 0,0xC0, 0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xF E,0x7E, 0x3F,0x3F,0x1F,0x0F,0x0F,0x07,0x07,0x07,0x03,0x83,0x61,0x39,0x29,0x20,0x2 0,0xFC, 0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x64,0xC8,0x10,0x40,0x48,0x48,0x4 8,0x48, 0xF8,0x48,0x44,0x44,0x44,0x40,0x00,0x04,0x04,0x04,0x04,0x84,0x64,0xF4,0x0 C,0x84, 0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x7C,0x54,0xD4,0x54,0x54,0x54,0x54,0x5 4,0x54, 0x54,0xFC,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x07,0x0 7,0x0F, 0x0F,0x1F,0x1F,0x3F,0x7E,0x7E,0xFC,0xF8,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x0 0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,

基于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,

12864讲解

辛勤学习了好几天,终于对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个液晶点的显示信息。 为了使液晶点位置信息与存储地址的对应关系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息,每页包括64个存储单元。因此存储单元地址包括页地址(Xpage,0~7)和列地址(Yaddress,0~63)。例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。

SG12864-12带汉字库LCD显示器

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

12864的液晶显示程序(无字库)

12864.h #ifndef __12864_H__ #define __12864_H__ #include #include /*************************************** 利用I/O口模拟点阵液晶所需时序 点阵液晶控制端口定义,需根据硬件适当改变 ****************************************/ sbit LCD_RS = P2^5;//控制端口定义 sbit LCD_RW = P2^6; sbit LCD_E = P2^7; sbit LCD_CSA = P2^4;//H选通,即高电平有效 sbit LCD_CSB = P2^3; #define LCD_Data P0//LCD数据端口8位 #define R 1 #define L 2 /***************************************** 函数声明 *****************************************/ void ReadStatusLCD(unsigned char select);//从LCD读出忙标志位 unsigned char ReadDataLCD(unsigned char select);//从LCD读出数据 void WriteDataLCD(unsigned char WDLCD,unsigned char select);//向LED写入数据 void WriteCommandLCD(unsigned char WCLCD , unsigned char BusyC,unsigned char select);//向LCD写入命令 void LcdReset(void) ;//初始化函数,完成液晶模块的初始设置 void clear_LCD(unsigned char select);//清屏函数 void Clr_All_Lcd(void);//全清屏函数 void set_XY(unsigned char Column,unsigned char Page);//设置数据写入或读出的地址,通过页号和列数可以唯一确定一个地址 void xy_Write(unsigned char Column,unsigned char Page,unsigned char dataW);//向指定行列写数据 void LcmPutDots(unsigned char Column,unsigned char Page, unsigned char DotByte );//显示点void whiteword(unsigned char Column,unsigned char Page, const unsigned char puts[][16] );//显示16×16点阵的编码 void WhiteWord_Com(unsigned char Column,unsigned char Page,unsigned char C_num, unsigned char V_num, unsigned char * puts );//通用的显示函数void Drawing_dot(unsigned char x,unsigned char y); void Drawing_line_vertical(unsigned x); #endif 12864.c

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