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∽DB0R/W=“L”,E=“H→L”数据被写到IR或DR6ENH/LR/W=“L”,E信号下降沿锁存DB7∽DB0R/W=“H”,E=“H”DDRAM数据读到DB7∽DB07DB0H/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=1while(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;//页的首地址为0xB8wite_LCD_command(page);}voidSet_line(uint8startline)//设置显示的起始行{startline=0xC0|startline;write_LCD_command(startline);}voidSet_column(uint8column)//设置显示的列{column=column&0x3F;//列的最大值为64column=column|0x40;//列的首地址为0x40write_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;i8;i++){Set_page(i);Set_column(0);for(j=0;j64;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,(1DI_PIN));GPIO_SetValue(LCD_PORT_NUM,(1RW_PIN));GPIO_SetValue(LCD_PORT_NUM,(1EN_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,(1EN_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卡,需要使用文件系统,软硬件成本较高。2.把字库放入代码中一起编译,后下载到单片机中。对单片机的FLASH要求比较大,而且代码编写调式速度比较慢。3.购买字库IC。不够灵活。4.把字库放入FLASHIC中。这种方法比较灵活,可以设置各种字体风格。下面详细介绍将字库放入FLASHIC中的步骤。在写入字库到FLASHIC之前,先擦除原FLASHIC中的内容,此时可以根据字库文件大小计算所需檫除扇区大小,待擦除完毕之后,开始写入bin文件,写入时采用USB传输到FLASHIC中去。首先设置好USB相应的驱动、初始化工作,调用写数据函数。之后download程序到单片机中,待程序运行起来之后,通过USB数据线连接FLASHIC,打开HIDDriver程序,选择bin文件,设置传输速度,开始传输。机内码、区位码对于英文、数字等字符的显示,由于其种类较少,只需要一个字节表示即可,ASCII码的低128专供其使用,当计算机读取字符时,其存储的8为二进制大小为其ASCII码值,同时称为字符的内码,那么其字符的字模首地址在字库中存储位置为内码乘以16。首地址开始的16个字节数据为该字符的字模数据。一个汉字由2个字节组成,那么其在计算机中是如何存在?计算机中只能识别01二进制编码,而国家标准信息交换用汉字字符集GB2312-80共收录了汉字、图形符号等共7445个,其中汉字6763个,按照汉字使用的频度分为两级,其中一级汉字3755个,二级汉字3008个。由于英文字符较少加上其他字符也不到128个,采用ASCII码的低128个表示足够,而ASCII码的高128个却很少用,因此可以采用两个高128ASCII码组合表示一个汉字。汉字在计算机中是采用机内码的形式进行存储的,每一个汉字占2个字节,其中第一个字节为机内码的区码,汉字、各种图形符号机内码的区码范围是从0A1H(十六进制)开始,对应区位码中区码的第一区;而机内码的第二个字节

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功