LCD12864液晶的使用

上传人:ali****an 文档编号:119070798 上传时间:2020-01-04 格式:PDF 页数:23 大小:8.49MB
返回 下载 相关 举报
LCD12864液晶的使用_第1页
第1页 / 共23页
LCD12864液晶的使用_第2页
第2页 / 共23页
LCD12864液晶的使用_第3页
第3页 / 共23页
LCD12864液晶的使用_第4页
第4页 / 共23页
LCD12864液晶的使用_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《LCD12864液晶的使用》由会员分享,可在线阅读,更多相关《LCD12864液晶的使用(23页珍藏版)》请在金锄头文库上搜索。

1、大海橡树百度空间 1 LCD12864LCD12864 液晶的使用液晶的使用 大海橡树原创 LCD12864 分为两种,带字库和不带字库的,个人比较喜欢不带字库的,因为显示汉字 的时候可以选择自己喜欢的字体,而带字库的液晶,只能显示 GB2312 的宋体,当然了, 也 可以显示其他的字体,不过不是液晶本身字库中带的了,而是用图片的形式显示。本讲由于 内容较多,故分两篇进行讲解,本人水平有限,难免有错误之处,还望大家批评改正! 无字库型 LCD12864 首先介绍下不带字库的 LCD12864,现就以 Proteus 中的 LCD12864 为例进行讲解, Proteus 中 AMPIRE128

2、*64,如下图所示,该液晶驱动器为 KS0108,我在网上搜了好就都没 找到它的 datasheet,不过我们可以找到类似的芯片的手册,它的控制逻辑和 HD61202 是类 似的,我们可以网上下载它的 datasheet 进行参考。 引脚功能: CS1 1 CS2 2 GND 3 VCC 4 V0 5 RS 6 R/W 7 E 8 DB0 9 DB1 10 DB2 11 DB3 12 DB4 13 DB5 14 DB6 15 DB7 16 RST 17 -Vout 18 LCD1 AMPIRE128X64 大 海 橡 树 大海橡树百度空间 2 与带字库液晶不同,此块液晶中含有两个液晶驱动器,一

3、块驱动器控制 64*64 个点, 左 右显示,这就是为什么 AMPIRE128*64 引脚有 CS1 和 CS2 的原因。学习液晶主要看的它的 指令系统,再次先说明一下“页”的概念,此液晶有 8 页,一页有 8 行。68/8=8;如下图所 示。 再介绍一下其他的几个重要指令: 指令一、行设置命令 RWRSDB7DB6DB5DB4DB3DB2DB1DB0 0011XXXXXX 由此可见其显示的其实行为 0 xC0,有规律的改变起始行号,可以实现滚屏的效果 指令二、页(page)设置指令 RWRSDB7DB6DB5DB4DB3DB2DB1DB0 0010111XXX 起始页为 0 xB8 显示的

4、RAM 共 64 行,分为 8 页,每页有 8 行,刚才在上面已经讲过。 指令三、列(Y address)地址设置指令 RWRSDB7DB6DB5DB4DB3DB2DB1DB0 0001XXXXXX 第一列为 0 x40 一直到 0 x7F 共 64 列,因为此液晶有 128 列,所以有两块驱动芯片驱动。 指令四、读状态指令 RWRSDB7DB6DB5DB4DB3DB2DB1DB0 10Busy0ON/OFFRESET0000 Busy:为 1 内部忙,不能对液晶进行操作。0-工作正常。 ON/OFF:1-显示关闭;0-显示打开 RESET:1-复位状态;0-正常。 说明在 Busy 和 RE

5、SET 状态时,除读状态指令外,其他任何指令均不会对驱动器产生作用。 其他的读数据和写数据和 LCD1602 是一样的,由于篇幅有限这里就不赘述了。不懂的可以 参看下液晶手册。另外要说明的就是 CS1 和 CS2 的作用(两者都是低电平有效) 大海橡树百度空间 3 CS1CS1CS1CS1 和和 CS2CS2CS2CS2 的屏幕选择说明的屏幕选择说明 CS1CS1CS1CS1CS2CS2CS2CS2选屏选屏 0 0 0 00 0 0 0全屏全屏 0 0 0 01 1 1 1左半屏左半屏 1 1 1 10 0 0 0右半屏右半屏 1 1 1 11 1 1 1不选不选 注:注:CS1CS1CS1C

6、S1 和和 CS2CS2CS2CS2 均为低电平有效均为低电平有效 一、显示汉字 由于这块液晶补带字库我们就要自己编写字库,编写字库的软件还是 Zimo21,LCD1602 显示自定义字符的时候用的也是它。 不过在取模之前我们要进行一些设定, 根据此液晶显示 显示的原理,设置如下:(若不是这样,取模的数据将不是我们想要的,将会出现乱码!) 在此我选择楷体小四号字体,效果如下图所示:(小四号字体大小为 16*16 大小) 大海橡树百度空间 4 下面是程序代码: /* 程序:LCD12664 液晶显示原理 内容:显示汉字 学习板:Proteus 仿真图 液晶:AMPIRE128X64(无字库) 软

7、件:keil uVision3 作者:大海橡树 整理日期:2010-12-02 * #include #include #includeZK.h/中文字库 #define uchar unsigned char #define uintunsigned int #define LCD_databus P0 /LCD8 位数据口 uchar num; sbit RS=P22;/RS 为 0 命令;1 数据 sbit RW=P21;/RW 为 1-写;0-读 sbit EN=P20;/使能端 sbit CS1=P24;/片选 1 低电平有效, 控制左半屏 sbit CS2=P23;/片选 1 低电

8、平有效, 控制右半屏 void delay(uint i) while(-i); void Read_busy()/读“忙”函数-数据 线的最高位 DB71 则 busy P0=0 x00; RS=0; RW=1; EN=1; while(P0 EN=0; void write_LCD_command(uchar value) Read_busy();/每次读写都要忙判断 RS=0;/选择命令 RW=0;/读操作 LCD_databus=value; EN=1;/EN由1-0锁存有效数据 _nop_(); _nop_(); EN=0; void write_LCD_data(uchar val

9、ue)/写数 据函数 Read_busy(); RS=1;/选择数据 RW=0; LCD_databus=value; EN=1;/EN 由 1-0 锁存有 效数据 _nop_(); _nop_(); EN=0; void Set_page(uchar page)/设置“页” LCD12864 共 8 页,一页是 8 行点阵点 page=0 xb8|page;/页的首地址为 0 xB8 write_LCD_command(page); void Set_line(uchar startline)/设置 显示的起始行 startline=0 xC0|startline;/起始 行地址为 0 xC

10、0 write_LCD_command(startline); /设置 从哪行开始:共 0-63;一般从 0 行开始显示 void Set_column(uchar column)/设置 显示的列 column=column /列的最大 值为 64 column= 0 x40|column;/列的首地 大海橡树百度空间 5 址为 0 x40 write_LCD_command(column);/列位置 void SetOnOff(uchar onoff)/显示开关 函数:0 x3E 是关显示,0 x3F 是开显示 onoff=0 x3e|onoff; /0011 111x,onoff 只能为

11、0 或者 1 write_LCD_command(onoff); void SelectScreen(uchar screen) /选屏 switch(screen) case 0: CS1=0;CS2=0;break; /全屏 case 1: CS1=0;CS2=1;break;/左半屏 case 2: CS1=1;CS2=0;break;/右半屏 default:break; void ClearScreen(uchar screen)/清屏 uchar i,j; SelectScreen(screen); for(i=0;i8;i+)/控制页数 0-7,共 8 页 Set_page(i)

12、; Set_column(0); for(j=0;j64;j+)/控制列数 0-63,共 64 列 write_LCD_data(0 x00); /写入 0,地址指针自加 1 void InitLCD()/LCD 的初始化 Read_busy(); SelectScreen(0); SetOnOff(0); /关显示 SelectScreen(0); SetOnOff(1); /开显示 SelectScreen(0); ClearScreen(0);/清屏 Set_line(0); /开始行:0 void Display(uchar ss,uchar page,uchar column,uch

13、ar *p)/显示汉字 uchar i; SelectScreen(ss); Set_page(page);/写上半页 Set_column(column); /控制列 for(i=0;i16;i+)/控制 16 列 的数据输出 write_LCD_data(pi); /汉字的 上半部分 Set_page(page+1);/写下半页 Set_column(column);/控制列 for(i=0;i16;i+)/控制 16 列的数 据输出 write_LCD_data(pi+16); /汉字的下半部分 void main() InitLCD();/初始化 ClearScreen(0);/清屏

14、Set_line(0);/显示开始行 Display(1,0,2*16,huan);/欢 Display(1,0,3*16,ying);/迎 Display(2,0,0*16,fang);/访 Display(2,0,1*16,wen);/问 Display(1,2,0*16,da);/大 Display(1,2,1*16,hai);/海 Display(1,2,2*16,xiang);/橡 Display(1,2,3*16,shu);/树 Display(2,2,0*16,bai);/百 Display(2,2,1*16,du);/度 Display(2,2,2*16,kong);/空 Di

15、splay(2,2,3*16,jian);/间 While(1); 大海橡树百度空间 6 上面说了,我们可以通过改变页的地址的变化实现 LCD 滚屏的效果,大家可以试一下, 很简单! 如果单片机容量够的话,可以做个电子书,呵呵!显示汉字部分就介绍到这里,那么 显示汉字会了,显示一张图片就简单了!接下来介绍怎样显示图片! 二、显示图片 显示图片和显示汉字的原理是一样的, 只不过是大小的问题! 现在我们就以一张 128*64 分辨率的图片进行取模。 取模图片: 现在我们主要看一下显示图片的函数: 大海橡树百度空间 7 void display_BMP(uchar a64)/显示图形的左边部分 uchar i,j; for(j=0;j8;j+) SelectScreen(1); Set_page(j); Set_column(0); for(i=0;i64;i+)/显示左屏 write_LCD_data(a2*ji);/每隔一行取一次数组中的数据 SelectScreen(2); Set_page(j); Set_column(0); for(i=0;i64;i+)/显示右屏 write_LCD_data(a2*j+1i);/每隔一行取一次数组中的数据 取出图片的数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号