12864讲解

合集下载

液晶12864

液晶12864

0
0
1
1
0
0
0
0

0
0
◆页(PAGE)设置指令(0xb8)
RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
1
0
1
1
1
0
0
0
◆列地址(Y Address)设置指令(0x40)
RW
RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
1
0
1
1
1
0
0
0
◆读状态指令
LCD驱动负电压 LED背光板电源
20
LED-
LED背光板电源
12864的DDRAM地址
XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为 DDRAM的页指针,Y地址计数器为DDRAM的Y(列)地址指针。 X地址计数器没有记数功能,只能用指令设置。Y地址计数器具有循环 记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
◆写数据指令
RW RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
1
要写的数据
注:EN的下降沿
◆写命令指令
RW RS
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0
0
要写的数据
注:EN的下降沿
◆读数据指令
RW 1
RS 1
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 读显示的数据
数据线 数据线 数据线 数据线 数据线
12 13
DB5 DB6

12864液晶显示模块概述

12864液晶显示模块概述

TC
13,000
Address setup time
TAS
1,500
Address hold time
TAH
1,500
Data setup time
TDDR
1,000
Unit KHz UNIT
ns ns ns ns ns ns ns
ns ns ns ns
使用说明书
Data hold time Enable pulsewidth Enable rise/fall time
2、 “RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维 持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。
72us
读出 RAM
从 内 部 RAM 读 取 资 料
的值
1 1 D7 D6 D5 D4 D3 D2 D1 D0 (DDRAM/CGRAM/IRAM/GDRAM)
72us
指令表—2:(RE=1:扩充指令集)
指令
指令码
RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
说明
执行时间 (540KHZ)
8 RS
H/L H: Data L: Instruction Code
9 NC
- 空脚
10 /RST
H/L Reset Signal 低电平有效
注K
背光源负极(LED-OV)
引脚 名称 11 DB0 12 DB1 13 DB2 14 DB3 15 DB4 16 DB5 17 DB6 18 DB7 19 NC 20 NC
A
方向 说明 I/O 数据 0 I/O 数据 1 I/O 数据 2 I/O 数据 3 I/O 数据 4 I/O 数据 5 I/O 数据 6 I/O 数据 7

12864讲解

12864讲解

四.汉字显示坐标

上图中是字符显示的RAM地址与32个字符显示区域一 一对应的关系。
五.使用时注意事项:

欲在一个位置显示中文字符时应先设定显示 字符位置,即先设定显示地址,再写入中文字符 编码。

模块在接受指令前,向处理器必须先确认模 块内部处于非忙状态,即读取BF标志时BF需 等于零。但是由于单片机的操作速度低于液晶控 制器的反应速度,因此简单延时即可。
二.主要技术参数
显示容量
芯片工作电压 模块最佳工作电压 与MCU接口 工作温度(常温型) 工作温度(常温型)
128×64
3.3-5.5 5.0V 8位或4位并行/3位串行 -10℃----+60℃ -20℃-----+70℃
三.管脚及其功能说明
二.
*重点管脚及其功能
• CS (RS)液晶的片选信号线,每次在进行数据 操作时都给高电平。 • SCLK(E)串行同步时钟线,每次SCLK由低电 平变为高电平的瞬间,液晶控制器将SID上的数 据读入或输出。 • SID(R/W)串行数据,每次操作由三个字节 数据组成.第一字节向控制器发送命令控制字, 说明控制器接下来的操作(若为写指令则发送 11111000,若为写数据则发送1111010.)第二字 节,第三字节分别发送高位和低位数据。
一.12864液晶的简单介绍:
其显示分辨率为128×64, 内置8192 个 16*16 点汉字,和128 个16*8 点ASCII 字符 集。 可以显示8×4 行16×16 点 阵的汉字. 也可完 成图形显示


一.12864液晶的简单介绍:
由该模块构成的液晶显示方案与同类型的图形点阵液 晶显示模块相比,不论硬件电路结构或显示程序都要简洁 得多,且该模块的价格也略低于相同点阵的图形液晶模块 。 • 低电压低功耗是其又一显著特点。 •

51单片机综合学习系统之12864点阵型液晶显示篇

51单片机综合学习系统之12864点阵型液晶显示篇

51单片机综合学习系统之 12864点阵型液晶显示篇大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了1602字符型液晶显示的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习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 管脚功能描述1 VSS 0 电源地2 VDD +5.0V 电源电压3 V0 - 液晶显示器驱动电压4 D/I(RS> H/L D/I=“H”,表示DB7∽DB0为显示数据D/I=“L”,表示DB7∽DB0为显示指令数据5 R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6 E H/L R/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07 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 CS1 H/L H:选择芯片(右半屏>信号16 CS2 H/L H:选择芯片(左半屏>信号17 RET H/L 复位信号,低电平复位18 VOUT -10V LCD驱动负电压19 LED+ - LED背光板电源20 LED- - LED背光板电源表1:12864LCD的引脚说明在使用12864LCD前先必须了解以下功能器件才能进行编程。

12864总结

12864总结

1602知识点总结1、注意一些初始化的设置:比如基本指令设置的代码为0x30 扩充指令的代码为0x34;开显示、光标、反白、清屏等指令2、引脚说明3、12864有并行和串行两种方式。

并行和1602的时序图一样,使用I/O口较多,但传送速度快。

串行使用I/O口较少;速度相对较慢。

串行常用的引脚有:引脚4—数据/命令(1/0)选择端RS(CS);引脚5—读/写(1/0)选择端R/W(SID);引脚6—使能信号SCLK;引脚15—并/串(1/0)选择;4、时序图并行读/写时序图串行读/写时序图⑴CS在每次进行数据操作时都必须拉高⑵SLCK操作一位数据都要有跳变,由低变高有效,液晶控制器将SID上的数据读入或输出。

⑶SID—串行数据,每次操作都由三个字节数据组成①第一个字节向控制器发送命令控制字:代码0xf8—写指令;代码0xfa—写数据;②第二个字节:发送指令或数据的高四位,第二字节的低四位补0;③第三个字节:发送指令或数据的低四位,第三字节的低四位补0;四、用户指令集串行部分程序代码:/*………………发送命令函数…………………………………………………………………………………………*/void lcd_send_com(uchar com){uchar n;uchar date1;date1=0xf8; //写命令的代码lcdrs=1; //数据命令端为高lcdrw=0;for(n=0;n<8;n++) /*第一个字节发送命令控制字*/ {lcdrw=(bit)(date1&0x80); //将date1与0x80与运算后的值强制转换成bit型,即只取最高位。

//整条语句的意思是将date1的最高位取出给lcdrwlcden=0;lcden=1; //将lcdrw的传送给12864date1=date1<<1; //左移一位;此句的作用是将date1的每一位从高到低在lcden的作用下送给lcdrw//从而传给液晶}date1=com;date1&=0xf0; //作与运算,作用是将所发送字节的高四位取出,低四位补0for(n=0;n<8;n++) /*第二个字节的处理,“所发字节”的高四位取出,第二字节低四位补0*/{lcdrw=(bit)(date1&0x80); //将date1与0x80与运算后的值强制转换成bit型,即只取最高位。

第二十四篇上 12864

第二十四篇上 12864

第二十四篇上 1286412864是俗称,指的是12864液晶,分辨率为128*64。

市场中它的型号众多,不过基本原理是一致的,所以这里着重以通用的方式介绍12864。

为了能基本操作12864,这里只讨论不带字库的12864。

下面分5部分讨论:1.基本原理;2.并口方式;3.串口方式;4.显示字符;5.显示RTC(下篇)。

为了不影响我们学嵌入式的主题,这里只讨论了12864的基本操作,汉字、图像、GUI、控制显示都未做,如果感兴趣,可以和我讨论。

1.基本原理:初看这8192(128*64)个点,感觉好复杂,其实是很简单的,因为分区很明确,如下图:这样8个页和128个列把屏幕分为1024个字节,字节是高位在上,低位在下。

有的地方和我说的正好相反,那是因为他们从哪个方向看的缘故,而且12864有命令可以实现上下颠倒和左右反转;有的12864分为左半屏和有半屏,分别由两个引脚控制,但原理是一致的。

所以向某个地方写一个字节可以分为三步:确定某页,确定某列,写一个字节(1)确定某页:就是向12864写一个命令“0xBx”,x为0~7,比如0xB0就是指定第0页。

(2)确定某列:这要向12864连续写两个字节:0x1x和0x0y,x为列地址的高4位,y为列地址的低4位,比如0x15和0x03,就是指定0x53列。

(3)直接写一个字节就行可以这样编程://在某页某列显示一个字节void display_byte(u8 page,u8 column,u8 byte){write_command(0XB0+page); //在page页写字符的上半部分,写入页地址的指令为0xBx,x为0~7write_command(0x10+column/0x10); //写入列地址的指令为连续输入0x1x和0x0y,x为列地址的高4位write_command(0x00+column%0x10); //y为列地址的低4位write_data(byte);}2.并口方式:这里选用12864F-3并口的12864除了电源和接地以外,主要有res(复位)、A0(命令/数据选择)、RW(读/写选择)、E(接收使能,一个下降沿会让12864接收当前并口上的数据)、D0~D7(并口)。

12864串行显示中文讲解

12864串行显示中文讲解

12864串行显示中文,按键选择显示页面,并且可调数值。

单片机P1口接矩阵按键,其它接口按程序中定义去接只需要接12864LCD上GND VCC RS RW E PSB RST A K程序如下/********************************12864.h头文件*******************************/ #ifndef _12864_h#define _12864_h/*****包含头文件**************/#include<reg51.h>/********定义I/0口**********/#define GPIO_KEY P1sbit LCD12864_SCLK = P2^7; //Esbit LCD12864_SID = P2^5; //RWsbit LCD12864_CS = P2^6; //RSsbit LCD12864_RET= P2^0;sbit LCD12864_PSB =P2^2;/*声明全局变量*/extern unsigned char keyvalue;/******声明全局函数*********/void Delay1ms(unsigned int); //声明延时函数unsigned char KeyDown(void);void LCD_sendbyte(unsigned char);void WrCom(unsigned char);void WrDat(unsigned char);void LcdInit(void);//void Print(unsigned char);void SetAddress( unsigned char,unsigned char );void DisplayString(unsigned char x ,unsigned char y,unsigned char *add);#endif/********************************12864.C*************************************/ #include"12864.h"#include<reg51.h>#include"string.h"//#define LCM_ST7920_FIRST_LINE_ADDRESS 0x80//#define LCM_ST7920_SECOND_LINE_ADDRESS 0x90//#define LCM_ST7920_THIRD_LINE_ADDRESS 0x88//#define LCM_ST7920_FOURTH_LINE_ADDRESS 0x98/*定义全局变量*/unsigned char keyvalue=0;/****************************************************************************** ** 函数名: Delay1ms* 函数功能: 延时函数,延时1ms* 输入: c* 输出 e : 无* 说名: 该函数是在12MHZ晶振下,12分频单片机的延时。

12864液晶屏学习使用手册

12864液晶屏学习使用手册

12864液晶屏学习手册一、液晶显示模块概述12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵,16*8=128,16*4=64,一行只能写8个汉字,4行;)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。

主要技术参数和显示特性:电源:VDD 3.3V~+5V(内置升压电路,无需负压);显示内容:128列× 64行(128表示点数)显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等二、外形尺寸1.外形尺寸图2.主要外形尺寸二、模块引脚说明逻辑工作电压(VDD):4.5~5.5V电源地(GND):0V工作温度(Ta):0~60℃(常温) / -20~75℃(宽温)三、接口时序模块有并行和串行两种连接方法(时序如下):8位并行连接时序图MPU写资料到模块MPU从模块读出资料2、串行连接时序图串行数据传送共分三个字节完成:第一字节:串口控制—格式11111ABCA为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCDB为数据类型选择:H表示数据是显示数据,L表示数据是控制指令C固定为0第二字节:(并行)8位数据的高4位—格式DDDD0000第三字节:(并行)8位数据的低4位—格式0000DDDD串行接口时序参数:(测试条件:T=25℃VDD=4.5V)备注:1、当模块在接受指令前,微处理顺必须先确认模块内部处于非忙碌状态,即读取BF标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,(一般在输入每天指令前加个delay)那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。

2、“RE”为基本指令集与扩充指令集的选择控制位元,当变更“RE”位元后,往后的指令集将维持在最后的状态,除非再次变更“RE”位元,否则使用相同指令集时,不需每次重设“RE”位元。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辛勤学习了好几天,终于对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)上的液晶点。

芯片的结构一定要清楚!点阵LCD的显示原理在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。

对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。

而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。

而剩下的低128位则留给英文字符使用,即英文的内码。

那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:图1 “A”字模图而中文的“你”在字模中的记载却如图2所示:图2 “你”字模图字符二级单元(图3中阴影部分)一个汉字的二级单元是一个16*16的区域,因些128*64液晶可以显示4行8列共32个汉字(如图3)。

而它的一个二级单元如图4(在无字库时,对汉字的取模有横向跟纵向两种,要注意),对于并行含有子库芯片的显示,只要设定好这个二级单元的地址(如0X80+i,这样设定i的范围为0~31,这里注意第一行会直接跳到第三行;或者根据自己需要如第二行0X90+i,i范围为0~7;第三行0X88+i,i范围为0~7;),然后直接把汉字写入就OK了~(串行无字符库的后面再做分析)垂直坐标:上半屏00~1F,总共为32水平坐标:上半屏水平坐标分别为0X80+(00~07)下半屏00~1F,总共为32 下半屏水平坐标分别为0X88+(00~07)图片显示芯片结构分块与汉字显示不一样图象显示过程是这样的:首先设置垂直地址,再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址,然后在每个地址里写入16位数据)。

垂直地址范围 AC5...AC0水平地址范围 AC3…AC0绘图RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时会重新设为00H但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。

GDRAM的坐标地址与资料排列顺序如图5:分上下屏写入。

for(i=0;i<32;i++) // 上半屏32个垂直地址{write_com(0x80 + i); // 垂直地址write_com(0x80); // 水平地址for(j=0;j<16;j++){write_data(*adder);adder++;}}带中文字库的128X64显示模块时应注意以下几点:①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。

不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。

如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。

指令执行的时间请参考指令表中的指令执行时间说明。

⑤“RE”为基本指令集与扩充指令集的选择控制位。

当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。

程序———————并行(串行后面再分析)——————————————————————————#include <stdio.h>#include <reg52.h>#include <intrins.h>#include <string.h>#define uchar unsigned char#define uint unsigned intuchar code LCD_data1[];uchar code LCD_data2[];uchar code LCD_picture1[];uchar code LCD_picture2[];sbit RS = P2^4;sbit RW = P2^5;sbit EN = P2^6;sbit PSB = P2^1;sbit RES = P2^3;sbit Dataport = P0;sbit Busyport = P0^7;////////////////////////////////////////////////////////////// void delay_ms(unsigned int n) //延时10×n毫秒程序 {unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<2000;j++);}void delay(unsigned int m) //1US延时程序{unsigned int i,j;for(i=0;i<m;i++)for(j=0;j<10;j++);}/////////////////////////////////////////////////////////////// //判LCM忙子函数void check_LCD_busy (void){Dataport = 0xff;RS = 0;RW = 1;EN = 1;while (Busyport);EN = 0;}/////////////////////////////////////////////////////////////// //写命令子函数void write_com(uchar Command){check_LCD_busy();RW=0;RS=0;delay(1);P0=Command;EN=1;delay(1);EN=0;}//////////////////////////////////////////////////////////////////写数据子函数void write_data(uchar Data){check_LCD_busy();RW=0;RS=1;delay(1);P0=Data;EN=1;delay(1);EN=0;}///////////////////////////////////////////////////////////////////LCM清屏函数void lcdClear (void){write_com(0x01);}//////////////////////////////////////////////////////////////////LCM复位函数void reset (){RES=0; //复位delay(1); //延时RES=1; //复位置高delay(10);}/////////////////////////////////////////////////////////////////显示汉字void dispString (uchar X, Y,uchar *msg) //X为哪一行,Y为哪一列。

msg 为汉字{if(X==0) X = 0x80; //第一行,汉字显示坐标else if(X==1) X = 0x90; //第二行else if(X==2) X = 0x88; //第三行else X = 0x98; //第四行Y = X + Y; //Y为1往右移一位write_com(Y); //写入坐标while (*msg){write_data(*msg++); //显示汉字}}/////////////////////////////////////////////////////////////// //显示图象void disppicture(uchar code *adder){uint i,j;//*******显示上半屏内容设置for(i=0;i<32;i++) // 上半屏32个垂直地址 {write_com(0x80 + i); //SET 垂直地址 VERTICAL ADDwrite_com(0x80); //SET 水平地址 HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;}}//*******显示下半屏内容设置for(i=0;i<32;i++) //{write_com(0x80 + i); //SET 垂直地址 VERTICAL ADD write_com(0x88); //SET 水平地址 HORIZONTAL ADDfor(j=0;j<16;j++){write_data(*adder);adder++;}}}/////////////////////////////////////////////////////////////// //LCD字库初始化函数void lcdinit_str(void){delay(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay(1); //延时reset(); //复位write_com(0x30); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFFdelay(100); //大于100uS的延时程序write_com(0x30); //Function Setdelay(37); ////大于37uS的延时程序write_com(0x08); //Display on Controldelay(100); //大于100uS的延时程序write_com(0x10); //Cursor Display Control光标设置delay(100); //大于100uS的延时程序write_com(0x0C); //Display Control,D=1,显示开delay(100); //大于100uS的延时程序write_com(0x01); //Display Cleardelay(10); //大于10mS的延时程序write_com(0x06); //Enry Mode Set,光标从右向左加1位移动delay(100); //大于100uS的延时程序}////////////////////////////////////////////////////////////////////LCD图片(扩展)初始化函数void lcdinit_pic(void){delay(40); //大于40MS的延时程序PSB=1; //设置为8BIT并口工作模式delay(1); //延时reset();write_com(0x36); //Extended Function Set RE=1: extended instructiondelay(100); //大于100uS的延时程序write_com(0x36); //Extended Function Set:RE=1: extended instruction setdelay(37); ////大于37uS的延时程序write_com(0x3E); //EXFUNCTION(DL=8BITS,RE=1,G=1)delay(100); //大于100uS的延时程序write_com(0x01); //CLEAR SCREENdelay(100); //大于100uS的延时程序}/////////////////////////////////////////////////////////////////void main(){while(1){lcdinit_str();delay_ms(10); //此延时如果没有的话第一行会一直在第一列dispString(0, 1,"祖国江山好");delay_ms(10);dispString(1, 1,"爱情少不了");delay_ms(10);dispString(2, 1,"为了下一代");delay_ms(10);dispString(3, 1,"赶紧谈恋爱");delay_ms(200);delay_ms(200);lcdClear();delay_ms(10);dispString(0, 1,"大名吴建峰");delay_ms(10);dispString(1, 1,"性别为非女");delay_ms(10);dispString(2, 1,"芳龄二十二");delay_ms(10);dispString(3, 1,"海拔一百六");delay_ms(200);delay_ms(200);lcdinit_pic();lcdClear();delay_ms(10);disppicture(LCD_picture1);delay_ms(300);delay_ms(300);}}图象代码库见最后!~成果——————————————————————————————————图形取模方法(转):128*64的像素能显示的内容就有限,也无法要求它能多清楚,如果将一个彩色的图片转换为单色位图,效果就更差了,个人不建议用它来显示彩色的图片,如果真要用128*64的液晶显示,建议如下:1.尽量选择颜色比较单一的图片,当然一种颜色的效果最好不过了;2.图片不能选择的太大,要不缩小了就看不清楚了;3.图片的调整可以这样(仅供参考):1>调整图片的宽高比大致为2:1;2>将图片缩小到128*64像素;3>保存为单色位图;图片的大小缩放不太好操作,我通常是这样做的:你用画图程序打开你要显示的图片后,首先要操作的查看属性(点击菜单栏的图像->属性,单位选择为像素后,宽高值就出来了),比如:宽:603,高:444,这显然宽高比不是2:1,你就要调整了,444*2=888,现在为603,所以888/603=1.47,所以宽要放大为147%(点击菜单栏的图像->拉伸/扭曲,在拉伸里面的水平处改为147),现在就调整为2:1了;接下来就要将图片缩小到128*64像素,先计算缩放的比例,128/888=0.144,所以相同的操作(点击菜单栏的图像->拉伸/扭曲,在拉伸里面的水平处改为14,垂直里面也要改为14);最后就是保存为单色位图(文件->另存为->文件类型选择为:单色位图(.bmp))?试过颜色比较单一的,效果还可以,复杂的彩色图片效果就很不理想了...说明:在调整图片的宽高比大致为2:1的过程中图片会被拉伸变形,不过缩小到128*64像素后也不是太明显...图片取模图片代码——————————————————————————————————uchar code LCD_picture1[]={0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x18,0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x18,0x00,0x03,0x00,0x07,0xEC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0 0,0x37,0x80,0x03,0x00,0x00,0xEC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x1 8,0x3F,0xC0,0x03,0x00,0x0F,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1 8,0x79,0x80,0x03,0x00,0x0F,0x6B,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x1 8,0x7F,0x00,0x1F,0xF4,0x01,0xE9,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xE0,0x1 8,0xFF,0x80,0x1F,0xFC,0x00,0xFB,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0xC6,0x70,0x1 B,0x1E,0xC0,0x03,0x38,0x01,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x86,0x38,0xD B,0xFF,0xE0,0x03,0x70,0x07,0x9E,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x26,0x18,0xD B,0x8C,0x70,0x7F,0xFF,0x87,0x27,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x01,0xF F,0xFF,0xB8,0x7F,0xFF,0x80,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x0 0,0x0C,0x18,0x07,0x80,0x00,0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0 0,0xFF,0xE0,0x0F,0x00,0x00,0xFB,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF 0,0xFF,0xE0,0x1F,0x30,0x01,0xCF,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,0x03,0xFF,0xF F,0x0C,0x00,0x3B,0x36,0x03,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF F,0xCC,0x00,0x73,0x76,0x03,0x3F,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF F,0xFC,0x00,0x63,0xE6,0x00,0x3F,0xFF,0xFF,0xDC,0x80,0x00,0x00,0x00,0x7F,0xFF,0xF F,0xFC,0x00,0x03,0xFE,0x00,0x7F,0xFF,0xFF,0xAF,0x60,0x00,0x00,0x00,0xFF,0xFF,0xF F,0xFC,0x00,0x03,0xFE,0x00,0xFF,0xFF,0xFF,0xF5,0xC0,0x00,0x00,0x01,0xFF,0xFF,0xF F,0xFC,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x23,0x20,0x00,0x00,0x03,0xFF,0xFF,0xF F,0xFE,0x00,0x00,0x00,0x03,0xFF,0x8F,0xE3,0xEC,0xA0,0x00,0x00,0x03,0xFF,0x1F,0xC0x00,0x00,0x03,0xFF,0x07,0xC1,0x92,0xC0,0x00,0x00,0x07,0xFE,0x0F,0x8 3,0xFF,0x80,0x00,0x00,0x07,0xFF,0x03,0xC0,0xE9,0xC0,0x00,0x00,0x0F,0xFE,0x07,0x8 1,0xFF,0x80,0x00,0x00,0x07,0xFE,0x03,0x80,0xED,0xE0,0x00,0x00,0x0F,0xFC,0x07,0x0 1,0xFF,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xDD,0xE0,0x00,0x00,0x1F,0xFC,0x37,0x6 1,0xFF,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0xE0,0x00,0x00,0x1F,0xFC,0x37,0x6 1,0xFF,0xC0,0x00,0x00,0x0F,0xFE,0x1B,0xB0,0xFF,0xF0,0x00,0x00,0x1F,0xFC,0x37,0x6 1,0xFF,0xE0,0x00,0x00,0x1F,0xFE,0x1B,0xB0,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x37,0x6 1,0xFF,0xE0,0x00,0x00,0x1F,0xFF,0x03,0xC0,0xFF,0xF0,0x00,0x00,0x3F,0xFE,0x07,0x8 1,0xFF,0xE0,0x00,0x00,0x1F,0xFF,0x07,0xC1,0xFF,0xF0,0x00,0x00,0x3F,0xFE,0x0F,0x8 3,0xFF,0xE0,0x00,0x00,0x1F,0xFF,0x8C,0x63,0xFF,0xF0,0x00,0x00,0x3F,0xFF,0x1F,0xC 7,0xFF,0xE0,0x00,0x00,0x1F,0xDF,0xFC,0x7F,0xF7,0xF0,0x00,0x00,0x3F,0xFF,0xF0,0x7 F,0xFF,0xE0,0x00,0x00,0x1F,0x07,0xFF,0xFF,0xD1,0xF0,0x00,0x00,0x3F,0xFF,0xE0,0x3 F,0xFF,0xE0,0x00,0x00,0x1E,0x03,0xFF,0xFF,0x80,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x0 0,0x07,0xE0,0x00,0x00,0x1E,0x03,0xFE,0xFF,0xC0,0xF0,0x00,0x00,0x3F,0xE0,0x00,0x0 0,0x0F,0xE0,0x00,0x00,0x0C,0x01,0xF8,0x3F,0x80,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x0 0,0x1F,0xC0,0x00,0x00,0x0E,0x03,0xF0,0x1F,0xC0,0xE0,0x00,0x00,0x1F,0xF0,0x0F,0xC 0,0x1F,0xC0,0x00,0x00,0x1E,0x03,0xF0,0x1F,0x80,0xE0,0x00,0x00,0x1F,0xFC,0x0B,0x4 0,0x7F,0xC0,0x00,0x00,0x7F,0x1F,0xF0,0x1F,0xC3,0xE0,0x00,0x00,0xFF,0xFF,0x0B,0x4 1,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xF0,0x1F,0xF7,0xF0,0x00,0x01,0xFF,0xFF,0xC0,0x0 F,0xFF,0xF0,0x00,0x01,0xFF,0xFF,0xF8,0x3F,0xFF,0xFC,0x00,0x03,0xFF,0xFF,0xF8,0x7 F,0xFF,0xF8,0x00,0x03,0xFE,0x7F,0xFE,0xFF,0xFF,0xFE,0x00,0x07,0xFC,0xFF,0xFF,0xF F,0xFF,0xFC,0x00,0x07,0xFC,0x1F,0xFF,0xFF,0xF8,0xFE,0x00,0x0F,0xF8,0x3F,0xFF,0xF0x00,0x0F,0xF8,0x07,0xFF,0xFF,0xE0,0xFF,0x00,0x1F,0xF0,0x0F,0xFF,0xF F,0xC0,0xFE,0x00,0x0F,0xF8,0x00,0xFF,0xFF,0x00,0x7F,0x80,0x1F,0xF0,0x01,0xFF,0xF E,0x00,0xFF,0x00,0x1F,0xF0,0x00,0x02,0x00,0x00,0x7F,0x80,0x3F,0xE0,0x00,0x00,0x0 0,0x00,0x7F,0x00,0x1F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x3F,0xE0,0x00,0x00,0x0 0,0x00,0x7F,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x0 0,0x00,0x7F,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x1F,0xE0,0x7F,0xC0,0x00,0x00,0x0 0,0x00,0x3F,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x1F,0xE0,0x7F,0xC0,0x00,0x00,0x0 0,0x00,0x3F,0x00,0x7F,0xE0,0x01,0xC0,0xE0,0x00,0x1F,0xE0,0xFF,0xC0,0x00,0x70,0xE 0,0x00,0x3F,0x00,0x7F,0xE0,0x03,0xF3,0xF0,0x00,0x1F,0xE0,0xFF,0xC0,0x00,0xF9,0xF 0,0x00,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF 8,0x00,0x3F,0x00,0x7F,0xE0,0x07,0xFF,0xF8,0x00,0x1F,0xE0,0xFF,0xC0,0x01,0xFF,0xF 8,0x00,0x3F,0x00,0x7C,0xE0,0x07,0xFF,0xF8,0x00,0x1B,0xE0,0xF9,0xC0,0x01,0xFF,0xF 8,0x00,0x37,0x00,0x38,0xF0,0x03,0xFF,0xF0,0x00,0x39,0xE0,0xF1,0xE0,0x00,0xFF,0xF 0,0x00,0x73,0x00,0x30,0x70,0x01,0xFF,0xE0,0x00,0x30,0xC0,0x60,0xE0,0x00,0x7F,0xE 0,0x00,0x61,0x00,0x00,0x78,0x00,0xFF,0xC0,0x00,0x30,0x00,0x00,0xF0,0x00,0x3F,0xC 0,0x00,0x60,0x00,0x00,0x38,0x00,0x7F,0x80,0x00,0x60,0x00,0x00,0x70,0x00,0x1F,0x8 0,0x00,0xC0,0x00,0x00,0x1C,0x00,0x3F,0x00,0x00,0xC0,0x00,0x00,0x38,0x00,0x0F,0x0 0,0x01,0x80,0x00,0x00,0x0E,0x00,0x1E,0x00,0x00,0x80,0x00,0x00,0x1C,0x00,0x06,0x0 0,0x01,0x00,0x00,0x00,0x07,0x00,0x0C,0x00,0x01,0x80,0x00,0x00,0x0E,0x00,0x06,0x0 0,0x03,0x00,};三、文本(汉字,字符)输入1、文本显示RAM(DDRAM)文本显示RAM提供8个×4行的汉字空间,当写入文本显示RAM时,可以分别显示CGROM、HCGROM 与CGRAM的字型;根据汉字显示坐标可以很容易地显示汉字以及其它字符~四、图象输入1、绘图RAM(GDRAM)绘图显示RAM提供128×8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会对水平地址(X地址)自动加一,当水平地址为0XFH时会重新设为00H;不会对垂直地址做进位自动加1.。

相关文档
最新文档