彭胜敏
摘 要:文章以19264点阵液晶显示屏为例,介绍了PIC单片机与19264点阵显示屏的硬件接口电路,并给出了使用C30编写的底层驱动接口程序和部分应用层代码,所给出的接口设计方法对相关点阵屏的使用有一定的借鉴意义。
关键词:19264;单片机;接口技术
前言
单片机应用系统中,显示模块有数码管、1602、12864、19264点阵屏,这些都是最常见s的、可用于电子开发的显示屏。其中19264点阵显示屏功耗低,体积小、显示信息量大,除了能显示字母和数字外,还能显示图片,被广泛的应用于工控领域。文章以19264点阵屏为例,介绍其与PIC单片机的接口技术。对于不带字库的液晶显示屏应用有一定的借鉴作用。
1 硬件接口设计
19264液晶显示屏生产厂家比较多,但是根据通讯方法有SPI,II2C、并行口这几种方式,我们选取并行口YXD-19264显示模块为例,介绍硬件接口电路设计。YXD-19264显示模块是一种图形点阵液晶显示模块,它主要由行驱动器、列驱动器及192×64全点阵液晶显示器组成。可完成线、圆、BMP图片等图形显示,也可以显示12×4个(16×16点阵)汉字,工作温度为-10℃~+55℃,存储温度存储温度为-20℃~+66℃,工作电流约1.3mA(无背光4,无负压)4m(无背光,带负压)底背光电流小于200mA(5.6Ω限流电阻)。
YXD-19264模块接口电路简单,对外只有20个管脚。管脚定义如表1所示。
单片机选用PIC通用系列16 位MCUPIC24FJ256GB110,它有16位数据宽度,24位指令宽度,片内闪存256KB,有多达85个可编程数字I/O,工作40MIPS,工作电压+3.6V-+5V,外围资源非常丰富,非常适用于工控领域。
按照YXD-19264的管脚定义和PIC24FJ256GB110芯片资源,设计的硬件连接如下:
(1)LCD的DB0-DB78位并行数据口接RB0-RB7;(2)LCD的R/W接RB8;(3)LCD的D/I接RB9;(4)LCD的/RST接RB10;(5)LCD的E接RB11;(6)LCD的CS1,CS2分别接RB12,RB13。
2 底层驱动程序接口设计
我们采用MPLAB C30 C编译器,此编译器支持标准C语言编写程序的格式。编写好的程序可读性好,便于移植,易于维护,可靠性高。以下所有程序都是在此平台下编写。
写数据和写命令:YXD19264点阵屏模块内部有一个驱动芯片,为了这个显示屏按照我们的要求正常工作,就必须按照其数据手册要求发送命令和数据。命令可以控制显示屏开关,设置起始行,设置页地址、设置Y地址,读取状态,发送显示数据等内容。命令和数据操作时必须按照时序图严格操作。
写操作时序(图1):
图1
void Write_LCD(BYTE screen, BYTE C_0R_D, BYTE load){
LCD_Check_Busy(screen);if (C_0R_D == CMD)SET_LCD_CMD;elseSET_LCD_DATA;
SET_LCD_WRITE;SET_LCD_E;LCD_DATA_TRIS = OUTPUT_DATA;Nop();
LCD_DATA_O = load;DelayUs(4);CLEAR_LCD_E;};
读取操作时序(图2):
图2
void BYTE Read_LCD(BYTE screen){
BYTE data=0;LCD_Check_Busy(screen);SET_LCD_DATA;LCD_DATA_TRIS=1;Nop();
SET_LCD_READ;SET_LCD_E;Nop();Nop();Nop();Nop();data = LCD_DATA_I;
CLEAR_LCD_E;SET_LCD_WRITE;LCD_Check_Busy(screen);SET_LCD_DATA;
LCD_DATA_TRIS= INPUT_DATA;Nop();SET_LCD_READ;SET_LCD_E;Nop();Nop();Nop();
data=LCD_DATA_I;CLEAR_LCD_E;SET_LCD_WRITE;return data;};
3 應用程序程序设计
3.1 初始化程序
显示模块在使用前都必须按照说明书严格初始化,初始化液晶显示屏有重要的两个步骤:第一步就是复位,复位时间一定要按照数据手册的时间完成,如果复位不完全,可能造成显示有乱码或者不显示的现象。第二步就是按照数据手册以写命令的方式,按步骤把控制命令发送给液晶显示屏。完成以上两个步骤液晶显示屏就初始化完成,可以正常工作。其示例代码如下:
void LCD_Init(void){
LCD_RST = 0;DelayUs(200);LCD_RST = 1;DelayUs(200);Write_LCD(LEFT, CMD, DISPLAY_OFF); //关显示
Write_LCD(MIDDLE, CMD, DISPLAY_OFF);Write_LCD(RIGHT, CMD, DISPLAY_OFF);ClearScreen();
Set_Start_Line_L(0); Set_Start_Line_M(0); Set_Start_Line_R(0); Write_LCD(LEFT, CMD, DISPLAY_ON);
Write_LCD(MIDDLE, CMD, DISPLAY_ON); Write_LCD(RIGHT, CMD, DISPLAY_ON); }
3.2 清屏
在界面换页时,我们一般都需要清楚屏幕上的内容,19264分左、中、右三个屏组成,这三个屏幕的操作我们抽象成一个函数完成。其示例代码如下:
void ClearScreen(void){
BYTE pages = 0;BYTE i = 0;for (pages=0; pages<8; pages++){Set_Page_L(pages);Set_Page_M(pages);
Set_Page_R(pages);for (i=0; i<64; i++){Set_Col_Addr_L(i);Set_Col_Addr_M(i);Set_Col_Addr_R(i);
Write_LCD(LEFT, DATA, 0x0);Write_LCD(MIDDLE, DATA, 0x0);Write_LCD(RIGHT, DATA, 0x0);}}}
3.3 字库的取模
由于我们的屏没有带字库,我们在编写程序时,编译器只能得到了汉字的内码,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图3所示:
字母、数字、汉字的字模我们通过专业的取模软件获得,取模软件比较多,但是在使用时,必须都必须注意设置字体大小、取模方式(是横向取模、还是纵向取模),生成数据格式设定(是汇编格式,还是C格式),如果所要用的字母、汉字比较多,我们可以采用批量导入。
4 结束语
点阵液晶显示屏在工控领域有广泛的应用,文章以YXD19264点阵屏为例,给出了与PIC单片机的接口电路和底层驱动程序,并且在此基础之上编写了初始化程序、清屏程序、以及应用程序中简单取模方法,所有程序都采用C语言编写,对各类点阵显示屏的使用有一定的借鉴意义。
参考文献
[1]江世明.12864液晶显示模块与51单片机接口技术[J].电子世界,2005.
[2]段翠萍,库少平,李捷.12864液晶显示程序设计[J].电气与电子工程,2006.
[3]辛阿阿,厉善亨.基于12864液晶模块的动态波形显示实现方法[J].仪器仪表用户,2010.