}
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高速图片下载更新,图形功能