12864LCD液晶显示原理及使用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12864LCD液晶显示原理及使用方法
液晶简介
液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是LCD 的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64 全点阵液晶显示器组成。可完成图形显示,也可以显示8×4 个(16×16 点阵)汉字或者显示16×4个(8×16 点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
12864LCD点阵图形液晶模块原理框图
下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD 的引脚说明
管脚号管脚名称LEVER 管脚功能描述
1GND 0 电源地
2VCC+5.0V 电源电压
3VLCD - 液晶显示器驱动电压
4RS (D/I) H/LD/I=“H”,表示DB7∽DB0 为显示数据
D/I=“L”,表示DB7∽DB0 为显示指令数据5R/W H/L R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR 或DR
6EN H/L R/W=“L”,E 信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM 数据读到DB7∽DB0 7DB0 H/L 数据线
8DB1 H/L数据线
9DB2 H/L 数据线
10DB3 H/L 数据线
11DB4 H/L数据线
12DB5 H/L数据线
13DB6 H/L数据线
14DB7 H/L数据线
15CS1 H/L H:选择芯片(右半屏)信号
16CS2 H/L H:选择芯片(左半屏)信号
17RET H/L复位信号,低电平复位
18VEE -10VLCD 驱动负电压
19LED+ - LED 背光板电源
20LED- - LED 背光板电源
12864LCD点阵图形液晶模块应用连接电路
液晶驱动设置
在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
仿真驱动定义如下:
#define uint8 unsigned char
#define uint32 unsigned int
#define LCD_databus P0 //LCD8位数据口
sbitDI = P2^2; //DI为0写指令或读状态;1数据
sbit RW = P2^1; //RW为1写;0读
sbit EN = P2^0; //使能端
sbit CS1 = P2^4; //片选1低电平有效,控制左半屏
sbit CS2 = P2^3; //片选1低电平有效,控制右半屏
实物开发板驱动接线和定义如下
#define LCD_PORT_NUM 0 //LCD端口P0
#define DATA_PORT_NUM 1 //数据端口P1
#define CS1_PIN 23 //片选1低电平有效,控制左半屏
#define CS2_PIN 24 //片选1低电平有效,控制右半屏
#define RST_PIN 21 //复位信号低电平有效
#define RW_PIN 20 //RW为1写;0读
#define DI_PIN 19 //DI为0写指令或读状态;1数据
#define EN_PIN 22 //使能端
uchar DIN[8] = {24, 23, 20, 21, 28, 29, 19, 22};
//8位数据线的接线方式P2.24, P2.23,…P2.22对于D0,D1,…D7,低位到高位
涉及到的一些控制指令:
0x3E关显示,0x3F开显示;
总共有八页,一页占八行点阵点,页的首地址为0xB8;
行的起始地址为0xC0,有规律的改变起始行号可以实现滚屏的效果;
列的起始地址为0x40一直到0x7F共64列;
读状态指令时,数据位最高位D7为1内部忙,为0空闲;对应接线为P2.22;
通过GPIO_ReadValue获取P2端口的32位数据P2.0到P2.31,然后进行相应的与或操作进行判断。
仿真环境下的驱动程序编写:
void delay(uint8 i) //延时函数
{
while(--i);
}
void Read_busy() //读忙函数——数据位的最高位D7为1则忙
{
P0 = 0X00;
DI = 0;
RW = 1;
EN = 1
while(P0 & 0x80)
{
;
}
EN = 0;
}
void write_LCD_command(uint8 value) //写命令函数{
Read_busy(); //每次读写都要忙判断
DI = 0; //选择命令
RW = 0; //读操作
LCD_databus = value;
EN = 1; //EN由1—0锁存有效数据
_nop_();
_nop_();
EN = 0;
}
void write_LCD_data(uint8 value) //写数据函数{
Read_busy();
DI = 1; //选择数据
RW = 0;
LCD_databus = value;
EN = 1; //EN由1—0锁存有效数据
_nop_();
_nop_();
EN = 0;
}
void Set_page(uint8 page) //设置显示起始页
{
page = 0xB8 | page; //页的首地址为0xB8
wite_LCD_command(page);
}
void Set_line(uint8 startline) //设置显示的起始行{
startline = 0xC0 |startline;
write_LCD_command(startline);
}
void Set_column(uint8 column) //设置显示的列{
column = column & 0x3F; //列的最大值为64 column = column | 0x40; //列的首地址为0x40