LCD 1602实验-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8593|回复: 8

LCD 1602实验

[复制链接]
发表于 2014-1-24 17:28 | 显示全部楼层 |阅读模式
LCD 1602 液晶也叫LCD1602 字符型液晶,它是一种专门用来显示字母,数字,符号等的点阵型液晶模块。
一、试验元件:pcDuino套件、1块 LCD1602液晶模块、1个可调电位器、16根导线、1块面包板
二、试验连接图:
  • LCD模块的D4连到 pcDuino D4
  • LCD模块的D5连到 pcDuino D5
  • LCD模块的D6连到 pcDuino D6
  • LCD模块的D7连到 pcDuino D7
  • LCD模块的RS连到 pcDuino D8
  • LCD模块的E连到 pcDuino D9

三、进入arduino IDE,输入代码
[backcolor=white !important]
#include "core.h"
#define RS 8
#define EN 9
#define backlight 10
#define RS_L digitalWrite(RS,LOW)
#define RS_H digitalWrite(RS,HIGH)
#define EN_L digitalWrite(EN,LOW)
#define EN_H digitalWrite(EN,HIGH)
int DB[] = {7,6,5,4};
/********************************************************************/
void write_command(int command)
{
int i,temp;
RS_L;
EN_L;
temp=command & 0xf0;
for (i=0; i < 4; i++)
{
if(temp&0x80)
digitalWrite(DB,HIGH);
else digitalWrite(DB,LOW);
temp <<= 1;
delayMicroseconds(10);
}
EN_H;
delay(1);
EN_L;
temp=(command & 0x0f)<<4;
for (i=0; i < 4; i++)
{
if(temp&0x80)
digitalWrite(DB,HIGH);
else digitalWrite(DB,LOW);
temp <<= 1;
delayMicroseconds(10);
}
EN_H;
delay(1);
EN_L;
}
/********************************************************************/
void write_data(int dat)
{
int i=0,temp;
RS_H;
EN_L;
temp=dat & 0xf0;
for (i=0; i < 4; i++)
{
if(temp&0x80)
digitalWrite(DB,HIGH);
else digitalWrite(DB,LOW);
temp <<= 1;
delayMicroseconds(10);
}
EN_H;
delay(1);
EN_L;
temp=(dat & 0x0f)<<4;
for (i=0; i < 4; i++)
{
if(temp&0x80)
digitalWrite(DB,HIGH);
else digitalWrite(DB,LOW);
temp <<= 1;
delayMicroseconds(10);
}
EN_H;
delay(1);
EN_L;
}
/********************************************************************/
void LCD_write_char( int x,int y,int dat)
{
int address;
if (x ==0) address = 0x80 + y;
else address = 0xC0 + y;
write_command(address);
write_data(dat);
delayMicroseconds(10);
}
/********************************************************************/
void lcd1602_init()
{
int i = 0;
pinMode(RS,OUTPUT);
pinMode(EN,OUTPUT);
pinMode(backlight,OUTPUT);
digitalWrite(backlight,HIGH);
for (i=0; i < 4; i++)
{
pinMode(DB,OUTPUT);
}
delay(100);
write_command(0x28);
delay(50);
write_command(0x06);
delay(50);
write_command(0x0c);
delay(50);
write_command(0x80);
delay(50);
write_command(0x01);
delay(100);
}
/********************************************************************/
void setup (void)
{
lcd1602_init();
}
/********************************************************************/
void loop (void)
{
write_command(0x02);
LCD_write_char(0,2,'W');
LCD_write_char(0,3,'e');
LCD_write_char(0,4,'l');
LCD_write_char(0,5,'c');
LCD_write_char(0,6,'o');
LCD_write_char(0,7,'m');
LCD_write_char(0,8,'e');
LCD_write_char(0,10,'t');
LCD_write_char(0,11,'o');
LCD_write_char(1,4,'p');
LCD_write_char(1,5,'c');
LCD_write_char(1,6,'D');
LCD_write_char(1,7,'u');
LCD_write_char(1,8,'i');
LCD_write_char(1,9,'n');
LCD_write_char(1,10,'o');
while(1);
}
四、试验结果如图:


924BAF3150A86D4686C38A976668DF30.jpg
发表于 2014-1-27 16:53 | 显示全部楼层
{:soso_e142:}楼主辛苦了,光看线我就已经晕了
发表于 2014-2-7 16:31 | 显示全部楼层
撸主干嘛搞这么复杂呢?
//调用LCD驱动库
//#include <LiquidCrystal.h>
//LiquidCrystal lcd(12, 13, 26, 27, 28, 29);   //定义传输IO口,可根据实际情况调整IO口使用,(RS,E,DB4-7)
发表于 2014-2-12 10:36 | 显示全部楼层
确实出现了welcome to pcduino
发表于 2014-5-16 18:02 | 显示全部楼层
我按照楼主的程序,把代码烧写进去了,我把那个backlight 连到了 lcd上的RW管脚,为什么不显示,屏幕一直闪烁,
发表于 2014-7-15 14:17 | 显示全部楼层
atsky 发表于 2014-2-7 16:31
撸主干嘛搞这么复杂呢?
//调用LCD驱动库
//#include

求教啊,大神
发表于 2015-1-25 16:20 | 显示全部楼层

,你得先有LiquidCrystal.h库,记得置顶贴里有
发表于 2018-9-14 08:45 | 显示全部楼层
lcd就没玩明白过
发表于 2018-9-14 08:45 | 显示全部楼层
这个写的不错  空了试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:48 , Processed in 0.325405 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表