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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.把字库放入代码中一起编译,后下载到单片机中。对单片机的FLASH要求比较大,而且代码编写调式速度比较慢。
3.购买字库IC。不够灵活。
4.把字库放入FLASHIC中。这种方法比较灵活,可以设置各种字体风格。
下面详细介绍将字库放入FLASHIC中的步骤。
在写入字库到FLASH IC之前,先擦除原FLASHIC中的内容,此时可以根据字库文件大小计算所需檫除扇区大小,待擦除完毕之后,开始写入bin文件,写入时采用USB传输到FLASHIC中去。首先设置好USB相应的驱动、初始化工作,调用写数据函数。之后download程序到单片机中,待程序运行起来之后,通过USB数据线连接FLASHIC,打开HIDDriver程序,选择bin文件,设置传输速度,开始传输。
19LED+-LED背光板电源
20LED--LED背光板电源
12864LCD点阵图形液晶模块应用连接电路
液晶驱动设置
在理解12864LCD硬件原理和管脚功能之后,可以针对LCD进行驱动的编写,分两种情况:仿真环境下和实物开发板编程。
仿真驱动定义如下:
#defineuint8unsigned char
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;
字库原理及其制作
在前面我们分析了如何点亮一个或者多个点阵,通过有意识的点亮一些点阵可以在液晶屏上看到数字、字母和汉字的显示。那么一个字母或者汉字对应着那些位置的点阵呢,是否可以通过计算得到其字模数据?
现在可以在网上下载到各种字模软件,对单个的字符取模,也可以对ASCII码、汉字库取模生成字库bin文件。在取模之前要对其进行相应的设置,以便能够正确的显示(当取模方式和液晶屏的设置不一样时会显示出乱码)。需要注意的是横纵向取模的区别,字节正序和字节倒序的差别。
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();
图1 “A”字模图
而中文的“你”在字模中的记载却如图2所示:下面的取模方式只介绍了横向取模、字节正序。如果要对其进行纵向取模、字节倒序,方法类似于“A”字模。
图2“你”字模图
当通过字模软件生成字库bin文件之后如何对其进行应用?
可以通过以下方法:
1.把字库放入SD卡中。需要带SD卡,需要使用文件系统,软硬件成本较高。
机内码、区位码
对于英文、数字等字符的显示,由于其种类较少,只需要一个字节表示即可,ASCII码的低128专供其使用,当计算机读取字符时,其存储的8为二进制大小为其ASCII码值,同时称为字符的内码,那么其字符的字模首地址在字库中存储位置为内码乘以16。首地址开始的16个字节数据为该字符的字模数据。
一个汉字由2个字节组成,那么其在计算机中是如何存在?
下面介绍字模的数据的获取,字节正序和倒序、横纵向取模的差别。
字模是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:8×16的ASCII码点阵,左边的为横行取模,字节正序(即高位在前),右边的为纵向取模,字节倒序(即高位在下)。
12864LCD液晶显示原理及使用方法
液晶简介
液晶是一种在一定温度范围内呈现既不同于固态液态又不同于气态的特殊物质态,它既具有各向异性的晶体所特有的双折射性又具有液体的流动性液晶显示器件(英文的简写为LCD)就是利用液晶态物质的液晶分子排列状态在电场中改变而调制外界光的被动型显示器件。
点阵式图形液晶显示屏是LCD的一种能够动态显示图形汉字以及各种符号信息为各种电子产品提供了友好的人机界面点阵式图形液晶显示屏的主要特点如下(这些特点也就是LCD的特点):工作电压低、微功耗、体积小、可视面积大、无电磁辐射、数字接口、寿命长等特点。
12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。可完成图形显示,也可以显示8×4个(16×16点阵)汉字或者显示16×4个(8×16点阵)ASCII码。分为两种,带字库的和不带字库的。不带字库的LCD需要自己提供字库字模,此时可以根据个人喜好设置各种字体显示风格,设计上较为灵活。带字库的LCD提供字库字模,但是只能显示GB2312的宋体。各有优缺点,根据不同应用场景灵活选择。其液晶模块原理图如下所示。
_nop_();
_nop_();
EN=0;
}
void Set_page(uint8page)//设置显示起始页
{
page =0xB8 |page;//页的首地址为0xB8
wite_LCD_command(page);
}
voidSet_line(uint8startline)//设置显示的起始行

startline =0xC0 |startline;
{
case0:CS1 = 0;CS2=0;break;//全屏
case 1:CS1=0;CS2 =1;break; //左半屏
case 2: CS1= 1;CS2 = 0; break;//右半屏
default: break;
}

voidClearScreen(uint8screen)//清屏
{
uint8i,j;
计算机中只能识别01二进制编码,而国家标准信息交换用汉字字符集GB2312-80共收录了汉字、图形符号等共7445个,其中汉字6763个,按照汉字使用的频度分为两级,其中一级汉字3755个,二级汉字3008个。由于英文字符较少加上其他字符也不到128个,采用ASCII码的低128个表示足够,而ASCII码的高128个却很少用,因此可以采用两个高128ASCII码组合表示一个汉字。
8DB1 H/L数据线
9DB2H/L数据线
10DB3H/L数据线
11DB4H/L数据线
12DB5 H/L数据线
13DB6H/L数据线
14DB7H/L数据线
15CS1H/L H:选择芯片(右半屏)信号
16CS2 H/L H:选择芯片(左半屏)信号
17RETH/L复位信号,低电平复位
18VEE-10VLCD驱动负电压
EN =1;//EN由1—0锁存有效数据
_nop_();
_nop_();
EN =0;

void write_LCD_data(uint8 value)//写数据函数
{
Read_busy();
DI = 1;//选择数据
RW =0;
LCD_databus = value;
EN =1;//EN由1—0锁存有效数据
write_LCD_command(startline);
}
void Set_column(uint8column) //设置显示的列
{
column= column&0x3F;//列的最大值为64
column =column |0x40;//列的首地址为0x40
write_LCD_command(coluห้องสมุดไป่ตู้n);
SelectScreen(0);
SetOnOff(0); //关显示
SelectScreen(0);
SetOnOff(1);//开显示
SelectScreen(0);
ClearScreen(0);
Set_line(0);
}
连接开发板实物的底层应用程序:
voidLCD_Check_Busy(void)
sbitCS2=P2^3;//片选1低电平有效,控制右半屏
实物开发板驱动接线和定义如下
#defineLCD_PORT_NUM0//LCD端口P0
#defineDATA_PORT_NUM 1//数据端口P1
#defineCS1_PIN23//片选1低电平有效,控制左半屏
#defineCS2_PIN24//片选1低电平有效,控制右半屏
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设置相应端口的相应位的方向——输入输出。
汉字在计算机中是采用机内码的形式进行存储的,每一个汉字占2个字节,其中第一个字节为机内码的区码,汉字、各种图形符号机内码的区码范围是从0A1H(十六进制)开始,对应区位码中区码的第一区;而机内码的第二个字节为机内码的位码,范围也是从0A1H(十六进制)开始,对应某区中的第一个位码。就是说将汉字机内码减去0A0AH就得到该汉字的区位码。例如汉字“北”的机内码是十六进制的“B1B1”,其中前两位“B1”表示机内码的区码,后两位“B1”表示机内码的位码。所以“北”的区位码为0B1B1H-0A0A0H=1111H,将区码和位码分别转换为十进制,得汉字“北”的区位码为“1717”。即“北”的点阵位于第17区的第17个字的位置,在文件HZK16中的位置为第32×[(17-1)×94+(17-1)]=48640D以后的32个字节为“北”的显示点阵。用RF-1800编程器读入二进制文件hzk16j.bin后利用其编辑功能中的缓冲区编辑查找到BE00H(48640D是十进制,将其转变为十六进制后得BE00 H)开始的32个字节:048004800488 04 9804 A07CC004 8004800480 04 8004 8004 801C82E482 447E 0000(以上全为十六进制),将其写在16×16点阵方格纸上。
#define RST_PIN21//复位信号低电平有效
#defineRW_PIN20 //RW为1写;0读
#defineDI_PIN19 //DI为0写指令或读状态;1数据
#defineEN_PIN22//使能端
uchar DIN[8]={24, 23, 20, 21, 28,29, 19,22};
12864LCD点阵图形液晶模块原理框图
下面给出了其应用连接电路,分别介绍其各引脚的功能和作用。
如下表所示:12864LCD的引脚说明
管脚号管脚名称LEVER管脚功能描述
1GND0电源地
2VCC+5.0V电源电压
3VLCD-液晶显示器驱动电压
4RS(D/I) H/LD/I=“H”,表示DB7∽DB0为显示数据
读状态指令时,数据位最高位D7为1内部忙,为0空闲;对应接线为P2.22;
通过GPIO_ReadValue获取P2端口的32位数据P2.0到P2.31,然后进行相应的与或操作进行判断。
仿真环境下的驱动程序编写:
voiddelay(uint8 i) //延时函数
{
while(--i);
}
void Read_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;
#defineuint32unsigned int
#defineLCD_databus P0 //LCD8位数据口
sbitDI=P2^2;//DI为0写指令或读状态;1数据
sbitRW =P2^1; //RW为1写;0读
sbitEN =P2^0;//使能端
sbitCS1 = P2^4;//片选1低电平有效,控制左半屏
//8位数据线的接线方式P2.24,P2.23,…P2.22对于D0,D1,…D7,低位到高位
涉及到的一些控制指令:
0x3E关显示,0x3F开显示;
总共有八页,一页占八行点阵点,页的首地址为0xB8;
行的起始地址为0xC0,有规律的改变起始行号可以实现滚屏的效果;
列的起始地址为0x40一直到0x7F共64列;
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
7DB0H/L数据线
}
voidSetOnOff(uint8 onoff) //显示开关函数;0x3E是关显示,0x3F是开显示
{
onoff = 0x3E |onoff;
write_LCD_command(onoff);
}
voidSelectScreen(uint8screen)//选择屏幕
{
switch(screen)

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));
相关文档
最新文档