使用arduino直接驱动1602液晶显示文字
LCD1602显示控制器设计

LCD1602显示控制器设计一、LCD1602显示控制器的基本原理1. LCD1602显示屏通过16个引脚与Arduino开发板相连接,其中8个引脚用于数据通信,另外8个引脚包括RS、RW和E等信号引脚,用于控制显示模式和数据写入。
2.通过设置每个引脚的高低电平状态,可以实现对LCD1602显示屏的各种操作,例如清屏、光标位置设置、字符显示和图标显示等。
二、LCD1602显示控制器的硬件设计1. Arduino开发板的选择在设计LCD1602显示控制器时,首先需要选择一个合适的Arduino开发板,常用的有Arduino Uno、Arduino Nano等。
这些开发板一般都提供了多个IO口,可以满足与LCD1602显示屏的连接需求。
2.连接电路设计根据LCD1602显示屏和Arduino开发板的引脚对应关系,设计连接电路。
一般情况下,将LCD1602显示屏的VSS引脚与Arduino开发板的GND引脚相连接,将VDD引脚与5V电源引脚相连接。
将LCD1602显示屏的RS、RW和E等信号引脚与Arduino开发板的相应IO口相连接。
将LCD1602显示屏的D0-D7引脚与Arduino开发板的相应IO口相连接。
三、LCD1602显示控制器的软件设计1. 引入LiquidCrystal库在Arduino的开发环境中,打开“Sketch”菜单,选择“包含库”,再选择“添加库”,“LiquidCrystal”,将其添加到项目中。
然后在代码中引入LiquidCrystal库,以便使用其提供的函数和方法。
2. 初始化LiquidCrystal对象初始化一个LiquidCrystal对象,指定其构造函数的参数为相应的引脚号,表示与LCD1602显示屏的连接关系。
3.设置显示模式和光标位置使用LiquidCrystal对象的setCursor(函数设置光标的位置,使用display(函数打开显示,并使用noDisplay(函数关闭显示。
Arduino对LCD1602的4线驱动例程

Arduino对LCD1602的4线驱动例程学前说明:对于初学者来说,驱动液晶屏并不简单首先要清楚液晶屏各管脚定义:其次要了解1602的操作时序:最后还要清楚1602的指令码:程序内有指令注解实现效果:在1602液晶显示模块上输出字符该代码套用性很强,在以后的程序中,可利用该代码,在LCD上输出数据.声明:本程序不是我写的,本人只是对程序进行注解,方便大家理解,学习原文地址:/blog/user_2005/1229/archives/2008/200859213442.shtml/********************************************************************/int LCD1602_RS=12;//数据/命令选择端int LCD1602_RW=11;//读写选择端int LCD1602_EN=10;//使能信号int DB[] = { 6, 7, 8, 9};//数据输入输出端char str1[]="Coloz's";char str2[]="Robot";/********************************************************************//********************************************************************/void LCD_Command_Write(int command)//LCD指令控制,{int i,temp;digitalWrite( LCD1602_RS,LOW);digitalWrite( LCD1602_RW,LOW);//RS低,RW低,E高脉冲(下面为脉冲信号生成),写指令digitalWrite( LCD1602_EN,LOW);temp=command & 0xf0;//0xf0,设置数据D4-7方向为输出,D0-3为输入for (i=DB[0]; i <= 9; i++){digitalWrite(i,temp & 0x80);//0x80+地址,设置LCD第一行的数据指针初始地址temp <<= 1;}digitalWrite( LCD1602_EN,HIGH);delayMicroseconds(1);digitalWrite( LCD1602_EN,LOW);//生成脉冲信号temp=(command & 0x0f)<<4;for (i=DB[0]; i <= 10; i++){digitalWrite(i,temp & 0x80);//0x80+地址,设置LCD第一行的数据指针初始地址temp <<= 1;}digitalWrite( LCD1602_EN,HIGH);delayMicroseconds(1);digitalWrite( LCD1602_EN,LOW);//生成脉冲信号}/********************************************************************/void LCD_Data_Write(int dat){int i=0,temp;digitalWrite( LCD1602_RS,HIGH);digitalWrite( LCD1602_RW,LOW);digitalWrite( LCD1602_EN,LOW);temp=dat & 0xf0;for (i=DB[0]; i <= 9; i++){digitalWrite(i,temp & 0x80);//0x80+地址,设置LCD第一行的数据指针初始地址temp <<= 1;}digitalWrite( LCD1602_EN,HIGH);delayMicroseconds(1);digitalWrite( LCD1602_EN,LOW);//生成脉冲信号temp=(dat & 0x0f)<<4;for (i=DB[0]; i <= 10; i++){digitalWrite(i,temp & 0x80);//0x80+地址,设置LCD第一行的数据指针初始地址temp <<= 1;}digitalWrite( LCD1602_EN,HIGH);delayMicroseconds(1);digitalWrite( LCD1602_EN,LOW);//生成脉冲信号}/********************************************************************/void LCD_SET_XY( int x, int y )//设置光标位置,X为横,Y为竖{int address;if (y ==0) address = 0x80 + x;//0x80+地址,设置LCD第一行的数据指针初始地址,表示在1602第一行显示else address = 0xc0 + x;//0xc0+地址,设置LCD第二行的数据指针初始地址,表示在1602第二行显示LCD_Command_Write(address);}/********************************************************************/void LCD_Write_Char( int x,int y,int dat){LCD_SET_XY( x, y );LCD_Data_Write(dat);}/********************************************************************/void LCD_Write_String(int X,int Y,char *s)//打印*s,X为横,Y为竖,*s为输出字符{LCD_SET_XY( X, Y ); //设置地址while (*s) //写字符串{LCD_Data_Write(*s);s ++;}}/********************************************************************/void setup (void){int i = 0;for (i=6; i <= 12; i++){pinMode(i,OUTPUT);}//delay(100);LCD_Command_Write(0x01);//0x01清屏:数据指针清零,所有显示清零//delay(50);LCD_Command_Write(0x28);//0x28设置4位数据接口//delay(50);LCD_Command_Write(0x06);//0x06显示开,当读或写一个字符后,地址指针自动加1, //delay(50);LCD_Command_Write(0x0c);//0x0c+地址,设置LCD第二行的数据指针初始地址//delay(50);LCD_Command_Write(0x80);//0x80+地址,设置LCD第一行的数据指针初始地址//delay(50);}/********************************************************************/void loop (void){LCD_Command_Write(0x02);//回车,数据指针清零delay(50);LCD_Write_String(3,0,str1);//第1行,第4个地址起,打印str1 delay(50);LCD_Write_String(1,1,str2);//第2行,第2个地址起,打印str2 while(1);}。
LCD1602显示中文汉字

LCD1602 显示中文汉字LCD1602 相比大家都比较了解,但是我们一般只用来显示字符,数字。
最近在网上看许多人用LCD1602 来显示汉字,觉得有趣于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!接下我谈谈我得做法,保证你10 分钟之内一样可以在LCD1602 上显示你想显示的各种符号,汉字!!!首先:我们要弄清楚一个概念,其实我们使用1602 显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602 内部有一个64 字节的自定义CGRAM,那幺好,我们就是要利用自定义字节来达到显示汉字的效果.我们知道一个字符占8 个字节,所以在CGRAM 能够存放8 个字符。
也就是说,这个64 字节的CGRAM 是给我们提供写入数据的,那幺我们怎幺把我们要的汉字写入CGRAM 呢?不要急,大家查看LCD1602 的用户手册,里面提到当我们需要想CGRAM 写入数据时,我们需要先写入CGRAM 的地址,从手册上可知,CGRAM 的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令write_com(0x040);然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据);做完以上步骤了,是不是LCD1602 就会显示你输入的汉字呢?不要急,以上你只是把你要显示汉字的代码存放在CGRAM 里,就相当于其他常用字符一样固定在LCD 里面了,如果你不把它读出来,LCD 是不会显示的。
当你把上面的步骤做完后,接下来要做的与你平常怎幺使用LCD1602 是一样的,只不过是LCD1602 里面增加了一些你自定义的字符,汉字。
可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那幺我该怎幺编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。
相信有的朋友应该都用过这个软件。
LCD1602液晶显示实验报告

LCD1602液晶显示实验报告实验报告:LCD1602液晶显示实验实验目的:1.了解LCD1602液晶显示的工作原理和基本结构;2.掌握LCD1602液晶显示的驱动控制方法;3.能够通过Arduino控制LCD1602液晶显示。
实验材料:1.Arduino UNO开发板2.LCD1602液晶显示屏3.面包板4.杜邦线实验步骤:1.将Arduino UNO开发板与面包板连接,确保连接正确并牢固;2.将LCD1602液晶显示屏与面包板连接,连接时应注意引脚的对应关系,确保连接正确;3.将杜邦线的一端连接到Arduino UNO开发板的数字引脚上,另一端连接到对应的液晶显示屏引脚上;4.编写Arduino代码,实现液晶显示屏的控制功能;5.将编写好的代码上传到Arduino UNO开发板上,运行程序,观察LCD1602液晶显示屏上的显示结果。
实验结果:通过实验,我们成功实现了对LCD1602液晶显示屏的控制。
在液晶显示屏上可以显示出我们想要的文字、数字或符号。
通过控制液晶显示屏的引脚电平,可以控制液晶显示出不同的字符。
实验总结:通过本次实验,我们了解了LCD1602液晶显示的工作原理和基本结构。
液晶显示屏通过控制引脚电平来控制液晶分子的排列,从而实现文字、数字或符号的显示。
我们还掌握了LCD1602液晶显示的驱动控制方法,通过编写Arduino代码,我们能够实现对液晶显示屏的控制。
在实验中,我们还学习到了Arduino的使用,它是一款开放源代码的电子原型平台,由硬件和软件组成。
通过编写Arduino代码,我们可以控制与Arduino连接的各种外设,包括LCD1602液晶显示屏。
通过本次实验,我们不仅加深了对LCD1602液晶显示的理解,还学会了使用Arduino控制液晶显示屏。
这对我们的电子制作和嵌入式系统开发有重要意义。
一、常用液晶的使用之LCD1602显示自定义字符及汉字

一、常用液晶的使用之LCD1602显示自定义字符及汉字一、常用液晶的使用之LCD1602显示自定义字符及汉字2010年12月22日星期三 11:00好久没写单片机的文章了,一直以来比较忙,早就想写一个关于常见液晶的使用方法的,但是一直没机会写,只得抽些时间写一下了,总共介绍两款液晶吧,LCD1602和LCD12864,原本还想加上NOKIA5110的,但是Proteus仿真库里面没有就不写了!呵呵,有什么不妥的地方,还望大家指正啊!第一篇讲解一下LCD1602,学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。
LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII码,我们通过向液晶送相应符号的ASCII码来显示这个字符。
下面看一下Proteus软件中的LCD1602,在Proteus软件的元件库中,LCD1602为LM016L,下面是这块液晶的引脚图:具体的相关引脚和功能设定参看LCD1602的PDF文档资料,由于篇幅问题,这里就不赘述了!还有一点要说的就是大家在仿真LCD1602时,要是用的是DB7~DB0连单片机的P0口的话,一定要加上拉电阻,要不然驱动不了,因为单片机的四组IO口就P0的内部无上拉,驱动能力弱!看下面的图:在P0口加了排阻(RESPACK-8)对于自带字符的显示,只需要将对应的ASCII码写入LCD中显示即可,这个是每个人开始学习液晶最开始要学会的了,看看数据手册,写写程序,想必大家都会了,这里就不做介绍,本篇着重讲解一下怎样自定义显示字符,比如显示自定的字符、显示汉字等等这些!要显示我们自定义的字符,就要用到LCD中的CGRAM存储器(character generate RAM),而我们之前用的显示自带的字符用到的是DDRAM,两个是不同的。
液晶显示屏1602使用

液晶显示屏1602使用液晶显示屏1602是一种常用的显示器件,可以在各种设备和项目中使用。
它具有16列2行的显示范围,可以显示各种字母、数字、符号和图案。
液晶显示屏的工作原理是根据电场的变化来控制液晶分子的取向,从而改变光的透过程度,实现图像的显示。
下面将介绍使用液晶显示屏1602的一般步骤和相关注意事项。
1.材料准备使用液晶显示屏1602,您需要准备以下材料:- Arduino开发板-液晶显示屏1602-适配器或电池供电-连接线-电位器(用于调节对比度)2.连接电路将液晶显示屏1602与Arduino开发板进行连接。
连接线的具体接法可以参考液晶显示屏1602的引脚说明。
一般来说,液晶显示屏1602有16个引脚,其中8个用于控制数据传输,3个用于控制命令传输,还有一个用于控制背光。
务必确保正确地连接了每一个引脚。
在代码中,您可以指定需要显示的内容,例如文字或图案。
通过调用液晶显示屏的相关函数,您可以控制每一个像素的亮度和位置。
示例代码中的一些常用函数:- lcd.begin(cols, rows): 初始化液晶显示屏的列数和行数。
- lcd.print(content): 在当前光标位置处打印内容。
- lcd.setCursor(col, row): 设置光标的位置。
- lcd.clear(: 清空液晶显示屏上的内容。
4.调节背光和对比度5.执行输出和交互操作在编程时,您可以使用Arduino的编程语言,结合液晶显示屏的函数来实现各种操作。
具体的编程方法和语法可以参考Arduino官方文档和液晶显示屏相关的资料。
总结:。
arduino驱动1602液晶显示文字

4、RW
5、E
6、D0—D7
7、BLA是背光源正极,BLK是背光源负极。
8
1602液晶的基本操作分以下四种:
9
1602直接与arduino通信,根据产品手册描述,
分8位连接法与4位连接法,咱们使用4位连接法 进行实验。硬件连接方式如下图
10
这就是电路连接图
11
这是代码
#include<LiquidCrystal.h>
注意:不同液晶的对比度电阻是不同的,最好是
接一个电位器进行测试,本次实验使用的1KΩ电 阻在其他液晶上不一定正确。
7
3、RS
是很多液晶上都有的引脚 是命令/数据选 择引脚 该脚电平为高时表示将进行数据操作;为 低时表示进行命令操作。 也是很多液晶上都有的引脚 是读写选择 端 该脚电平为高是表示要对液晶进行读操作;为 低时表示要进行写操作。 同样很多液晶模块有此引脚 通常在总线上 信号稳定后给一正脉冲通知把数据读走,在此脚 为高电平的时候总线不允许变化。 8 位双向并行总线,用来传送命令和 数据。5
1602液晶接口引脚定义
6
接口说明:
1、两组电源
一组是模块的电源 一组是背光板的 电源 一般均使用5V供电。本次试验背光使用3.3V 供电也可以工作。
位器进行调节。本次实验使用1KΩ的电阻来设定 对比度。其连接分高电位与低电位接法,本次使 用低电位接法,串联1KΩ电阻后接GND。
2、VL是调节对比度的引脚,串联不大于5KΩ的电
LiquidCrystal lcd(12,11,5,4,3,2); void setup() { lcd.begin(16,2);//设置LCD显示的数目。16 X 2:16格2行。 lcd.print("hello,world ! ");//将hello,world!显示在LCD上
1602显示汉字和自定义字符库

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,但是没有汉字库。
每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
今天偶然在网上发现有的人利用1602显示简单的汉字,对这个产生了兴趣,上网搜了一些资料,自己慢慢的研究了一下,终于弄懂了怎么回事,自己也写了一个显示“天”,“℃”,“你”,“土”,心形,“明”的程序。
下面就和大家一起分享一下。
查看LCD1602的CGROM字符代码表,可以发现从00000000B~00000111B (00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,最多可以自定义8个字符,然后就可以同调用CGROM字符一样来调用自定义好的字符。
那么如何设定CGRAM中的内容呢?首先我们要把所要编写的字符对应于5X8点阵的“字模”提取出来,我们可以通过相关的软件来提取,也可以手工提取。
说白了也就是将点阵的某一行中有显示的点用1表示,无显示的点用0表示,以此形成该行对应的字模数据。
设定CGRAM的内容,要一行一行的设定,每一行对应一个CGRAM,5X8点阵,每行5点,共8行,因此要将8行的字模数据都写入CGRAM。
写好后,就可像调用CGROM字符一样来来调用它了(CGRAM是可写可读的,CGROM只可读不可写)。
下面贴出我的程序(见1602LCD文件夹中的1602显示汉字.Uv2文件),实物图和Proteus仿真图,由于一个字符的点数为5X8,点数太少所以显示效果不是很好,经实验发现实物效果比仿真要好,下面为两者的效果图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本次试验使用arduino直接驱动1602液晶显示文字1602液晶在应用中非常广泛,最初的1602液晶使用的是HD44780控制器,现在各个厂家的1602模块基本上都是采用了与之兼容的IC,所以特性上基本都是一致的。
1602LCD主要技术参数显示容量为16×2个字符;芯片工作电压为4.5~5.5V;工作电流为2.0mA(5.0V);模块最佳工作电压为5.0V;字符尺寸为2.95×4.35(W×H)mm。
1602液晶接口引脚定义2011-7-20 20:21 上传下载附件 (80.33 KB)接口说明:1、两组电源一组是模块的电源一组是背光板的电源一般均使用5V供电。
本次试验背光使用3.3V供电也可以工作。
2、VL是调节对比度的引脚,串联不大于5KΩ的电位器进行调节。
本次实验使用1KΩ的电阻来设定对比度。
其连接分高电位与低电位接法,本次使用低电位接法,串联1KΩ电阻后接GND。
注意:不同液晶的对比度电阻是不同的,最好是接一个电位器进行测试,本次实验使用的1KΩ电阻在其他液晶上不一定正确。
3、RS 是很多液晶上都有的引脚是命令/数据选择引脚该脚电平为高时表示将进行数据操作;为低时表示进行命令操作。
4、RW 也是很多液晶上都有的引脚是读写选择端该脚电平为高是表示要对液晶进行读操作;为低时表示要进行写操作。
5、E 同样很多液晶模块有此引脚通常在总线上信号稳定后给一正脉冲通知把数据读走,在此脚为高电平的时候总线不允许变化。
6、D0—D7 8 位双向并行总线,用来传送命令和数据。
7、BLA是背光源正极,BLK是背光源负极。
1602液晶的基本操作分以下四种:2011-7-20 20:21 上传下载附件 (51.04 KB)下图就是1602液晶实物图2011-7-21 13:30 上传下载附件 (140.15 KB)2011-7-21 13:30 上传下载附件 (182.96 KB)1602直接与arduino通信,根据产品手册描述,分8位连接法与4位连接法,咱们先使用8位连接法进行实验。
硬件连接方式如下图2011-7-21 13:30 上传下载附件 (149.64 KB)2011-7-21 13:30 上传下载附件 (196.73 KB)代码如下ARDUINO 代码复制打印int DI = 12;int RW = 11;int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚int Enable = 2;void LcdCommandWrite(int value) {// 定义所有引脚inti = 0;for (i=DB[0]; i <= DI; i++) //总线赋值{digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。
value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1); // 延时1msdigitalWrite(Enable,LOW);delayMicroseconds(1); // 延时1ms}void LcdDataWrite(int value) {// 定义所有引脚inti = 0;digitalWrite(DI, HIGH);digitalWrite(RW, LOW);for (i=DB[0]; i <= DB[7]; i++) {digitalWrite(i,value & 01);value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1);digitalWrite(Enable,LOW);delayMicroseconds(1); // 延时1ms}void setup (void) {inti = 0;for (i=Enable; i <= DI; i++) {pinMode(i,OUTPUT);}delay(100);// 短暂的停顿后初始化LCD// 用于LCD控制需要LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(64);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(50);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(20);LcdCommandWrite(0x06); // 输入方式设定// 自动增量,没有显示移位delay(20);LcdCommandWrite(0x0E); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(100);LcdCommandWrite(0x80); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);}void loop (void) {LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdCommandWrite(0x80+3);delay(10);// 写入欢迎信息LcdDataWrite('W');LcdDataWrite('e');LcdDataWrite('l');LcdDataWrite('c');LcdDataWrite('o');LcdDataWrite('m');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('t');LcdDataWrite('o');delay(10);LcdCommandWrite(0xc0+1); // 定义光标位置为第二行第二个位置delay(10);LcdDataWrite('g');LcdDataWrite('e');LcdDataWrite('e');LcdDataWrite('k');LcdDataWrite('-');LcdDataWrite('w');LcdDataWrite('o');LcdDataWrite('r');LcdDataWrite('k');LcdDataWrite('s');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('p');delay(5000);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdDataWrite('I');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('m');LcdDataWrite(' ');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('n');LcdDataWrite('g');LcdDataWrite('y');LcdDataWrite('i');delay(3000);LcdCommandWrite(0x02); //设置模式为新文字替换老文字,无新文字的地方显示不变。
delay(10);LcdCommandWrite(0x80+5); //定义光标位置为第一行第六个位置delay(10);LcdDataWrite('t');LcdDataWrite('h');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('d');LcdDataWrite('m');LcdDataWrite('i');LcdDataWrite('n');delay(5000);}int DI = 12;int RW = 11;int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚int Enable = 2;void LcdCommandWrite(int value) {// 定义所有引脚inti = 0;for (i=DB[0]; i <= DI; i++) //总线赋值{digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。
value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1); // 延时1msdigitalWrite(Enable,LOW);delayMicroseconds(1); // 延时1ms}void LcdDataWrite(int value) {// 定义所有引脚inti = 0;digitalWrite(DI, HIGH);digitalWrite(RW, LOW);for (i=DB[0]; i <= DB[7]; i++) {digitalWrite(i,value & 01);value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1);digitalWrite(Enable,LOW);delayMicroseconds(1); // 延时1ms}void setup (void) {inti = 0;for (i=Enable; i <= DI; i++) {pinMode(i,OUTPUT);}delay(100);// 短暂的停顿后初始化LCD// 用于LCD控制需要LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(64);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(50);LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小delay(20);LcdCommandWrite(0x06); // 输入方式设定// 自动增量,没有显示移位delay(20);LcdCommandWrite(0x0E); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(100);LcdCommandWrite(0x80); // 显示设置// 开启显示屏,光标显示,无闪烁delay(20);}void loop (void) {LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdCommandWrite(0x80+3);delay(10);// 写入欢迎信息LcdDataWrite('W');LcdDataWrite('e');LcdDataWrite('l');LcdDataWrite('c');LcdDataWrite('o');LcdDataWrite('m');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('t');LcdDataWrite('o');delay(10);LcdCommandWrite(0xc0+1); // 定义光标位置为第二行第二个位置delay(10);LcdDataWrite('g');LcdDataWrite('e');LcdDataWrite('e');LcdDataWrite('k');LcdDataWrite('-');LcdDataWrite('w');LcdDataWrite('o');LcdDataWrite('r');LcdDataWrite('k');LcdDataWrite('s');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('p');delay(5000);LcdCommandWrite(0x01); // 屏幕清空,光标位置归零delay(10);LcdDataWrite('I');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('m');LcdDataWrite(' ');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('n');LcdDataWrite('g');LcdDataWrite('y');LcdDataWrite('i');delay(3000);LcdCommandWrite(0x02); //设置模式为新文字替换老文字,无新文字的地方显示不变。