• 沒有找到結果。

2. 2 液晶显示器模块的连接与编程

}

return(0);

}

2. 2 液晶显示器模块的连接与编程

2. 2. 1 FYD12864 0402B汉字图形点阵液晶显示模块简介

FYD12864 0402B是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有 国家一级、二级简体中文字库的点阵图形液晶显示模块;其分辨率为128×64,内置8192个 16×16点汉字,和128个16×8点 ASCII字符集。LCD 显示类型为 STN、半透和正显,显示 内容128列×64行,显示颜色为黄绿,电源电压范围为 3.0~5.5V(内置升压电路,无需负 压),配置侧部高亮白色 LED 背光,功耗仅为普通 LED 的1/5~1/10。外观尺寸为93mm×

70mm×12.5mm,视域尺寸为73mm×39mm。

FYD12864 0402B液晶显示器模块的引脚功能如表2 3所列,其与控制器之间的通信 有并行和串行两种连接方法。

北京航空航天大学出版社

37 2 3 FYD12864 0402B液晶显示器模块的引脚功能

引脚号

7~14 DB0~DB7 并行数据0~数据7

15 PSB /串行 接 口 选 择:H—并 行;L—

《FYD12864 0402B液晶显示器模块数据手册》。

2. 2. 2 LPC2148最小系统开发板与FYD12864 0402B的连接

LPC2148最小系统开发板与 FYD12864 0402B的串行接口电路如图2 6所示,其连接 方式如表2 4所列。在 LPC2148最小系统开发板上液晶接口使用的是插槽连接,故在需要 使用液晶时,只需将液晶的插针插进插槽里即可。

2 6 LPC2148最小系统开发板 FYD12864 0402B的接口电路

2 4 LPC2148最小系统开发板与 FYD12864 0402B的连接方式 FYD12864 0402B液晶

显示器的串行接口 LPC2148最小系统开发板

VDD +5V

GND GND

RET P1.31

E(CLK) P0.4

R/W(SID) P0.6

RS(CS) P0.10

北京航空航天大学出版社

38

2. 2. 3 FYD12864 0402B汉字图形点阵液晶显示模块编程示例

启动ADS1.2,使用 ARM ExecutableImageforlpc2148工程模板创建一个工程。程序 流程图如图2 7所示。

2 7 LPC2148最小系统开发板驱动液晶模块程序流程图

本示例程序利用LPC2148最小系统开发板的输出控制 FYD12864 0402B显示。本示例 程序相关代码和注释如程序清单2.3所示。

程序清单2.3 液晶显示编程示例所示

/****************************************************************

* 文件名:LCD12864_test.C

* 功能:LPC2148串行模式控制LCD12864软件包

****************************************************************/

#include"config.h"

#define RS 1≪10 //P0.10

#define SID 1≪6 //P0.6

#define E 1≪4 //P0.4

#define PSB 1≪2 //P0.2,并行或串行,选择低电平串行模式

#define RST 1≪31 //P1.31,复位脚

#define LEDAK 1≪29 //P1.29,背光控制 unsignedchar pic1[]=

{

/*-- 调入了一幅图像 --*/

北京航空航天大学出版社

39

unsignedchar IC_DAT1[64]= "LPC2148控制LCD12864串行模式的示例程序";

unsignedchar IC_DAT2[64]= "可显示汉字、数字、点阵图片等";

void TransferCom(unsignedchardata0);

void TransferData(unsignedchardata1);

void delayms(unsignedintn);

void DisplayGraphic(unsignedchar *adder);

void delay(unsignedintm);

void lcd_mesg(unsignedchar *adder1);

/****************************************************************

* 名称:delayms()

* 功能:延时(10×n)ms程序。

* 入口参数:n 延时n×10ms

* 出口参数:无

****************************************************************/

void delayms(unsignedintn) {

unsignedinti,j;

for(i=0;i<n;i++)

for(j=0;j<2000;j++);

}

voiddelay(unsignedintm) // 延时程序 {

unsignedinti,j;

for(i=0;i<m;i++) for(j=0;j<50;j++);

}

北京航空航天大学出版社

40

/****************************************************************

* 名称:initinal()

* 功能:LCD12864字库初始化

* 入口参数:无

* 出口参数:无

****************************************************************/

voidinitinal(void) {

TransferCom(0x30); //8BIT设置,RE=0,G=0,图片显示关

delay(100); // 大于100μs的延时程序

TransferCom(0x0C); //D=1,显示开

delay(100); // 大于100μs的延时程序

TransferCom(0x01); // 清屏

delay(10); // 大于10ms的延时程序

TransferCom(0x06); // 模式设置,光标从右向左加1位移动

delay(100); // 大于100μs的延时程序

}

/****************************************************************

* 名称:initina2()

* 功能:图片初始化,LCD显示图片(扩展)初始化程序

* 入口参数:无

* 出口参数:无

****************************************************************/

void initina2(void) {

41

IO1SET=RST; // 复位置高

delay(10);

TransferCom(0x36); //RE=1

delay(100); // 大于100μs的延时程序

TransferCom(0x36); //RE=1

delay(37); // 大于37μs的延时程序

TransferCom(0x3E); //DL=8BITS,RE=1,G=1

delay(100); // 大于100μs的延时程序

TransferCom(0x01);

delay(100); // 大于100μs的延时程序

}

/****************************************************************

* 名称:lcd_mesg()

* 功能:在LCD12864上显示汉字

* 入口参数:*adder1 显示的数据

* 出口参数:无

****************************************************************/

void lcd_mesg(unsignedchar *adder1) {

unsignedchari;

TransferCom(0x80); // 设置显示地址 delay(100);

for(i=0;i<32;i++) {

TransferData(*adder1);

adder1++;

}

TransferCom(0x90); // 设置显示地址 delay(100);

for(i=16;i<64;i++) {

TransferData(*adder1);

adder1++; }

}

/****************************************************************

* 名称:SendByte()

* 功能:发送1字节数据

北京航空航天大学出版社

42

* 入口参数:Dbyte 发送的数据

* 出口参数:无

****************************************************************/

void SendByte(unsignedcharDbyte) {

unsignedchari;

for(i=0;i<8;i++) {

IO0CLR=E;

if((Dbyte&0x80)==0X80) IO0SET=SID;

else

IO0CLR=SID;

Dbyte=Dbyte≪1; // 左移一位 IO0SET=E;

IO0CLR=E; }

}

/****************************************************************

* 名称:TransferCom()

* 功能:向LCD12864发送命令

* 入口参数:data0 要发送的命令

* 出口参数:无

****************************************************************/

void TransferCom(unsignedchardata0) {

IO0SET=RS;

SendByte(0xf8); //11111,RW(0),RS(1),0 SendByte(0xf0&data0); // 高4位

SendByte(0xf0&data0≪4); // 低4位 IO0CLR=RS;

}

/****************************************************************

* 名称:TransferData()

* 功能:向LCD12864发送数据

* 入口参数:data1 要发送的数据

* 出口参数:无

****************************************************************/

void TransferData(unsignedchardata1)

北京航空航天大学出版社

43 {

IO0SET=RS;

SendByte(0xfa); //11111,RW(0),RS(1),0 SendByte(0xf0&data1); // 高4位

SendByte(0xf0&data1≪4); // 低4位 IO0CLR=RS;

}

/****************************************************************

* 名称:DisplayGraphic()

* 功能:在LCD12864上显示图片

* 入口参数:*adder 要显示的图片数据

* 出口参数:无

****************************************************************/

voidDisplayGraphic(unsignedchar *adder) {

inti,j;

/* 显示上半屏内容设置 */

for(i=0;i<32;i++) {

TransferCom((0x80 + i)); // 垂直地址 TransferCom(0x80); // 水平地址 for(j=0;j<16;j++)

{

TransferData(*adder);

adder++;

} }

/* 显示下半屏内容设置 */

for(i=0;i<32;i++) {

TransferCom((0x80 + i)); // 垂直地址 TransferCom(0x88); // 水平地址 for(j=0;j<16;j++)

{

TransferData(*adder);

adder++;

} } }

北京航空航天大学出版社

44

/****************************************************************

* 名称:LCD12864_init()

* 功能:LCD12864端口初始化函数

* 入口参数:无

* 出口参数:无

****************************************************************/

voidLCD12864_init(void) {

IO0DIR|= (E|SID|RS); // 设置为输出 IO0CLR = (E|SID|RS);

IO1DIR|= RST;

IO1CLR = RST; // 复位

delay(1); // 延时

IO1SET = RST; // 复位置高

IO1DIR|= LEDAK;

IO1SET = LEDAK; // 点亮LCD背光灯 }

/****************************************************************

* 名称:LCD_BackLight_ON()

* 功能:液晶背光灯开

* 入口参数:无

* 出口参数:无

****************************************************************/

voidLCD_BackLight_ON(void) {

IO1SET = LEDAK; // 点亮LCD背光灯 }

/****************************************************************

* 名称:LCD_BackLight_OFF()

* 功能:液晶背光灯关

* 入口参数:无

* 出口参数:无

****************************************************************/

voidLCD_BackLight_OFF(void) {

IO1CLR = LEDAK; // 关闭LCD背光灯 }

北京航空航天大学出版社

45 /****************************************************************

* 名称:main()

* 功能:LCD12864汉字和图片显示程序主函数

****************************************************************/

intmain(void) {

PINSEL0 = 0; PINSEL1 = 0;

PINSEL2&= ~(0x00000006); // 设置所有I/O口为普通GPIO口 LCD12864_init(); // 液晶端口初始化

while(1) {

initinal();

lcd_mesg(IC_DAT1); // 显示汉字界面1 delayms(1000);

initinal();

lcd_mesg(IC_DAT2); // 显示汉字界面2 delayms(1000);

initina2();

DisplayGraphic(pic1); // 显示图片1 delayms(1000);

}

触摸屏模块(HMI)选择北京迪文科技有限公司生产的 DMT32240S035_01WT,其分辨率 为320×240,工作温度范围为-20~+70℃;工作电压范围为5~28V,功耗为1W;12V 时, 背光最亮和背光熄灭时的工作电流分别为90mA 和50mA。该模块共有33MB字库空间,可 存放60个字库,支持多语言、多字体、字体大小可变的文本显示,还支持用户自行设计字库;

96MB的图片存储空间,最多可存储384幅全屏图片,支持 USB高速图片下载更新,图形功能

北京航空航天大学出版社

相關文件