液晶屏在我们电子制作中是一种常用的输出显示设备,下面就用很常用的1602液晶屏进行演示液晶屏的应用。
电脑,windows系统
零知标准板
micro-usb线
1602液晶屏1个
电位器1个
面包板一个+若干跳线
1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:
2、按照之前的方式先【编译】,然后【上传】到开发板中。
/**
* 文件: lcd1602-test.ino by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
* -- 零知开源,让电子制作变得更简单! --
* 时间: 2018/06/27 15:17
* 说明: lcd1602 显示屏, 4位data的方式接线
**/
int LCD1602_RS = 6;
int LCD1602_RW = 5;
int LCD1602_EN = 4;
int DB[] = {0,1,2,3};
//显示屏显示的内容
char str1[] = "Welcome to";
char str2[] = "lingzhilab";
void LCDWrCmd(int command);
void LCDWrData(int dat);
void LCD_WR_String(int x, int y, char *s);
void lcd1602_init(void);
void setup() {
//开启标准板的0-6位引脚
for(int i=0; i<=6; i++)
{
pinMode(i, OUTPUT);
}
lcd1602_init(); //初始化1602
}
void loop() {
LCDWrCmd(0x01);
delay(50);
LCD_WR_String(0,0,str1);
delay(50);
LCD_WR_String(4,1,str2);
delay(5000);
}
void LCDWrCmd(int command)
{
int i,temp;
digitalWrite(LCD1602_EN, LOW);
delayMicroseconds(1);
digitalWrite(LCD1602_RW, LOW);
digitalWrite(LCD1602_RS, LOW);
temp = command & 0xf0;
for (i = DB[0]; i <= 3; i++)
{
digitalWrite(i,temp&0x80);
temp<<=1;
}
delayMicroseconds(1);
digitalWrite(LCD1602_EN, HIGH);
delayMicroseconds(1);
digitalWrite(LCD1602_EN, LOW);
temp = (command&0x0f)<<4;
for(i=DB[0]; i<=3; i++)
{
digitalWrite(i, temp&0x80);
temp<<=1;
}
delayMicroseconds(1);
digitalWrite(LCD1602_EN,HIGH);
delayMicroseconds(1);
digitalWrite(LCD1602_EN,LOW);
delayMicroseconds(1);
}
void LCDWrData(int dat)
{
int i, temp;
digitalWrite(LCD1602_EN, LOW);
delayMicroseconds(1);
digitalWrite(LCD1602_RS, HIGH);
digitalWrite(LCD1602_RW, LOW);
temp = dat&0xf0;
for(i=DB[0]; i<=3; i++)
{
digitalWrite(i, temp&0x80);
temp<<=1;
}
delayMicroseconds(1);
digitalWrite(LCD1602_EN, HIGH);
delayMicroseconds(1);
digitalWrite(LCD1602_EN, LOW);
temp = (dat&0x0f)<<4;
for(i=DB[0]; i<=3; i++)
{
digitalWrite(i, temp&0x80);
temp<<=1;
}
delayMicroseconds(1);
digitalWrite(LCD1602_EN, HIGH);
delayMicroseconds(1);
digitalWrite(LCD1602_EN, LOW);
delayMicroseconds(1);
}
void LCD_SET_XY(int x, int y)
{
int address;
if(y==0)
address = 0x80+x;
else
address = 0xc0+x;
LCDWrCmd(address);
}
void LCD_WR_Char(int x, int y, int dat)
{
LCD_SET_XY(x, y);
delayMicroseconds(50);
LCDWrData(dat);
}
void LCD_WR_String(int x, int y, char *s)
{
int count = 0;
while(*s)
{
LCD_SET_XY(x+count, y);
//delayMicroseconds(500);
delay(2);
count++;
LCDWrData(*s);
s++;
}
}
void lcd1602_init(void)
{
delay(100);
LCDWrCmd(0x28);
delay(64);
LCDWrCmd(0x28);
delay(50);
LCDWrCmd(0x06);
delay(50);
LCDWrCmd(0x0c);
delay(50);
LCDWrCmd(0x80);
delay(50);
LCDWrCmd(0x01);
delay(50);
}
上面步骤成功完成后,我们调节一下电位器,根据实际情况调节到最佳对比度,就可以看到效果如下: