ArduinoUNO实战-第十五章-液晶LCD1602实验

news/2025/4/2 7:32:12/

目录

  • 目标
  • 理论学习
  • 实物图
    • 技术参数
    • LCD1602 正面
      • 背面
    • IIC/I2C 1602A
      • 正面
      • 背面
    • CGRAM
  • LCD1602 接线图
  • IIC/I2C 1602A接线图
  • 效果图
  • IDE代码
    • LCD1602
      • 引入库LiquidCrystal.h
      • 代码
    • IIC/I2C 1602A
      • 方法一:引入库LiquidCrystal_I2C.h
      • 方式二
      • 运行检测程序检测模块的默认起始地址
      • 简单示例
      • 温度显示在1602A

目标

  • 液晶开机画面显示Welcome to use!
  • 读取LM35温度传感器的值,显示在液晶屏上

理论学习

  • LCD1602液晶是一款通用建议液晶,可以显示ASCII码的英文字母、数字和标点符号(不能显示中文)。
  • LCD1602总共可以显示2行*16个字符。

实物图

市场主要有两个型号LCD1602IIC/I2C 1602A(高配简洁版)

技术参数

在这里插入图片描述

LCD1602 正面

在这里插入图片描述

  • VSS:接地
  • VDD:正5V
  • VO:对比度(2.2K-4.4K电阻)
  • R/W:高电平是read,低电平是write
  • A:Led正,液晶
  • K:Led负,液晶
    在这里插入图片描述

背面

在这里插入图片描述

IIC/I2C 1602A

正面

在这里插入图片描述

背面

在这里插入图片描述

CGRAM

参考原文链接:https://blog.csdn.net/wait_for_taht_day5/article/details/50636096
在这里插入图片描述
CGRAM : 允许用户自建字模区的空间。从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零(表上的高位)。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X111,X为无效位,最后三位为000-111共8个。

CGROM : 字模存储用空间。你要显示某个ASCII字符时,要显示字符的字模就存在这里。

DDRAM : 显示用RAM。直接和屏幕上的点相对应。屏幕上的一个点和DDRAM中的一个位对应。

在这里插入图片描述

1602液晶屏一行显示16个,对应于00-0F/40-4F,而DDRAM可以储存80个,如果需要显示10-27/50-67的内容就需要用到左移右移来实现。

总结:DDRAM是用来使液晶屏显示的,CGROM是液晶屏可以显示的内容(在CGROM 表中查看),CGRAM是用来扩展液晶屏可以显示的内容。

LCD1602 接线图

在这里插入图片描述

IIC/I2C 1602A接线图

在这里插入图片描述
接线说明:

  • CND:系统电源负极
  • VCC:系统电源正极
  • SDA:IIC数据线
  • SCL:IIC时钟线

对比度可以通过蓝色电位器调节,顺时针增强,逆时针减弱

效果图

在这里插入图片描述

IDE代码

LCD1602

引入库LiquidCrystal.h

可以在IDE左上角Sketch-Include Library中选择引入
其实这些库在IDE的安装路径中也可以找到
在这里插入图片描述
可以看到c++的定义和源码以及一些例子,可以去参考中文说明时序图看源文件学习代码
在这里插入图片描述

代码


/*液晶LCD1602并显示温度传感器LM35
*/#include<Arduino.h>#include<LiquidCrystal.h>// 定义引脚命名
#define LM35 A0
// 定义输出引脚
LiquidCrystal lcd(12,11,5,4,3,2)int val = 0;
// 定义温度初始值
float temp = 0;// the setup function runs once when you press reset or power the board
void setup() {// 打开串口Serial.begin(9600);// 让led使能,16字符*2行lcd.begin(16,2);lcd.print("Welcome to user!");delay(2000);// 清屏lcd.clear();}// the loop function runs over and over again forever
void loop() 
{val = analogRead(LM35);temp = 0.48876 * val;Serial.print(val);Serial.print("= LM35 = ");Serial.println(temp);/* 通过lcd显示 */// 因为是16*2两行,可以看做是xy坐标x是0-15,y是0-1;如下显示第一行lcd.setCursor(0,0)lcd.print("LM35 = ");// 如下显示第二行lcd.setCursor(0,1)lcd.print((int)temp/10);lcd.print(".");lcd.print((int)temp%10);// 打印摄氏度lcd.print((char)223);lcd.print("C");delay(1000);
}

IIC/I2C 1602A

方法一:引入库LiquidCrystal_I2C.h

通过地址http://pan.baidu.com/s/1miJ9fio下载库文件
检测程序:http://pan.baidu.com/s/1pLlEKvp

将解压的库文件拷贝到IDE安装路径
在这里插入图片描述

通过IDE的左上角Sketch-import library导入
在这里插入图片描述

方式二

github地址:https://github.com/johnrickman/LiquidCrystal_I2C
下载库文件:LiquidCrystal_I2C-1.1.3.zip
Arduino IDE中选择:Sketch > Include library > Add .ZIP library添加完成后就可以使用了。

运行检测程序检测模块的默认起始地址

在这里插入图片描述
将上面程序拷贝到英文目录中编译执行
在这里插入图片描述
调出串口监视器,打印的0x27即为默认起始地址

简单示例

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line displayvoid setup()
{lcd.init();                      // initialize the lcd // Print a message to the LCD.lcd.backlight();lcd.print("Hello, world!");
}void loop()
{
}

温度显示在1602A

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>// #include <OneWire.h> //可以不引入,因为DallasTemperature.h中已经引入了OneWire.h
#include <DallasTemperature.h>#define ONE_WIRE_BUS A0               //1-wire数据总线连接在IO4
OneWire oneWire(ONE_WIRE_BUS);       //声明
DallasTemperature sensors(&oneWire); //声明LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line displayvoid setup()
{Serial.begin(115200);Serial.println("");sensors.begin(); //初始化总线sensors.setWaitForConversion(false); //设置为非阻塞模式lcd.init();                      // initialize the lcd // Print a message to the LCD.lcd.backlight();lcd.print("Hello, world!");
}unsigned long previousMillis = 0; //毫秒时间记录
const long interval = 1000;       //时间间隔void loop()
{//以下段落相当于每秒读取前次温度,并发起新一次温度转换unsigned long currentMillis = millis();         //读取当前时间if (currentMillis - previousMillis >= interval) //如果和前次时间大于等于时间间隔{previousMillis = currentMillis; //更新时间记录float tempC = sensors.getTempCByIndex(0); //获取索引号0的传感器摄氏温度数据if (tempC != DEVICE_DISCONNECTED_C)       //如果获取到的温度正常{Serial.print("\n当前温度是: ");Serial.print(tempC);Serial.println(" ℃");Serial.println(" ");String val = "temp:"+ String(tempC) + String("℃");lcd.setCursor(0,0);lcd.print("Hello, UNO world!");lcd.setCursor(0,1);//lcd.print(val);// lcd.print((int)tempC/10);// lcd.print(".");// lcd.print((int)tempC%10);lcd.print("temp:");lcd.print(tempC);// 打印摄氏度lcd.print((char)223);lcd.print("C");}sensors.requestTemperatures(); //发起新的温度转换}delay(500);Serial.print(".");
}
文章来源:https://blog.csdn.net/Blueeyedboy521/article/details/127291872
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/534873.html

相关文章

基于FPGA的VGA/LCD显示控制器设计(下)

今天给大侠带来基于FPGA的VGA/LCD显示控制器设计&#xff0c;由于篇幅较长&#xff0c;分三篇。今天带来第三篇&#xff0c;下篇&#xff0c;程序的仿真与测试以及总结&#xff0c;话不多说&#xff0c;上货。 之前也有图像处理以及VGA显示相关的文章&#xff0c;这里给个超链…

LCD12864读取GDRAM数据异常

LCD12864读取GDRAM数据异常 环境程序流程流程粗述读取数据函数流程细述 异常情况描述可疑点最后 环境 arduino IDEarduino unolcd4位通讯接法程序流程 流程粗述 1.写GDRAM地址&#xff0c;选择第10行第7列的字&#xff08;每字2字节&#xff09; 2.向GDRAM写入数据0x0A0C&…

C51单片机驱动LCD1602显示字符串

之前做了好多外设&#xff0c;都只是玩玩&#xff0c;并不曾记录一下&#xff0c;时间久了&#xff0c;竟也都忘记了&#xff0c;周末无事&#xff0c;重新写了一下LCD1602的驱动函数&#xff0c;给有需要的人做一个参考&#xff1a; 硬件电路&#xff1a; 其中&#xff0c;RS…

arduino串口监视器显示nan_arduino+dht11+lcd1602

有大佬可以帮我看一下吗? 我将arduino uno 和dht11还有lcd连接起来,但是lcd和串口监视器里面显示的温湿度值都是nan 这是我的代码 #include <DHT.h> #include <DHT_U.h>#include <LiquidCrystal.h>#define DHTPIN 8 #define DHTTYPE DHT11 DHT dht(DHTPIN,…

Linux 命令行 LCD唤醒,如何确定是否从Linux命令行打开LCD监视器

VESA DDC连接是一个I2C连接&#xff0c;可用于查询监视器的存在。 Linux暴露了I2C设备&#xff0c;用户程序可以直接与监视器通信&#xff0c;代码如http://jaffar.cs.msu.su/oleg/ddcci/ 请注意以下内容&#xff1a;Control 0xe1: /1/1 [SAM: Power control (0 - off/1 - on)]…

ChatGPT的回答是否可以被验证和验证准确性?

ChatGPT的回答可以通过一些方法进行验证&#xff0c;但验证其准确性是一个复杂的问题。以下是对ChatGPT回答验证和准确性验证的详细分析&#xff1a; 1. 基于事实的验证&#xff1a;对于涉及事实的问题&#xff0c;可以通过查阅可靠的来源或权威的知识库来验证ChatGPT的回答。…

(十一)CSharp-LINQ-LINQToXML(4)

一、XML 类 1、创建、保存、加载和显示 XML 文档 static void Main(string[] args){XDocument employees1 new XDocument(//创建 XML 文档new XElement("Employees",//创建根元素new XElement("Name", "Box Smith"),//创建元素new XElement(&qu…

开发之路,穷且益坚,不坠青云之志

引言 2023毕业季&#xff0c;距离笔者毕业已过2年有余。 互联网从业环境由盛转衰&#xff0c;互联网从业者数量剧增&#xff0c;市场竞争异常激烈&#xff0c;原本的利润空间被不断挤压&#xff0c;以至于很多开发者对互联网已经失去了信心与激情。 互联网的市场份额依旧是占…