极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 35405|回复: 6

求助!LCD1602显示出现乱码

[复制链接]
发表于 2014-11-24 11:40:59 | 显示全部楼层 |阅读模式
先上程序

#include <LiquidCrystal.h>
#include <dht11.h>
LiquidCrystal lcd(12, 11,6, 5, 4, 3);
dht11 DHT11;
int IN1=13;
int IN2=2;
int speedpin=10;
const int TrigPin = 8;
const int EchoPin = 7;
int buzzer=A1;
int sum=0,i;
float cm;
int q;
float temperature = 0; //设置temperature为浮点变量
#define DHT11PIN 9
void setup()
{
pinMode(IN1,OUTPUT);//定义该接口为输出接口
pinMode(IN2,OUTPUT);
pinMode(speedpin,OUTPUT);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
pinMode(buzzer,OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT11LIB_VERSION);
lcd.begin(16, 2);
lcd.clear();
delay(1000);
}

void loop()
{
lcd.clear();
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数

int val;
val=analogRead(0);
lcd.setCursor(0, 1) ;
lcd.print("Gas:")+ lcd.print(val);
lcd.setCursor(0, 0); //设置光标位置为第1行第一个位置
lcd.print((float)DHT11.humidity, 2); //显示温度整数位
lcd.print("% "); //显示小数点
lcd.print( (float)DHT11.temperature-2, 2); //显示温度小数点后一位
lcd.print("oC"); //显示o符号
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor:OK ");
Serial.print("Humidity : ");
Serial.println((float)DHT11.humidity, 2);
Serial.println(" % ");
Serial.print("Temperature : ");
Serial.println((float)DHT11.temperature-2, 2);
Serial.println(" oC ");
for(i=9;i>0;i--)
{
sum+=cm;
}
if(sum>500)
{
lcd.setCursor(8, 1);
lcd.print("health");
}
else
{
lcd.setCursor(8, 1);
lcd.print("unhealth");
for(i=0;i<80;i++)
{
digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);
delay(1);
}
}
}

我要显示温湿度、空气质量和超声波测距。但是lcd在初始化后就显示乱码了??是什么原因?请指出并修改下。。如果我先输出其中两个比如温湿度、空气质量,那么显示正常,再将超声波插入单片机,显示也正常;但是如果三个一起接入单片机就会在初始化后就显示乱码。
什么情况?求指导!





回复

使用道具 举报

发表于 2014-11-24 12:18:26 | 显示全部楼层
就是说你的问题是:接入少量设备的时候工作正常,但是同时进入几个设备的时候 LCD就不正常了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-24 19:40:08 | 显示全部楼层
本帖最后由 初夏的风 于 2014-11-24 19:41 编辑
zoologist 发表于 2014-11-24 12:18
就是说你的问题是:接入少量设备的时候工作正常,但是同时进入几个设备的时候 LCD就不正常了?


是的。。。 就是这样奇怪
你能帮我看看是不是程序的问题?
回复 支持 反对

使用道具 举报

发表于 2014-11-25 08:26:06 | 显示全部楼层
看了一下你的程序,没发现有什么明显的错误。建议如下:

1.确定当全部接入时,是否是void setup() 执行之后就出现问题。建议删除void loop() 的内容看看结果。如果确定还有问题,很可能是硬件有问题。

2.所有的传感器读取值的地方,你都写成最大的常数值看看是否还有乱码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-25 19:31:40 | 显示全部楼层
zoologist 发表于 2014-11-25 08:26
看了一下你的程序,没发现有什么明显的错误。建议如下:

1.确定当全部接入时,是否是void setup() 执行之 ...

谢谢了  现在已经可以了
回复 支持 反对

使用道具 举报

发表于 2014-11-26 08:17:06 | 显示全部楼层
初夏的风 发表于 2014-11-25 19:31
谢谢了  现在已经可以了

最后发现是啥问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-30 10:28:00 | 显示全部楼层
zoologist 发表于 2014-11-26 08:17
最后发现是啥问题?

输出顺序。  将lcd.setCursor(0, 1) 和(0,0)对换下就好了。我程序是闲输出显示在(0, 1)第二行,再输出显示第一行,,因此乱码了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 17:45 , Processed in 0.037510 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表