ArduinoUNO实战

您所在的位置:网站首页 arduino实战入门手册 ArduinoUNO实战

ArduinoUNO实战

2024-05-30 20:12| 来源: 网络整理| 查看: 265

目录 目标理论学习实物图技术参数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个字符。 实物图

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

技术参数

在这里插入图片描述

LCD1602 正面

在这里插入图片描述

VSS:接地VDD:正5VVO:对比度(2.2K-4.4K电阻)R/W:高电平是read,低电平是writeA: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 #include // 定义引脚命名 #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 #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Hello, world!"); } void loop() { } 温度显示在1602A #include #include // #include //可以不引入,因为DallasTemperature.h中已经引入了OneWire.h #include #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 display void 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("."); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3