液晶显示控制电路KS0713的初始化编程技巧

2003年05月31日
自带控制器的点阵式液晶图形显示模块是目前很受欢迎的一类产品,在数字化仪表、便携式仪表、公交IC卡系统终端,以及智能化家电和嵌入式应用系统中得到了广泛的应用。此类显示模块的核心就是其内部自带的专用控制器,KS0713即是这类显示控制器,该控制器常用于监控和测量中控制提示菜单﹑波形或是各类参数变化的显示。KS0713控制芯片具有体积小、可直接由微处理器控制、高灵活性的特点,并自带液晶所必需的电源驱动。

液晶显示模块开发的基本步骤

1. 根据开发系统的要求完成单片机与液晶显示模块的接口,通常的接口有总线模式和I/O模式两种。需要注意液晶显示模块对负电压的要求,如果负电压值不符合要求,则会造成液晶屏显示不正常,或降低显示对比度。

2.图1. ADC倒转列地址和显示列地址之间的对应关系示意图。 根据控制器的时序图和寄存器的命令表格,通过编写程序向显存的指定地址送一个字节,比如0xFF,只要液晶上显示一条实线线段。如果可以正常启动并有数据显示,则表明液晶模块的初始化已经完成。

3. 仔细研究显存的排列方式/数据的传输方式是纵向还是横向,字节内的位顺序是左高右低,还是左低右高,1、0与黑点和白点的对应关系,显存地址的排列顺序,是自动递增还是需要另外设置等。在清楚这些问题后,设计工程师就可以按照设计需要在点阵型液晶模块上进行文字或图形的显示。

控制芯片KS0713的初始化

KS0713初始化的基本步骤和其它同类控制芯片的初始化相似。值得开发人员特别注意的是,KS0713内部的ADC和SHL寄存器定义了数据逐行和逐列显示的顺序,其关系顺序如表1所示。

采用KS0713控制芯片的初始化C程序代码如下:
void Init_LCD(void) //定义初始化函数
{
P6OUT &=~RESET; //复位位置零
Delay(500);
P6OUT |= RESET; //复位位置位
Delay(5);
P6OUT &=~CS; //片选位置零
Send_Command(0xE2); //复位指令
Send_Command(0xA1); //ADC指令(ADC=1)数据传输SEG132~SEG1,
液晶屏幕显示SEG1~SEG132
Send_Command(0xC0); //SHL指令(SHL=0)传输,显示COM1~COM64
Send_Command(0xA3); //设定LCD占空比为1/9
Send_Command(0x2F); //设定电源控制
Send_Command(0x26); //调节寄存器选择
Send_Command(0x81); //设定参考电压模式
Send_Command(0x1C); //设定参考电压寄存器
Send_Command(0x40); //设定显示行(COM1)
Send_Command(0xAF); //等待显示开始
}

显示数据的起始位置图2. KS0713字模提取示意图。

由于KS0713的地址空间是65×132的,实际在控制LCD时由于只用到64×128的地址空间,就存在着起始地址的问题。KS0713内部规定了65行构成了9页,其中前8页由8列构成(DB0~DB7),第9页是单独的一行(只有DB0),因此数据并行传输过去之后始终是从DB0(第一行开始显示)。而列地址则不同,内部地址对应的方式不同则会导致起始数据列地址的不同。如果,LCD的第0列地址和KS0713的第0列地址相对应,则相应的起始列地址为0x00;如果,LCD的第0列地址和KS0713的第1列地址相对应,则相应的起始列地址为0x01;……以此类推。因此在使用以KS0713为控制器的液晶显示时对此问题要特别注意。

字模点阵数据的提取和传输

KS0713的逐行和逐列显示顺序可以根据用户的不同要求在初始化时加以设置。KS0713控制芯片向LCD送数据的方式与通常习惯的横向数据传输方式不同,而是采用竖向数据传输方式,与前面初始化的实例相对应的显示顺序为:对于64行128列的LCD,先送第1列的第0行到第7行的数据,第2列的第0行到第7行的数据,…直到第128列的第0行到第7行的数据;再送第1列的第8行到第15行的数据,第2列的第8行到第15行的数据,……;最终第128列,第56行到第63行的数据。ADC选择指令可以倒转列地址和显示列地址之间的对应关系,如图1所示,这时要求送数据格式为:先送第1列的第7行到第0行的数据,第2列的第7行到第0行的数据…,直到第128列的第63行到第56行的数据。

由此对于字模的提取,KS0713也就有不同的要求:为了能够在LCD上显示出图2a的图形,必须先将图2a横向左右调换得到图2b,再将图2b沿纵向上下调换得到图2c。最终传输以图2c所提取的字模数据,才可以得到图2a的显示。

利用字模数据提取工具提取图中的字模数据,并按上述要求进行上下调换,其输出显示的C代码如下:

{ unsigned char seg_0[ ]={ 0x00,0x04,0x04,0x06,0x04,0x08,0x88,0x50,
0x20,0x50,0x88,0x04,0x04,0x02,0x02,0x02,}; // “文”字的上半部分表1. ADC,SHL与行,列显示顺序的关系表。
unsigned char seg_1[ ]={ 0x00,0x10,0x10,0x10,0x10,0x1E,0x11,0x10,
0x70,0x90,0x11,0x1E,0x10,0x10,0x10,0x10,}; // “文”字的下半部分
Send_Command(0xB0) ; // 第0行起始
Send_Command(0x04) ; // 第0列起始
for(i=0;i<16;i++)
{ Send_Data(seg_0[i]); }
Send_Command(0xB1) ; // 第1行起始
Send_Command(0x04) ; // 第0列起始
for(i=0;i<16;i++)
{ Send_Data(seg_1[i]); }
}
系统在执行上面的代码后在液晶屏的左上角显示如图所示的字符。在实际开发过程中,开发人员可以使用“字模3增强版”字模提取软件提取相关的字符数据。

作者: 李文炜、肖善福、黎亚龙
中南大学信息科学与工程学院

原文地址:https://www.cnblogs.com/huqingyu/p/113868.html