lcd.setCursor
时间: 2024-04-28 15:19:16 浏览: 18
`lcd.setCursor()` 是一个 Arduino LCD 库的函数,用于设置 LCD 光标的位置。该函数接受两个参数,第一个参数为列数,第二个参数为行数。例如,`lcd.setCursor(0, 1)` 将把光标移动到第一行的第一列。
需要注意的是,行数和列数都是从 0 开始的。对于常见的 16x2 字符 LCD 屏幕,第一行为行数 0,第二行为行数 1,而列数从 0 到 15。因此,如果要将光标移动到第二行的第五列,可以使用 `lcd.setCursor(4, 1)`。
相关问题
#include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x20,20,4);//将 LCD 地址设置为 0x20,用于 20 个字符和 4 行显示 void setup() { Wire.setPins(4,5); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0);//设置起始位置 lcd.print(" Bilibili Channel "); lcd.setCursor(0, 1); lcd.print("-FreeRTOS on EPS32- "); lcd.setCursor(0, 2); lcd.print("Study Hard & Smart"); } void loop() { } 如何优化代码使lcd显示
要优化代码以使lcd显示,你可以考虑以下几点:
1. 减少lcd.print()函数的调用次数:每次调用lcd.print()都会向LCD发送数据,因此减少调用次数可以提高效率。你可以将要显示的内容存储在变量中,然后一次性调用lcd.print()函数。
2. 使用lcd.setCursor()函数设置光标位置:在每次调用lcd.print()之前,使用lcd.setCursor()函数设置光标位置。这样可以避免在每次调用lcd.print()时重复设置光标位置。
3. 消除重复的内容:如果你发现某些内容在循环中没有变化,可以将其移动到setup()函数中,在循环中只更新变化的内容。
4. 使用lcd.clear()函数清除LCD屏幕:如果你需要更新整个屏幕的内容,可以在循环开始时调用lcd.clear()函数清除屏幕,然后重新显示所有内容。
以下是一个优化后的代码示例:
```cpp
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x20,20,4);
String line1 = " Bilibili Channel ";
String line2 = "-FreeRTOS on EPS32- ";
String line3 = "Study Hard & Smart";
void setup() {
Wire.setPins(4,5);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
lcd.setCursor(0, 2);
lcd.print(line3);
}
void loop() {
// 更新需要变化的内容
// line1 = ...
// line2 = ...
// line3 = ...
// 清除屏幕并重新显示所有内容
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
lcd.setCursor(0, 2);
lcd.print(line3);
}
```
请根据你的需求更新`line1`、`line2`和`line3`的值,并在循环中更新这些变量的内容。然后在循环开始时调用lcd.clear()函数清除屏幕,并使用lcd.print()函数显示更新后的内容。
改进代码#include <SoftwareSerial.h> #include <TinyGPS.h> #include <LiquidCrystal.h> // 定义GPS模块的引脚 #define RXPin 4 #define TXPin 3 // 定义LCD12864的引脚 #define RS 8 #define EN 9 #define D4 4 #define D5 5 #define D6 6 #define D7 7 SoftwareSerial gpsSerial(RXPin, TXPin); TinyGPS gps; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); float lastLat = 0.0; float lastLng = 0.0; void setup() { gpsSerial.begin(9600); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("GPS Test"); } void loop() { while (gpsSerial.available()) { if (gps.encode(gpsSerial.read())) { displayInfo(); } } } void displayInfo() { if (gps.location.isValid()) { float lat = gps.location.lat(); float lng = gps.location.lng(); if (lat != lastLat || lng != lastLng) { lastLat = lat; lastLng = lng; lcd.setCursor(0, 0); lcd.print("Lat: "); lcd.print(lat, 8); lcd.setCursor(0, 1); lcd.print("Lng: "); lcd.print(lng, 8); } } else { lcd.setCursor(0, 0); lcd.print("GPS not located"); } }
这段代码主要是使用了SoftwareSerial库和TinyGPS库来读取GPS模块的数据,并且将经纬度信息显示在LCD12864屏幕上。不过,我注意到其中有几个地方可以改进:
1. 在setup()函数中,可以添加一行代码来设置GPS模块的波特率,以便与程序中的波特率匹配,这样可以确保正确解析GPS数据。
2. 在displayInfo()函数中,可以添加判断语句来检测GPS模块是否定位成功,如果没有定位成功,可以输出相应的提示信息。
3. 在lastLat和lastLng变量的定义中,可以将它们初始化为一个无效的数值,以便在第一次读取GPS数据时,可以正确更新屏幕上的经纬度信息。
改进后的代码如下:
```
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
#define RXPin 4
#define TXPin 3
#define RS 8
#define EN 9
#define D4 4
#define D5 5
#define D6 6
#define D7 7
SoftwareSerial gpsSerial(RXPin, TXPin);
TinyGPS gps;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
float lastLat = -999.0;
float lastLng = -999.0;
void setup() {
gpsSerial.begin(9600);
gpsSerial.println("$PMTK251,9600*17"); // 设置GPS模块的波特率为9600
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GPS Test");
}
void loop() {
while (gpsSerial.available()) {
if (gps.encode(gpsSerial.read())) {
displayInfo();
}
}
}
void displayInfo() {
if (gps.location.isValid()) {
float lat = gps.location.lat();
float lng = gps.location.lng();
if (lat != lastLat || lng != lastLng) {
lastLat = lat;
lastLng = lng;
lcd.setCursor(0, 0);
lcd.print("Lat: ");
lcd.print(lat, 8);
lcd.setCursor(0, 1);
lcd.print("Lng: ");
lcd.print(lng, 8);
}
} else {
lcd.setCursor(0, 0);
lcd.print("GPS not located");
lcd.setCursor(0, 1);
lcd.print("Waiting for signal");
}
}
```
希望这些改进能够使你的代码更加完善。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.png)
![ino](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)