LCD1602显示温度符号基于Arduino

LCD1602显示基于Arduino

LCD1602显示温度符号基于Arduino_第1张图片

这篇文章主要是对Arduino控制LCD1602显示的介绍,具体的硬件方面知识,工作原理时序图,网上有许多大神详细分析过例如
借鉴一
https://blog.csdn.net/Lucifer_min/article/details/112133408
借鉴二
https://blog.csdn.net/weixin_46897073/article/details/110282736
个人主要讲解的如何快速使用Arduino自定义形状,如有不足之处请指教

LCD1602首先就要明白各个引脚的工作原理,各个引脚是干嘛用的。
LCD1602显示温度符号基于Arduino_第2张图片注意几个引脚,VDD就是VCC,K引脚是要接GND的,RW也是要接GND的因为屏幕显示你是写入的对应的数据使其显示的。V0(VEE)是对比调整电压接口,要求连接电位器控制这个端口的电压,来调整屏幕和字体显示的对比度

1.打开Arduino,调用官方库LCD1602显示温度符号基于Arduino_第3张图片根据接线图将线接好
LCD1602显示温度符号基于Arduino_第4张图片将程序烧录好后,通过电位器调节对比度直至观察到图像。
在这里插入图片描述第9行注释写到,LCD屏上会显示一个”心“
LCD1602显示温度符号基于Arduino_第5张图片
看着这个byte型的数组,1所形成的形状是不是很向一颗“心”,(LCD屏幕上,1为点亮部分)
在这里插入图片描述调用LiquidCrystal.h库中的函数createChar,把这个心型数组赋值给0
LCD1602显示温度符号基于Arduino_第6张图片得到了一个这样子的图像。

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()这个函数,是如何形成图形是根据其数据手册硬件方面的知识编写的。LCD1602显示温度符号基于Arduino_第7张图片

// 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);
}

这段代码并不复杂,没有什么难的地方哈。

接线图
LCD1602显示温度符号基于Arduino_第8张图片此人用CAD画的

原理图
LCD1602显示温度符号基于Arduino_第9张图片此人用AD画的

观察实验效果
LCD1602显示温度符号基于Arduino_第10张图片很棒哈 !
个人的知识积累借鉴了大佬们的文章。
借鉴一
https://blog.csdn.net/Lucifer_min/article/details/112133408
借鉴二
https://blog.csdn.net/weixin_46897073/article/details/110282736

你可能感兴趣的:(arduino,stm32,开发工具,驱动程序)