《LCD液晶显示原理及使用方法》由会员分享,可在线阅读,更多相关《LCD液晶显示原理及使用方法(10页珍藏版)》请在金锄头文库上搜索。
1、12864LCD 液晶显示原理及使用方法液晶显示原理及使用方法液晶简介液晶简介液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊 物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶 显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场 中改变而调制外界光的被动型显示器件。 点阵式图形液晶显示屏是 LCD 的一种能够动态显示图形汉字以及各种符号 信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点 如下(这些特点也就是LCD 的特点):工作电压低、微功耗、体积小、可视面积 大、无电磁辐射、数字接口、寿命长等特点。 12864LC
2、D是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及 12864 全点阵液晶显示器组成。可完成图形显示,也可以显示84 个(1616 点阵)汉字或者显示164个(816 点阵)ASCII码。分为两种,带字库的和不带字 库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各 种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显 示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理 图如下所示。12864LCD点阵图形液晶模块原理框图 下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。 如下表所示:12864LCD 的引脚说明 管脚
3、号管脚名称 LEVER 管脚功能描述 1GND 0 电源地 2VCC+5.0V 电源电压 3VLCD - 液晶显示器驱动电压 4RS (D/I) H/LD/I=“H”,表示 DB7DB0 为显示数据 D/I=“L”,表示 DB7DB0 为显示指令数据 5R/W H/L R/W=“H”,E=“H”数据被读到 DB7DB0 R/W=“L”,E=“HL”数据被写到 IR 或 DR6EN H/L R/W=“L”,E 信号下降沿锁存 DB7DB0 R/W=“H”,E=“H”DDRAM 数据读到 DB7DB0 7DB0 H/L 数据线 8DB1 H/L 数据线 9DB2 H/L 数据线 10DB3 H/L
4、 数据线 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 u
5、int8 unsigned char#define uint32 unsigned int #define LCD_databus P0 /LCD8 位数据口 sbitDI = P22; /DI 为 0 写指令或读状态;1 数据 sbit RW = P21; /RW 为 1 写;0 读 sbit EN = P20; /使能端 sbit CS1 = P24; /片选 1 低电平有效,控制左半屏 sbit CS2 = P23; /片选 1 低电平有效,控制右半屏实物开发板驱动接线和定义如下 #define LCD_PORT_NUM 0 /LCD 端口 P0 #define DATA_PORT_NU
6、M 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 DIN8 = 24, 23, 20, 21, 28, 29, 19, 22; /8 位数据线的接线方式 P2.24, P2.23,P2.22 对于 D0,D1,D7,
7、低位到高位涉及到的一些控制指令: 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
8、则忙 P0 = 0X00; DI = 0; RW = 1; EN = 1 while(P0 EN = 0; void write_LCD_command(uint8 value) /写命令函数 Read_busy(); /每次读写都要忙判断 DI = 0; /选择命令 RW = 0; /读操作 LCD_databus = value; EN = 1; /EN 由 10 锁存有效数据 _nop_(); _nop_(); EN = 0; void write_LCD_data(uint8 value) /写数据函数 Read_busy(); DI = 1; /选择数据 RW = 0; LCD_da
9、tabus = value; EN = 1; /EN 由 10 锁存有效数据 _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) /设置显示的列 colum
10、n = column /列的最大值为 64 column = column | 0x40; /列的首地址为 0x40write_LCD_command(column); void SetOnOff(uint8 onoff) /显示开关函数;0x3E 是关显示,0x3F 是开显示 onoff = 0x3E | onoff; write_LCD_command(onoff); void SelectScreen(uint8 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(uint8 screen) /清屏 uint8i, j; SelectScreen(screen); for(i=0;i3 应该写成 i*3+(j3),因为“”的优先级小于“+” ,通过对其 修改,可以在液晶屏上输入正确的结果。