AN-908: 基于HD44780的字符LCD与ADuC702x接口 (Rev. 0)

AN-908
应用笔记
One Technology Way • P.O. Box 9106 • Norwood, MA 02062-9106, U.S.A. • Tel: 781.329.4700 • Fax: 781.461.3113 • www.analog.com
基于HD44780的字符LCD与ADuC702x接口
MicroConverter ADUC702x开发系统
简介
目前市面上有各种各样的LCD显示屏,所幸的是其中许多
LCD都 符 合 HD44780U标 准 。 此 标 准 适 用 于 那 些 接 受
ADuC702x的数据并与LCD屏幕实现通信的LCD控制器芯
片。HD44780标准LCD屏幕可提供多种格式,最常用的是
16 × 2和20 × 2格式。本应用笔记说明用于控制LCD基本功
能的命令。
寄存器选择线(RS)
与HD44780 LCD接口
当此线为低电平时,数据总线上的信息被写入LCD控制
器。当此线为高电平时,可以读取LCD控制器,以便检查
LCD的状态。
此线告知LCD控制器如何处理数据字节:是将数据字节作
为命令还是作为要在屏幕上显示的文本数据。如果RS线为
高电平,则将数据字节视为要显示的文本。如果RS线为低
电平,则将数据字节视为命令。
读/写线(R/W)
用于连接HD44780和MicroConveter®的数据总线可以是8位
宽或4位宽,本应用笔记仅讨论8位数据总线。除数据总线
外,还需要3条控制线,因此LCD与MicroConverter实现接
口总共需要11个引脚。
如图1所示,8条数据线连接到MicroConverter的端口1,3
条控制线连接到端口0.5、端口0.7和端口2.0。
构成数据总线的8条数据线称为DB0、DB1至DB7。
用于定义此接口的源代码如下:
3条控制线称为EN、RS和R/W。其功能如下所述:
unsigned char Init_MC08_LCD()
使能线(EN)
{
此线指示对LCD控制器的数据字节传输是否已开始。当此
线被拉高时,指示传输开始。当传输完成时,EN线被拉
低,指示传输已完成。
GP0DAT = 0xA0000000;
// P0.5 = RS, EN = P0.7
GP1DAT = 0xFF000000;
// P1.[7:0] = DB[0:7]
GP2DAT = 0x01000000;
// P2.0 = R/W
return 0x1;
}
DB0
P1.1
DB1
P1.2
DB2
P1.3
DB3
P1.4
DB4
P1.5
DB5
P1.6
DB6
P1.7
DB7
P0.7
EN
P0.5
RS
P2.0
3.3V
R/W
VO
VDD
VSS
图 1.连接HD44780 LCD和ADuC702x
Rev. 0 | Page 1 of 8
HD44780
06695-001
ADuC702x
P1.0
AN-908
目录
简介.....................................................................................................1
设置输入模式 ...................................................................................5
与HD44780 LCD接口......................................................................1
写入文本到LCD屏幕 ......................................................................6
配置LCD屏幕 ...................................................................................3
注释和参考文献...............................................................................7
清除LCD屏幕 ...................................................................................4
Rev. 0 | Page 2 of 8
AN-908
配置LCD屏幕
要将文本显示到LCD屏幕上,首先必须配置LCD屏幕。配
置的目的是向LCD控制器明确所用的LCD屏幕类型、数据
总线格式和字体。如需查看详细列出的各种可用命令,请
参见HD44780U LCD模块的任何一份数据手册。
在下面的示例中,LCD被配置为使用8位数据总线并显示
5 × 7点字符字体。这一配置是通过使用Select_Function_Set
函数向LCD控制器发送0x38而实现的。
unsigned char Select_Function_Set(unsigned char ucFunctionSet)
{
unsigned long ulFunction = 0;
delay (10000);
RdStatus = ReadStatus();
ulFunction = ucFunctionSet;
ulFunction = (ulFunction << 16);
ulFunction |= 0xFF000000;
GP0DAT = 0xA0000000;
GP2DAT = 0x01000000;
//Clear R/W pin
GP0SET = 0x800000;
// Set E high
delay (5);
(P2.0 = R/W)
delay (5);
// Allow min 800 ns setup time
delay (5);
// allow hold time of 500 ns min
GP1DAT = ulFunction;
GP0CLR = 0x800000;
delay (5);
}
//Clear RS pin(P0.5), clear E pin (P0.7) = R/W)
// Write to register
// Set E low
return 0x1;
ReadStatus函数用于从HD44780模块读取繁忙信号输出。
Rev. 0 | Page 3 of 8
AN-908
清除LCD屏幕
写入屏幕之前,必须清除屏幕。为此,请按照下面所示使用函数Clear_Display_LCD。
unsigned char Clear_Display_LCD(unsigned char ucFunctionSet)
{
unsigned long ulFunction = 0;
delay (10000);
RdStatus = ReadStatus();
ulFunction = ucFunctionSet;
ulFunction = (ulFunction << 16);
ulFunction |= 0xFF000000;
GP0DAT = 0xA0000000;
GP2DAT = 0x01000000;
//Clear R/W pin
GP0SET = 0x800000;
// Set E high
delay (5);
(P2.0 = R/W)
delay (5);
// Allow min 800 ns setup time
delay (5);
// Allow hold time of 500 ns min
delay (2000);
// Minimum clear time of 1.58 ms
GP1DAT = ulFunction;
GP0CLR = 0x800000;
}
//Clear RS pin(P0.5), clear E pin (P0.7) = R/W)
// Write to register
// Set E low
return 0x1;
Rev. 0 | Page 4 of 8
AN-908
设置输入模式
还必须设置输入模式。在下面的示例中,递增功能开启,无变换(Shift)功能。这是通过使用Set_Entry_Mode函数向LCD控
制器发送0x6而实现的,如下所示:
unsigned char Set_Entry_Mode(unsigned char ucFunctionSet)
{
unsigned long ulFunction = 0;
delay (10000);
RdStatus = ReadStatus();
ulFunction = ucFunctionSet;
ulFunction = (ulFunction << 16);
ulFunction |= 0xFF000000;
GP0DAT = 0xA0000000;
GP2DAT = 0x01000000;
//Clear R/W pin
GP0SET = 0x800000;
// Set E high
delay (5);
(P2.0 = R/W)
delay (5);
// Allow min 800 ns setup time
delay (5);
// Allow hold time of 500 ns min
GP1DAT = ulFunction;
GP0CLR = 0x800000;
delay (5);
}
//Clear RS pin(P0.5), clear E pin (P0.7) = R/W)
// Write to register
// Set E low
return 0x1;
Rev. 0 | Page 5 of 8
AN-908
写入文本到LCD屏幕
在示例程序中,下列文本被写入LCD屏幕:
Analog Devices
ADuC7020 LCDdemo
为此,请在清除屏幕后使用Wr_Data_LCD函数。
例如,若要输出字符A,应使用其十六进制表示形式0x41。所有其它字符都必须用其十六进制形式表示,并发送到函数进行处
理,如下所示:
unsigned char Wr_Data_LCD(unsigned char ucFunctionSet)
{
unsigned long ulFunction = 0;
delay (10000);
RdStatus = ReadStatus();
ulFunction = ucFunctionSet;
ulFunction = (ulFunction << 16);
ulFunction |= 0xFF000000;
GP0DAT = 0xA0200000;
GP2DAT = 0x01000000;
delay (5);
GP0SET = 0x800000;
//Clear R/W pin
(P2.0 = R/W)
// Set E high
delay (5);
// Allow min 800 ns setup time
delay (5);
// Allow hold time of 500 ns min
GP1DAT = ulFunction;
GP0CLR = 0x800000;
delay (5);
GP0CLR = 0x200000;
}
//Set RS pin(P0.5), clear E pin (P0.7) = R/W)
// Write to register
// Set E low
// Set RS low
return 0x1;
Rev. 0 | Page 6 of 8
AN-908
表1. ADI公司ADuC702x系列产品
注释和参考文献
用 于 实 现 本 应 用 笔 记 所 述 全 部 过 程 的 点 阵 LCD屏 幕 为
Samsung S6A0070驱动器和控制器。有关其产品的更多信
息,请访问Samsung网站。
有关ADI公司ADuC702x系列特定产品的信息,请从表1所
列产品中选择相应的产品。
产品型号
ADuC7020
ADuC7021
ADuC7022
ADuC7024
ADuC7025
ADuC7026
ADuC7027
ADuC7028
Rev. 0 | Page 7 of 8
GPIO
引脚数
14
13
13
30
30
40
40
40
ADC
通道数
5
8
10
10
12
12
16
16
12位
DAC输出数
4
2
N/A
2
N/A
4
N/A
4
温度范围(°C)
−40至+105
−40至+85
−40至+85
−40至+105
−40至+105
−40至+125
−40至+125
−40至+125
AN-908
注释
©2007 Analog Devices, Inc. All rights reserved. Trademarks and
registered trademarks are the property of their respective owners.
AN06695-0-6/07(0)
Rev. 0 | Page 8 of 8