word 12864LCD液晶显示原理与使用方法
液晶简介
液晶是一种在一定温度X围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为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
1 / 10
word 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
2 / 10
word #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) { ;
}
3 / 10
相关推荐: