当前位置:首页 >> 信息与通信 >>

LCD12864的使用及程序编写


LCD12864 原理及使用
小游之之

摘要:本报告主要对 128x64 分辨率 LCD 屏进行说明,包括其基本原理指令、基于瑞萨 H8/36049f 的编程等等。

目录
1 前言 .................................................................................................................................... 4 2 液晶屏的选择 .................................................................................................................... 4 3 硬件电路搭建 .................................................................................................................... 4 3.1 驱动芯片 74LS245 .......................................................................................................... 4 3.2LCD 硬件电路................................................................................................................... 5 4 液晶屏 12864 原理介绍 .................................................................................................... 6 4.1LCD 显示原理................................................................................................................... 6 4.2 单片机对 LCD 的数据指令发送与接收 ......................................................................... 7 4.3LCD 指令及说明 ............................................................................................................... 7 4.4 字符显示 ......................................................................................................................... 9 4.4.1 自带字符显示 .............................................................................................................. 9 4.4.2 自定义字符显示 ........................................................................................................ 10 4.4.3 图片显示 .................................................................................................................... 11 5 基于瑞萨 H8/36049f 的常用 LCD 函数编写 .................................................................. 15 6 结束语 .............................................................................................................................. 25

2

3

1 前言
本人比较菜,各种借鉴学习后,尤其感谢大海橡树的 12864 使用文章,拜谢之~~经过一 段时间的学习和实践,总结了一下下,才出此文档,希望对大家有帮助。

2 液晶屏的选择
由于想深入了解掌握 LCD 的普遍使用及编程方法,故选择了晶汉达品牌的 128x64 点阵 的 LCD 屏进行学习。 该屏网购价 68.88 元,淘宝网址为 http://item.taobao.com/item.htm?id=3737989874,为 5V 供电,共 20 引脚,且由于不同尺寸 LCD 原理大体相似,引脚也几乎相同,所以可以完美 的与实验室的 H8/36049f 开发板匹配。 而且,此 LCD 为带字库的液晶屏,所以不用自己去编写字符数组,大大简化了显示字 符的编程工作量。

3 硬件电路搭建
3.1 驱动芯片 74LS245
在硬件电路中, 利用 74LS245 驱动芯片来选择单片机与 LCD 之间的数据传输方向。 下面 简单介绍一下 74LS245 的工作方式。 74LS245 为双向总线发送/接收器,其逻辑图如下图:

4

引出端符号意义如下表: A B G DIR 使能 G L L H DIR L H X A 总线端 B 总线端 三态允许端(低电平有效) 方向控制端 功能 数据方向 B→A 数据方向 A→B 隔离

控制/G 和 DIR 两引脚电平,可实现数据传送方向的控制,功能如下表:

在开发板中,芯片的 A 端与单片机引脚相连,B 端与 LCD 引脚相连,G、DIR 分别与单 片机上两 IO 引脚相连。

3.2LCD 硬件电路
LCD 的引脚图如下:

在本次项目中依然使用并行通信,从上图可知,此 LCD 引脚功能及分布与实验室小 LCD 几乎相同。 按如下示意图接线。 由于模块内部接有上电复位电路, 因此在不需要经常复位的场合可 将 PIN17 悬空。
5

由上图可知,单片机 P54、P55 控制数据传输方向,P60~P67 用来发送指令、数据及接 收数据,P20、P23、P24 用来配合控制读写数据或指令。

4 液晶屏 12864 原理介绍
4.1LCD 显示原理
从根本上来讲,LCD 屏就相当于一定数量的小灯组成的方阵,通过控制小灯的亮灭来组 成我们想要的图案, LCD 显示字符实际就是通过 LCD 的驱动器控制点阵中每个点的亮灭。 令 本 LCD 分辨率为 128x64,即有 128x64 个点,点阵图如下:

水平方向以字节为单位,垂直方向以行为单位,且 LCD 分为上下两个半屏,各 32 行。 对于每个点,输入 0 即灭,输入 1 即亮。后文将会针对显示字符、自定义字符、图片三种类 型进行说明其显示原理。

6

4.2 单片机对 LCD 的数据指令发送与接收
单片机发送和接受数据或指令要通过控制 LCD 上 RS、RW、E 三个引脚的高低电平来实 现,具体功能如下表: RS RW E 功能 L L H H L H L H H→L H H→L H L/L→H 在进行数据传输是要注意改变 74LS245 芯片的数据传输方向。 MCU 写指令 到 IR 暂存器 读忙标志(BF)及地 址记数器(AC)状态 MPU 写入数据到 数据暂存器(DR) MPU 从数据暂存器 (DR)中读出数据 无动作

4.3LCD 指令及说明
本 LCD 有两个指令集,分别为基本指令和扩展指令,一般使用基本指令即可实现基本 的字符显示,如要显示图片及动画等复杂效果,会应用到扩展指令集。 在网上可以找到关于 12864LCD 的指令集表,拷贝一个如下: 指令表 1:(RE=0:基本指令) 指令 RS 清除显示 0 R/W 0 D7 0 D6 0 指 令 码 D5 0 D4 0 D3 0 D2 0 D1 0 D0 1 将 DDRAM 填满"20H",并且设定 DDRAM 的地址计数器(AC)到"00H" 地址归位 0 0 0 0 0 0 0 0 1 X 设定 DDRAM 的地址计数器(AC)到 "00H",并且将游标移到开头原点 位置;这个指令不改变 DDRAM 的内 容 显示状态 开/关 0 0 0 0 0 0 1 D C B D=1: 整体显示 ON C=1: 游标 ON B=1:游标位置反白允许 进入点 设定
7

功 能

0

0

0

0

0

0

0

1

I/D

S

指定在数据的读取与写入时,设定 游标的移动方向及指定显示的移

位 游标或显 示移位控 制 功能 设定 0 0 0 0 1 DL X RE X X 0 0 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位控 制位;这个指令不改变 DDRAM 的内 容 DL=0/1:4/8 位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 设定 CGRAM 自 ( 定义字 符) 地址 设定 DDRAM 自 ( 带字符) 地址 读取忙标 志和地址 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 0 0 1 0 AC5 AC4 AC3 AC2 AC1 AC0 设定 DDRAM 地址(显示位址) 第一行:80H-87H;第二行:90H -97H; 第三行: 88H-8FH; 第四行: 98H-9FH 读取忙标志(BF)可以确认内部动 作是否完成,同时可以读出地址计 数器(AC)的值 写数据到 RAM 读出 RAM 的值 指令表 2:(RE=1:扩充指令) 指 令 待命 模式 RS 0 R/W 0 D7 0 D6 0 指 令 码 D5 0 D4 0 D3 0 D2 0 D1 0 D0 1 进入待命模式,执行其他指令都 棵终止 待命模式 卷动地 0 0 0 0 0 0 0
8

0

0

0

1

AC5

AC4

AC3

AC2

AC1

AC0

设定 CGRAM 地址

1

0

数据

将数据 D7——D0 写入到内部的 RAM (DDRAM/CGRAM/IRAM/GRAM)

1

1

数据

从内部 RAM 读取数据 D7——D0 (DDRAM/CGRAM/IRAM/GRAM)

功 能

0

1

SR

SR=1:允许输入垂直卷动地址

址开关 开启 反白 选择 0 0 0 0 0 0 0 1 R1 R0

SR=0: 允许输入 IRAM 和 CGRAM 地 址 选择 2 行中的任一行作反白显 示,并可决定反白与否。初始值 R1R0=00,第一次设定为反白显 示,再次设定变回正常

睡眠 模式 扩充 功能 设定

0

0

0

0

0

0

1

SL

X

X

SL=0:进入睡眠模式 SL=1:脱离睡眠模式

0

0

0

0

1

CL

X

RE

G

0

CL=0/1:4/8 位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 G=1/0:绘图开关

设定绘 图 RAM 地址

0

0

1

0 AC6

0 AC5

0 AC4

AC3 AC3

AC2 AC2

AC1 AC1

AC0 AC0

设定绘图 RAM 先设定垂直(列)地址 AC6AC5…AC0 再设定水平(行)地址 AC3AC2AC1AC0 将以上 16 位地址连续写入即可

备注:当 IC1 在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取 BF 标 时,BF 需为零,方可接受新的指令;如果在送出一个指令前并不检查 BF 标志,那么在前一个指 令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。

4.4 字符显示
4.4.1 自带字符显示
由于本 LCD 自带字库,每个汉字为两个字节。在屏上最多可显示 8x4 个汉字,每个汉字 为 16x16 点阵。 汉字显示的坐标如下:

9

可通过输入指令来确定字符显示位置,之后地址计数器自动加 1。

4.4.2 自定义字符显示
CGRAM 自定义显示字符对应地址与编码如下表: 地址 编码 0x40 0x0000 0x50 0x0002 0x60 0x0004 0x70 0x0006

当然,自定义字符也是分配 16x16 点阵,LCD 只支持自定义 4 个字符。在将自定义字符 的数组传送到 LCD 的 CGRAM 前,要先发送自定义字符储存位置指令。将会在应用函数一章 中看到。 首先,每个自定义字符数组里有 32 字节的量,以 16 进制表示,从第一个字节算起,每 两个可看成一组,两字节共 16 位,每位的值就表示一行中 16 个点的亮灭。明白此道理,我 们就可以自己创造想要的字符数组了,当然由于 LCD 的显示规则比较统一,现在可以在网 上找到专门的字符取模工具。 本人从网上下载了一个简单的程序, 正适合于 16x16 点阵的自 定义字符取模,当然也支持不同字体汉字的取模,很好用,会在提交本报告是一并附上。 该工具为一个 exe 文件,图标如图 ,打开后界面如下:

我们将模式设定为 C51, 便于直接使用产生的数组, 下面自定义一个字符, 然后点击 “提 取字模” ,就可得到该字符的 32 字节数组,如图:

10

上图下方的数组即得到的字符数组,可直接复制使用。可以验证一下,确是每两个字节 表示一行点的亮灭。

4.4.3 图片显示
要显示图片,就需要用到扩展指令,见上面指令表,指令 0x36 即可。图片的显示原理 与自定义字符相似,但也有不同。 首先要将 LCD 分为上下两屏,各 32 行,一个满屏的图片数组共 16x64 字节,每 16 个字 节的每一位表示一行各点的亮灭。 在发送图片数据前,要发送显示位置指令,设好初始地址后,地址计数器就会自动加 1 了。每个半屏发送前都要设定显示位置。

当然, 在网上也可找到图片取模的软件, 本人也找到了一款, 名称为 “字模提取 V2.1” , 该软件可自己在软件中绘图,也可导入图片,不过图片格式必须为.bmp 或.ico,且分辨率要 设置成 128x64,单色格式。 软件界面如下图:

11

首先要进行参数设置,如图:

取模方式为 C51,如图:

12

然后,我们可以新建图片,如图:

可得到如下界面,并可用鼠标点击作图:

13

由于比较难点,所以,建议先用画图等软件画图,保存为 bmp、单色、128x64 格式后 导入,再取模。 现有一合格图片如图:

点击打开图标,将其导入,如图:

在取模方式中点击 C51 取模,即可得到数组,如图:
14

5 基于瑞萨 H8/36049f 的常用 LCD 函数编写
结合前面的 LCD 指令集、 工作模式、 显示原理, LCD LCD 下面编写一些常用的 LCD 函数, 利用这些函数可完成一般的图像、字符显示。 /****************************************************************************** * LCD12864 基础知识 1. RSR/W 功能说明 L L MPU 写指令到指令暂存器(IR) L H 读出忙标志(BF)及地址记数器(AC)的状态 HL MPU 写入数据到数据暂存器(DR) H H MPU 从数据暂存器(DR)中读出数据 2. E 状态 执行动作 高-->低 I/O 缓冲-->DR 高 DR-->I/O 缓冲 低/低-->高 无动作 结果 配合/W 进行写数据或指令 配合 R 进行读数据或指令

3. 字符显示对应地址,一个汉字占两个字节 80H 81H 82H 83H 84H 85H 86H 87H
15

90H 91H 92H 93H 94H 95H 96H 97H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH 4. 自定义图形函数:CGRAM 自定义显示字符对应地址与编码 地址 :0x40 0x50 0x60 0x70 编码: 0x0000 0x0002 0x0004 0x0006 先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址) 垂直地址范围 AC5...AC0(64) 水平地址范围 AC3…AC0(16(8)) 绘图 RAM 的地址计数器(AC)只会对水平地址(X 轴)自动加一,当水平地址=0FH 时 会重新设为 00H 但并不会对垂直地址做进位自动加一, 故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。 5. 带中文字库的 128X64-0402B 每屏可显示 4 行 8 列共 32 个 16×16 点阵的汉字, 每个显示 RAM 可显示 1 个中文字符或 2 个 16×8 点阵全高 ASCII 码字符,即每屏最多可实现 32 个中文字符或 64 个 ASCII 码字符的显示。带中文字库的 128X64-0402B 内部提供 128×2 字节的字符显示 RAM 缓冲区 (DDRAM) 。 字符显示是通过将字符显示编码写入该字符显示 RAM 实现的。根据写入内容的不同,可分 别在 液晶屏上显示 CGROM(中文字库) 、HCGROM(ASCII 码字库)及 CGRAM(自定义字形)的 内容。 三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是 0000、0002、0004、 0006 共 4 个) 显示自定义字型;02H~7FH 显示半宽 ASCII 码字符;A1A0H~F7FFH 显示 8192 种 GB2312 中 文字库字形。 6.指令表(见文档) ******************************************************************************* / #include "io36049f.h" #include "intrinsics.h" /****************************************************************************** * 基础定义 ******************************************************************************* / //端口 6 的 P60--P67 和 LCD 的 DB0--DB7 连接, 端口 2 的 P24,P23 和 P20 连接 LCD 的 E,RS,R/W; #define E IO.PDR2.BIT.B4
16

#define RS IO.PDR2.BIT.B0 #define RW IO.PDR2.BIT.B3 /****************************************************************************** / /****************************************************************************** * 基础函数 ******************************************************************************* / /*************************************** 1.微秒级延时 ***************************************/ void delayus(unsigned int us) { unsigned int i,j; for(i=0;i<us;i++) { for(j=0;j<1;j++); } } /**************************************/ /****************************************************************************** * 并行模式 ******************************************************************************* / /************************************** 1.寄存器初始设定 说明:本函数放在主函数最前面 ***************************************/ void register_init(void) { IO.PCR2=0xff;//RS,RW,E 控制引脚设定为输出 IO.PCR5=0xff; IO.PDR5.BYTE=0xef;//设定 74LS245 驱动芯片输出方向为单片机->LCD IO.PCR6=0xff;//8 位传输口引脚方向为输出 } /************************************** 2.LCD 忙检测 说明:本函数等到 LCD 不忙才退出 ***************************************/
17

void LCD_busy(void) { IO.PCR6=0x00; IO.PDR5.BYTE=0xcf; RS=0; RW=1; E=1; while(IO.PDR6.BIT.B7==1){;} E=0; IO.PCR6=0xff; IO.PDR5.BYTE=0xef; } /************************************** 3.写数据 说明:无 ***************************************/ void write_LCD_data(unsigned char data) { LCD_busy(); RS=1; RW=0; E=1; IO.PDR6.BYTE=data; delayus(100); E=0; } /************************************** 3.字符数据起始地址选择 说明:本函数(x,y)从 0 开始计 ***************************************/ void display_place(unsigned int x,unsigned int y) { LCD_busy(); RS=1; RW=0; E=1; switch(x) { case 0: write_LCD_data(8*16+y); break; case 1: write_LCD_data(9*16+y); break;
18

case 2: write_LCD_data(8*16+y+8); break; case 3: write_LCD_data(9*16+y+8); break; } E=0; }

/************************************** 5.写命令 说明:无 ***************************************/ void write_LCD_cmd(unsigned char cmd) { LCD_busy(); RS=0; RW=0; E=1; IO.PDR6.BYTE=cmd; delayus(100); E=0; }

/************************************** 7.LCD 初始化 说明:无 ***************************************/ void LCD_unit(void) { delayus(4000); write_LCD_cmd(0x30);//功能设定:8 位数据,基本指令操作 delayus(100); write_LCD_cmd(0x30); delayus(37); write_LCD_cmd(0x0c);//整体显示,游标关,不泛白 delayus(100); write_LCD_cmd(0x01);//清屏指令 delayus(10000); write_LCD_cmd(0x06);//进入点设定,地址指针加 1
19

} /************************************** 8.自定义字符发送函数 说明:无 ***************************************/ void CGRAM(void) { unsigned char table1[32]={0x07,0xC0,0x1F,0xE0,0x38,0x70,0x10,0x70,0x00,0x60,0x00, 0xC0,0x01,0x80,0x07,0x00,0x0E,0x00,0x1E,0x00,0x1E,0x1C,0x3F,0xF8,0x3F,0xF0,0x00, 0x00,0x00,0x00,0x00,0x00};//向这四个数组填入要显示的自定义 //字符的字模提取 16 进制数 Unsigned char table2[32]={0x70,0x07,0x38,0x0E,0x1C,0x1C,0x0F,0xF8,0x07,0xF0,0x03,0xE0,0x01,0xC0,0x01,0xC 0, 0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0xE0,0x07,0xF0}; unsigned char table3[32]={0x00,0x00,0x10,0x04,0x28,0x0A,0x44,0x11,0x92,0x24,0x38,0x0E,0x10,0x04,0x00,0x 00, 0x00,0x00,0x20,0x04,0x10,0x08,0x08,0x10,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char table4[32]={0x0C,0x30,0xCC,0x33,0x20,0x04,0x17,0xE8,0xC8,0x13,0xD3,0xCB,0x14,0x28,0x15,0x A8, 0x15,0xA8,0xD4,0x2B,0xD3,0xCB,0x08,0x10,0x17,0xE8,0x20,0x04,0xCC,0x33,0x0C,0x30}; unsigned int i; write_LCD_cmd(0x30); write_LCD_cmd(0x40);//设定 CGRAM 字符位置,应该是存储位置? for(i=0;i<16;i++)//两个字节连在一起,表示 16x16 的第一行点的亮灭 { write_LCD_data(table1[i*2]); write_LCD_data(table1[i*2+1]); } write_LCD_cmd(0x50); for(i=0;i<16;i++) { write_LCD_data(table2[i*2]); write_LCD_data(table2[i*2+1]); } write_LCD_cmd(0x60); for(i=0;i<16;i++) { write_LCD_data(table3[i*2]); write_LCD_data(table3[i*2+1]);
20

} write_LCD_cmd(0x70); for(i=0;i<16;i++) { write_LCD_data(table4[i*2]); write_LCD_data(table4[i*2+1]); } } /*********************************** 设定自定义字符的显示位置并显示 ***********************************/ void CGRAM_display(unsigned char a,unsigned char b,unsigned char c,unsigned char d) { write_LCD_cmd(a); write_LCD_data(0x00); write_LCD_data(0x00); write_LCD_cmd(b); write_LCD_data(0x00); write_LCD_data(0x02); write_LCD_cmd(c); write_LCD_data(0x00); write_LCD_data(0x04); write_LCD_cmd(d); write_LCD_data(0x00); write_LCD_data(0x06); } /*********************************** 显示图片初始化 ***********************************/ void PIC_init(void) { write_LCD_cmd(0x36);// 数据 8 位,扩从指令,绘图打开 delayus(50); write_LCD_cmd(0x36); delayus(30); write_LCD_cmd(0x3E); // 数据 8 位,扩从指令,绘图打开 delayus(50); write_LCD_cmd(0x01); delayus(50); }

/************************************************************ 显示图片函数
21

说明:要先设定垂直地址在设定水平地址(连续写入两个字节资料, 来完成垂直和水平地址的设定) 0x80-0x87:显示上半部分 0x88-0x8f:显示下半部分 只需设定显示的第一个位置,指针会自动加 1 *************************************************************/ unsigned char //此为上文中的示例图片 picture[]={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,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0C,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x0C,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x0C,0x00,0xC1,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0xC0,0x0C,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0x0C,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x0C,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xF8,0x00,0x62,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x60,0x00,0x7F,0x88,0x00,0x61,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x60,0x0F,0x80,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0x00,0x0C,0x00,0x18,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0x00,0x06,0x07,0xB0,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0x00,0x02,0x78,0x20,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x00,0x03,0x00,0x20,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x00,0xE0,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x7F,0xC0,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x0F,0xFF,0x00,0x3F,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xBF,0x00,0x00,0xFC,0x01,0x80,0x3F,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xBF,0x00,0x9F,0x00,0x00,0xC0,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0xE0,0x00,0x00,0xC0,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x18,0x00,0x80,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x1F,0xFF,0x00,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x1F,0xE1,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x21,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x23,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
22

0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x36,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x1C,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x18,0x00,0x00,0x60,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0x38,0x00,0x00,0x60,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x20,0xC0,0x00,0xC6,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x07,0x83,0xC0,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x10,0x00,0x0C,0x00,0x60,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x30,0x00,0x00,0x60,0x20,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x40,0x30,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x03,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; unsigned char *address=&picture[0]; void PIC_display(unsigned char *address) { unsigned char i,j; for(i=0;i<32;i++)//先显示上半屏,一共 32 行,8x16 列,每次发过去 1 字节 { write_LCD_cmd(0x80+i);//垂直地址 write_LCD_cmd(0x80);//水平地址 for(j=0;j<16;j++) { write_LCD_data(*address); address++; } } for(i=0;i<32;i++)//先显示下半屏,一共 32 行,8x16 列,每次发过去 1 字节 {
23

write_LCD_cmd(0xa0+i); write_LCD_cmd(0x88); for(j=0;j<16;j++) { write_LCD_data(*address); address++; } } }

/************************************************ 测试函数,显示字符 ************************************************/ void main() { unsigned char show[]="小游之小游之之"; unsigned int i; register_init(); LCD_unit(); while(1) { display_place(0,0); //write_LCD_cmd(0x80); for(i=0;i<14;i++) { write_LCD_data(show[i]); delayus(8000); } //write_LCD_cmd(0x01); delayus(100); //write_LCD_cmd(0x03); delayus(1000); } }

24

6 结束语
虽然这份文档中的内容比较基础,但也希望能对大家有一定帮助。

25



相关文章:
LCD12864程序文档
LCD12864程序文档 - 基于STM32的12864驱动程序,可以实现字符、数字、图片、任意直线和任意点的显示,并且有程序详解,很任性
LCD12864液晶显示器C51单片机子程序
LCD12864液晶显示器C51单片机子程序_电子/电路_工程科技_专业资料。此程序LCD12864液晶显示器C51单片机子程序,只需在主函数中灵活调用即可,经多次测试准确无误。 ...
LCD12864菜单程序
LCD12864菜单程序_能源/化工_工程科技_专业资料。菜单程序(包含完整程序) 一起来...家电中央控制系统工程 程序名: 显示 MCU 总体程序 编写人: 杜洋 初写时间: 200...
LCD12864液晶中文说明书
LCD 在线液晶显示器技术手册 J12864 中文/JGD12864 中文/FY12864ZW 代码 (02H---7FH) 六、显示 RAM 1、文本显示 RAM(DDRAM) 1、文本显示 RAM(DDRAM) 文本...
12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编...
12864液晶经典驱动程序,一看就懂,有详细的注释(C语言编写,不看后悔)_信息与通信_工程科技_专业资料。非常适合初学者入门和程序猿们收藏 ...
51单片机 12864液晶显示程序
/*===LCD12864 液晶并行驱动程 序=== 程序名称:12864 液晶驱动程序(并行模式) === ===*/ #include <at89x52.h> #define uchar unsigned...
lcd12864显示程序
/*** 名称:LCD12864_ST7920 并行测试程序 并行方式连接;晶振 11.0592M 编写:JiangX.net ***/ #include <reg52.h> #include <ziku.h> #include <intrins...
教会你简单应用LCD12864
教会你简单应用LCD12864 - 其实看了本版的 1602 教程以后很容易就可以掌握 12864 了。 刚才看到有网友要 12864 教程,俺就把博客里以前练习的一 个程序弄过来,...
LCD12864显示程序(成功版)
LCD12864显示程序(成功版)_电子/电路_工程科技_专业资料。12864程序 下载即用 #include<reg51.h> #include<intrins.h> #define uint unsigned int #define ...
12864液晶例子程序(C语言)
12864液晶例子程序(C语言)_信息与通信_工程科技_专业资料。这是一个有关12864的示例程序,里面采用的是并行模式,用户可根据自己的兴趣爱好加以修改,很实用。 ...
更多相关标签: