12864LCD液晶显示原理及使用方法.docx

上传人:b****3 文档编号:2284735 上传时间:2022-10-28 格式:DOCX 页数:12 大小:218.99KB
下载 相关 举报
12864LCD液晶显示原理及使用方法.docx_第1页
第1页 / 共12页
12864LCD液晶显示原理及使用方法.docx_第2页
第2页 / 共12页
12864LCD液晶显示原理及使用方法.docx_第3页
第3页 / 共12页
12864LCD液晶显示原理及使用方法.docx_第4页
第4页 / 共12页
12864LCD液晶显示原理及使用方法.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

12864LCD液晶显示原理及使用方法.docx

《12864LCD液晶显示原理及使用方法.docx》由会员分享,可在线阅读,更多相关《12864LCD液晶显示原理及使用方法.docx(12页珍藏版)》请在冰豆网上搜索。

12864LCD液晶显示原理及使用方法.docx

12864LCD液晶显示原理及使用方法

12864LCD液晶显示原理及使用方法

液晶简介

液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。

点阵式图形液晶显示屏是LCD的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD的特点):

工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。

12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。

可完成图形显示,也可以显示8×4个(16×16点阵)汉字或者显示16×4个(8×16点阵)ASCII码。

分为两种,带字库的和不带字库的。

不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。

带字库的LCD提供字库字模,但是只能显示GB2312的宋体。

各有优缺点,根据不同应用场景灵活选择。

其液晶模块原理图如下所示。

12864LCD点阵图形液晶模块原理框图

下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。

如下表所示:

12864LCD的引脚说明

管脚号管脚名称LEVER管脚功能描述

1GND0电源地

2VCC+5.0V电源电压

3VLCD-液晶显示器驱动电压

4RS(D/I)H/LD/I=“H”,表示DB7∽DB0为显示数据

D/I=“L”,表示DB7∽DB0为显示指令数据

5R/WH/LR/W=“H”,E=“H”数据被读到DB7∽DB0

R/W=“L”,E=“H→L”数据被写到IR或DR

6ENH/LR/W=“L”,E信号下降沿锁存DB7∽DB0

R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0

7DB0H/L数据线

8DB1H/L数据线

9DB2H/L数据线

10DB3H/L数据线

11DB4H/L数据线

12DB5H/L数据线

13DB6H/L数据线

14DB7H/L数据线

15CS1H/LH:

选择芯片(右半屏)信号

16CS2H/LH:

选择芯片(左半屏)信号

17RETH/L复位信号,低电平复位

18VEE-10VLCD驱动负电压

19LED+-LED背光板电源

20LED--LED背光板电源

12864LCD点阵图形液晶模块应用连接电路

液晶驱动设置

在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:

仿真环境下和实物开发板编程。

仿真驱动定义如下:

#defineuint8unsignedchar

#defineuint32unsignedint

#defineLCD_databusP0//LCD8位数据口

sbitDI=P2^2;//DI为0写指令或读状态;1数据

sbitRW=P2^1;//RW为1写;0读

sbitEN=P2^0;//使能端

sbitCS1=P2^4;//片选1低电平有效,控制左半屏

sbitCS2=P2^3;//片选1低电平有效,控制右半屏

实物开发板驱动接线和定义如下

#defineLCD_PORT_NUM0//LCD端口P0

#defineDATA_PORT_NUM1//数据端口P1

#defineCS1_PIN23//片选1低电平有效,控制左半屏

#defineCS2_PIN24//片选1低电平有效,控制右半屏

#defineRST_PIN21//复位信号低电平有效

#defineRW_PIN20//RW为1写;0读

#defineDI_PIN19//DI为0写指令或读状态;1数据

#defineEN_PIN22//使能端

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,然后进行相应的与或操作进行判断。

仿真环境下的驱动程序编写:

voiddelay(uint8i)//延时函数

{

while(--i);

}

voidRead_busy()//读忙函数——数据位的最高位D7为1则忙

{

P0=0X00;

DI=0;

RW=1;

EN=1

while(P0&0x80)

{

;

}

EN=0;

}

voidwrite_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(uint8page)//设置显示起始页

{

page=0xB8|page;//页的首地址为0xB8

wite_LCD_command(page);

}

voidSet_line(uint8startline)//设置显示的起始行

{

startline=0xC0|startline;

write_LCD_command(startline);

}

voidSet_column(uint8column)//设置显示的列

{

column=column&0x3F;//列的最大值为64

column=column|0x40;//列的首地址为0x40

write_LCD_command(column);

}

voidSetOnOff(uint8onoff)//显示开关函数;0x3E是关显示,0x3F是开显示

{

onoff=0x3E|onoff;

write_LCD_command(onoff);

}

voidSelectScreen(uint8screen)//选择屏幕

{

switch(screen)

{

case0:

CS1=0;CS2=0;break;//全屏

case1:

CS1=0;CS2=1;break;//左半屏

case2:

CS1=1;CS2=0;break;//右半屏

default:

break;

}

}

voidClearScreen(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

}

}

}

 

voidInitLCD()//LCD初始化

{

Read_busy();

SelectScreen(0);

SetOnOff(0);//关显示

SelectScreen(0);

SetOnOff

(1);//开显示

SelectScreen(0);

ClearScreen(0);

Set_line(0);

}

连接开发板实物的底层应用程序:

voidLCD_Check_Busy(void)

{

unsignedintvalue=0,rvalue=0;

GPIO_SetDir(DATA_PORT_NUM,0x31F80000L,0);

GPIO_ClearValue(LCD_PORT_NUM,(1<

GPIO_SetValue(LCD_PORT_NUM,(1<

GPIO_SetValue(LCD_PORT_NUM,(1<

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<

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卡,需要使用文件系统,软硬件成本较高。

2.把字库放入代码中一起编译,后下载到单片机中。

对单片机的FLASH要求比较大,而且代码编写调式速度比较慢。

3.购买字库IC。

不够灵活。

4.把字库放入FLASHIC中。

这种方法比较灵活

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1