12864LCD液晶显示原理及使用方法.docx
- 文档编号:1710503
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:12
- 大小:315.70KB
12864LCD液晶显示原理及使用方法.docx
《12864LCD液晶显示原理及使用方法.docx》由会员分享,可在线阅读,更多相关《12864LCD液晶显示原理及使用方法.docx(12页珍藏版)》请在冰豆网上搜索。
12864LCD液晶显示原理及使用方法
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/LR/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
6ENH/L R/W=“L”,E 信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
7DB0 H/L数据线
8DB1 H/L数据线
9DB2H/L 数据线
10DB3H/L 数据线
11DB4H/L数据线
12DB5H/L数据线
13DB6H/L数据线
14DB7 H/L数据线
15CS1 H/LH:
选择芯片(右半屏)信号
16CS2H/LH:
选择芯片(左半屏)信号
17RETH/L复位信号,低电平复位
18VEE -10VLCD驱动负电压
19LED+ -LED背光板电源
20LED-- LED 背光板电源
12864LCD点阵图形液晶模块应用连接电路
液晶驱动设置
在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:
仿真环境下和实物开发板编程。
仿真驱动定义如下:
#define uint8 unsignedchar
#define uint32unsignedint
#defineLCD_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_NUM1//数据端口P1
#defineCS1_PIN23 //片选1低电平有效,控制左半屏
#defineCS2_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//使能端
ucharDIN[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);
}
voidRead_busy()//读忙函数——数据位的最高位D7为1则忙
{
P0=0X00;
DI=0;
RW= 1;
EN=1
while(P0& 0x80)
{
;
}
EN= 0;
}
void write_LCD_command(uint8value)//写命令函数
{
Read_busy();//每次读写都要忙判断
DI=0;//选择命令
RW=0; //读操作
LCD_databus=value;
EN=1; //EN由1—0锁存有效数据
_nop_();
_nop_();
EN=0;
}
voidwrite_LCD_data(uint8value) //写数据函数
{
Read_busy();
DI=1;//选择数据
RW= 0;
LCD_databus= value;
EN= 1;//EN由1—0锁存有效数据
_nop_();
_nop_();
EN=0;
}
voidSet_page(uint8 page) //设置显示起始页
{
page=0xB8|page; //页的首地址为0xB8
wite_LCD_command(page);
}
void Set_line(uint8startline) //设置显示的起始行
{
startline =0xC0|startline;
write_LCD_command(startline);
}
voidSet_column(uint8 column)//设置显示的列
{
column=column&0x3F; //列的最大值为64
column =column| 0x40;//列的首地址为0x40
write_LCD_command(column);
}
voidSetOnOff(uint8 onoff) //显示开关函数;0x3E是关显示,0x3F是开显示
{
onoff = 0x3E| onoff;
write_LCD_command(onoff);
}
void SelectScreen(uint8screen)//选择屏幕
{
switch(screen)
{
case0:
CS1=0;CS2=0;break;//全屏
case1:
CS1 =0;CS2 =1;break;//左半屏
case 2:
CS1=1;CS2 = 0;break;//右半屏
default:
break;
}
}
void ClearScreen(uint8screen) //清屏
{
uint8i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
Set_page(i);
Set_column(0);
for(j=0;j<64;j++)
{
write_LCD_data(0x00); //写入0,地址指针自动加1
}
}
}
void InitLCD()//LCD初始化
{
Read_busy();
SelectScreen(0);
SetOnOff(0);//关显示
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
ClearScreen(0);
Set_line(0);
}
连接开发板实物的底层应用程序:
voidLCD_Check_Busy(void)
{
unsignedint value=0,rvalue = 0;
GPIO_SetDir(DATA_PORT_NUM,0x31F80000L,0);
GPIO_ClearValue(LCD_PORT_NUM,(1 <<DI_PIN));
GPIO_SetValue(LCD_PORT_NUM,(1<< RW_PIN));
GPIO_SetValue(LCD_PORT_NUM, (1<<EN_PIN));
while
(1)
{
value=GPIO_ReadValue(DATA_PORT_NUM);//获取值为32位P2.0到P2.31
/*数据位最高位D7为1内部忙,为0空闲;对应接线为P2.22*/
rvalue=value&0x400000;
if(0x0==rvalue)
{
break;
}
}
GPIO_ClearValue(LCD_PORT_NUM,(1<<EN_PIN));
GPIO_SetDir(DATA_PORT_NUM,0x31F80000L,1);
data_setpin(0);
}
其他的函数按照上面的进行设置,其中函数GPIO_SetValue将对应的位置1,;函数GPIO_ClearValue将对应的位置0;函数GPIO_ReadValue获取对应端口的数据,函数GPIO_SetDir设置相应端口的相应位的方向——输入输出。
字库原理及其制作
在前面我们分析了如何点亮一个或者多个点阵,通过有意识的点亮一些点阵可以在液晶屏上看到数字、字母和汉字的显示。
那么一个字母或者汉字对应着那些位置的点阵呢,是否可以通过计算得到其字模数据?
现在可以在网上下载到各种字模软件,对单个的字符取模,也可以对ASCII码、汉字库取模生成字库bin文件。
在取模之前要对其进行相应的设置,以便能够正确的显示(当取模方式和液晶屏的设置不一样时会显示出乱码)。
需要注意的是横纵向取模的区别,字节正序和字节倒序的差别。
下面介绍字模的数据的获取,字节正序和倒序、横纵向取模的差别。
字模是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:
8×16的ASCII码点阵,左边的为横行取模,字节正序(即高位在前),右边的为纵向取模,字节倒序(即高位在下)。
图1 “A”字模图
而中文的“你”在字模中的记载却如图2 所示:
下面的取模方式只介绍了横向取模、字节正序。
如果要对其进行纵向取模、字节倒序,方法类似于“A”字模。
图2“你”字模图
当通过字模软件生成字库bin文件之后如何对其进行应用?
可以通过以下方法:
1.把字库放入SD卡中。
需要带SD卡,需要使用文件系统,软硬件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12864 LCD 液晶显示 原理 使用方法