文档章节

arduino连接LCD1602A

素人派
 素人派
发布于 2015/07/22 07:55
字数 1122
阅读 337
收藏 0
  • 接线图
[caption id="attachment_1183" align="alignnone" width="1108"] LCD1602A接线图(4位) LCD1602A接线图(4位)[/caption] 132950fbbbolz4q0qs1bbo
  • 4位接线法
[codesyntax lang="cpp"]
/**
* VSS GND
* VDD 5V
* V0  GND
* RS  12
* RW  11
* E   10
* D4  9
* D5  8
* D6  7
* D7  6
* A  V5
* K  GND
* from http://surenpi.com
* created 2015/3/23
*/
int LCD1602_RS=12;
int LCD1602_RW=11;
int LCD1602_EN=10;
int DB[] = { 6, 7, 8, 9};

char str1[]="Welcome to";
char str2[]="surenpi";
char str3[]="find me";
char str4[]="surenpi.com";
 
void LCD_Command_Write(int command)
{
  int i,temp;
  digitalWrite( LCD1602_RS,LOW);
  digitalWrite( LCD1602_RW,LOW);
  digitalWrite( LCD1602_EN,LOW);
 
  temp=command & 0xf0;
  for (i=DB[0]; i <= 9; i++)
  {
     digitalWrite(i,temp & 0x80);
     temp <<= 1;
  }
   
  digitalWrite( LCD1602_EN,HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN,LOW);
   
  temp=(command & 0x0f)<<4;
  for (i=DB[0]; i <= 9; i++)
  {
     digitalWrite(i,temp & 0x80);
     temp <<= 1;
  }
   
  digitalWrite( LCD1602_EN,HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN,LOW);
}

void cleanScreen(int delayTime = 50)
{
   LCD_Command_Write(0x01);
      
   delay(delayTime);
}
 
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);
     temp <<= 1;
  }
   
  digitalWrite( LCD1602_EN,HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN,LOW);
   
  temp=(dat & 0x0f)<<4;
  for (i=DB[0]; i <= 9; i++)
  {
     digitalWrite(i,temp & 0x80);
     temp <<= 1;
  }
   
  digitalWrite( LCD1602_EN,HIGH);
  delayMicroseconds(1);
  digitalWrite( LCD1602_EN,LOW);
}
 
void LCD_SET_XY( int x, int y )
{
  int address;
  if (y ==0)    address = 0x80 + x;
  else          address = 0xC0 + x;
  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, int delayTime = 50)
{
  LCD_SET_XY(x, y);    //设置地址
  
  int i = 0;
  while(*s && ++i <= 16)             //写字符串
  {
    LCD_Data_Write(*s);   
    s++;
  }
  
  delay(delayTime);
  
  if(*s)
  {
    cleanScreen();
    LCD_Write_String(x, y, s, delayTime);
  }
}
 
void setup (void)
{
  int i = 0;
  for(i = 6; i <= 12; i++)
  {
    pinMode(i,OUTPUT);
  }
  
  delay(100);
  LCD_Command_Write(0x28);//4线 2行 5x7
  delay(50);
  LCD_Command_Write(0x06);
  delay(50);
  LCD_Command_Write(0x0c);
  delay(50);
  LCD_Command_Write(0x80);
  delay(50);
  LCD_Command_Write(0x01);
  delay(50);
}
 
void loop (void)
{
  cleanScreen();
  LCD_Write_String(3,0,str1);//第1行,第4个地址起
  LCD_Write_String(0,1,str2, 3000);//第2行,第2个地址起
  
  cleanScreen();
  LCD_Write_String(0,0,str3);
  LCD_Write_String(0,1,str4, 3000);
}
[/codesyntax]
  •  8位接线法
[codesyntax lang="cpp"]
/**
* 8 bit
* from http://surenpi.com
*/
int DI = 12;
int RW = 11;
int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚
int Enable = 2;
 
void LcdCommandWrite(int value)
{
  // 定义所有引脚
  int i = 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);  // 延时1ms
  digitalWrite(Enable,LOW);
  delayMicroseconds(1);  // 延时1ms
}
 
void LcdDataWrite(int value)
{
  // 定义所有引脚
  int i = 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)
{
  int i = 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);
}
[/codesyntax]
  • 使用LiquidCrystal库来连接
使用LiquidCrystal这个库的话,代码会简洁很多,而且还封装还一些常用函数。 [codesyntax lang="cpp"]
/**
7 gpios demo

The circuit:
VSS GND
VDD 5V
V0 10K resistor or GND
RS 12
RW 11
EN 10
D4 9
D3 8
D2 7
D1 6

from www.surenpi.com
created 2015/3/25
*/
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6);

void setup() {
  lcd.begin(16, 2);
  lcd.print("www.surenpi.com");
}

void loop() {  
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}
[/codesyntax] 注意:上面的代码中使用了7个GPIO接口,其实把RW接到GND上也行,这样的就可以节省一个GPIO。如果要把RW接GND话,就要使用另外一个构造函数:LiquidCrystal lcd(12, 10, 9, 8, 7, 6)
  • 参考
 树莓派上怎么连接LCD1602呢,请看这里。

本文转载自:http://surenpi.com/2015/03/23/arduino%e8%bf%9e%e6%8e%a5lcd1602a/

上一篇: TEA5767
下一篇: avr-project-4
素人派
粉丝 26
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问
ArduinoYun教程之通过网络为Arduino Yun编程

ArduinoYun教程之通过网络为Arduino Yun编程 Arduino Yun的软件部分 通过第一章的介绍后读者就明白了Arduino Yun除了是一个类似其他Arduino的单片机之外,它的另一大组成部分就是运行着一个特...

大学霸
2015/06/30
2.1K
0
315Mhz、433Mhz无线遥控信号的解码分析和模拟

摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择。于是花了200元购得3块arduino开发板(2nano&1uno)和其他传感器等,同时看到了315M超再生...

广岛秋泽
2016/06/02
0
0
pcDuino与Arduino通过xbee模块实现双灯互控

xbee模块主要功能是实现无线数据通信,利用xbee模块分别与pcDuino和Arduino连接,通过串口读写数据,可以轻松实现二者之间的数据传输。在pcDuino端按下开关按钮控制arduino端的LED灯亮,反之...

pc朵拉
2013/07/03
663
0
【Android】Android用ArduinoDroid在pcDuino实现Arduino星星点灯

ArduinoDriod 是一个让我们在Android上面可以实现对通过OTG连接到pcDuino上的Arudino板子进行编程的App。 在这里我们来看看如何在Android 上进行Arduino星星点灯。 一:硬件连接 首先,我们要...

pc朵拉
2013/12/11
1K
0
如何用 JavaScript 控制 Arduino?

Arduino 运行 C 语言,而主控端运行 JavaScript,一次要编写和维护两种程序。既然浏览器和服务器都用 JavaScript,若 Arduino 也能用 JavaScript 控制,那岂不完美? 这就是 Rick Waldron 设...

tangxiaoyin
2017/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
26分钟前
3
0
支撑微博亿级社交平台,小白也能玩转Redis集群(实战篇)

上篇文章《支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)》介绍了Redis集群相关原理,这篇文章将介绍Redis Cluster集群的搭建、配置,运维、扩容等具体操作 集群搭建 2018年10月 Re...

分布式系统架构
27分钟前
5
0
JVM -- 垃圾回收算法及分代垃圾收集器

Hello,今天记录下 Java虚拟机中的其中一个重点知识 --> 垃圾回收算法及分代垃圾收集器。 一起学习,一起进步。继续沉淀,慢慢强大。希望这文章对您有帮助。若有写的不好的地方,欢迎评论给建...

猫狗熊
40分钟前
3
0
ERC-777以太坊新代币标准解读

ERC777是一个新的高级代币标准,可以视为ERC20的升级版本,因此它解决了ERC20以及ERC223存在的一些问题,开发者可以根据自己的具体需求进行选型。 1、使用ERC820进行合约注册 有别于ERC20的自...

汇智网教程
今天
8
0
代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部