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