这篇文章主要是对Arduino控制LCD1602显示的介绍,具体的硬件方面知识,工作原理时序图,网上有许多大神详细分析过例如
借鉴一
https://blog.csdn.net/Lucifer_min/article/details/112133408
借鉴二
https://blog.csdn.net/weixin_46897073/article/details/110282736
个人主要讲解的如何快速使用Arduino自定义形状,如有不足之处请指教
LCD1602首先就要明白各个引脚的工作原理,各个引脚是干嘛用的。
注意几个引脚,VDD就是VCC,K引脚是要接GND的,RW也是要接GND的因为屏幕显示你是写入的对应的数据使其显示的。V0(VEE)是对比调整电压接口,要求连接电位器控制这个端口的电压,来调整屏幕和字体显示的对比度
1.打开Arduino,调用官方库根据接线图将线接好
将程序烧录好后,通过电位器调节对比度直至观察到图像。
第9行注释写到,LCD屏上会显示一个”心“
看着这个byte型的数组,1所形成的形状是不是很向一颗“心”,(LCD屏幕上,1为点亮部分)
调用LiquidCrystal.h库中的函数createChar,把这个心型数组赋值给0
得到了一个这样子的图像。
2.现在有一个这样的任务,我想显示DHT11的温湿度符号,所以就有了以下操作。LCD1602是216的屏幕,每一个位置对应的是**58**,而点亮的地方用**’1‘**即可。
//全局变量
byte temperturechar[8] = {
0b10000,
0b00110,
0b01001,
0b01000,
0b01000,
0b01001,
0b00110,
0b00000,
};
根据摄氏度的形状,构建了一个简单的byte数组。
//set up 函数中调用
lcd.createChar(6, temperturechar);
lcd.write(byte(6));
在set up 函数中指明此变量,并显示其。createChar()这个函数,是如何形成图形是根据其数据手册硬件方面的知识编写的。
// include the library code:
#include
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// make some custom characters:
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};
byte smiley[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b10001,
0b01110,
0b00000
};
byte frownie[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b00000,
0b01110,
0b10001
};
byte armsDown[8] = {
0b00100,
0b01010,
0b00100,
0b00100,
0b01110,
0b10101,
0b00100,
0b01010
};
byte armsUp[8] = {
0b00100,
0b01010,
0b00100,
0b10101,
0b01110,
0b00100,
0b00100,
0b01010
};
byte temperturechar[8] = {
0b10000,
0b00110,
0b01001,
0b01000,
0b01000,
0b01001,
0b00110,
0b00000,
};
void setup() {
// initialize LCD and set up the number of columns and rows:
lcd.begin(16, 2);
// create a new character
lcd.createChar(0, heart);
// create a new character
lcd.createChar(1, smiley);
// create a new character
lcd.createChar(2, frownie);
// create a new character
lcd.createChar(3, armsDown);
// create a new character
lcd.createChar(4, armsUp);
lcd.createChar(6, temperturechar);
// set the cursor to the top left
lcd.setCursor(0, 0);
// Print a message to the lcd.
lcd.print("I ");
lcd.write(byte(0)); // when calling lcd.write() '0' must be cast as a byte心型符号
lcd.print(" Arduino! ");
lcd.write(byte(1));
lcd.setCursor(1,1);
lcd.write(byte(6));
}
void loop() {
// set the cursor to the bottom row, 5th position:
lcd.setCursor(4, 1);
// draw the little man, arms down:
lcd.write(3);
delay(500);
lcd.setCursor(4, 1);
// draw him arms up:
lcd.write(4);
delay(500);
}
3.为了搭载dht11显示数据,我把代码又改了改
不废话上代码,嘻嘻
#include
#include
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
volatile int S;
volatile int C;
DHT dhtA2(A2, 11);
byte temperturechar[8] = {
0b10000,
0b00110,
0b01001,
0b01000,
0b01000,
0b01001,
0b00110,
0b00000,
};
byte smiley[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b10001,
0b01110,
0b00000
};
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
//lcd.print("hello, world!");
// put your setup code here, to run once:
Serial.begin(9600);
S = 0;
C = 0;
dhtA2.begin();
lcd.createChar(1, smiley);
lcd.createChar(6, temperturechar);
// set the cursor to the top left
lcd.setCursor(0, 0);
lcd.setCursor(13,1);
lcd.write(byte(6));
lcd.setCursor(15,0);
lcd.write(byte(0));
}
void loop() {
// put your main code here, to run repeatedly:
S = dhtA2.readHumidity();
C = dhtA2.readTemperature();
lcd.setCursor(0, 0);
lcd.print("humidity:");
lcd.print(S);
lcd.print("%");
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("temperture:");
lcd.print(C);
}
这段代码并不复杂,没有什么难的地方哈。
观察实验效果
很棒哈 !
个人的知识积累借鉴了大佬们的文章。
借鉴一
https://blog.csdn.net/Lucifer_min/article/details/112133408
借鉴二
https://blog.csdn.net/weixin_46897073/article/details/110282736