10787浏览
查看: 10787|回复: 9

[讨论] 关于LCD12864显示问题

[复制链接]
本帖最后由 云水尧 于 2014-5-22 14:09 编辑

做了一个温度显示装置。
用LM35温度传感器检测温度,然后通过LCD12864显示出来。当温度>25时继电器吸合,LED灯亮,继电器断开。
问题:当继电器的端口接DigitalPin0时,继电器一直吸合,LCD显示正常。当继电器的端口接其他DigitalPin时,继电器可以正常工作,但是LCD会出现逐字显示的问题。请问这是怎么回事啊?
代码如下:
  1. #include <LCD12864RSPI.h>
  2. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
  3. unsigned long tepTimer;
  4. unsigned char tempTitle[] = {0xCE,0xC2,0xB6,0xC8};//温度
  5. unsigned char line11[] = ":";
  6. unsigned char tempHigh[] = {0xCE,0xC2,0xB6,0xC8,0xB9,0xFD,0xB8,0xDF};//温度过高
  7. unsigned char tempLow[] = {0xCE,0xC2,0xB6,0xC8,0xB9,0xFD,0xB5,0xCD};//温度过低
  8. char temp[4];
  9. int relay = 1; //此处端口为0时,LCD显示正常,但继电器不正常;端口为其他时,LCD逐字显示(不正常),继电器正常
  10. void setup(){
  11.   Serial.begin(9600);
  12.   pinMode(relay,OUTPUT);
  13.   LCDA.initDriverPin(2,7,10);
  14.   LCDA.Initialise();
  15.   delay(100);
  16. }
  17. void loop(){
  18.   int val;
  19.   double data;
  20.   val = analogRead(0);
  21.   data = (double)val * 5 / 10.24;
  22.   if(millis() - tepTimer > 2000){
  23.     tepTimer = millis();
  24.      
  25.     LCDA.CLEAR();
  26.     if(data>25){
  27.       digitalWrite(relay, HIGH);
  28.       LCDA.DisplayString(1,0,tempHigh,AR_SIZE(tempHigh));
  29.     }
  30.     else{
  31.       digitalWrite(relay, LOW);
  32.       LCDA.DisplayString(1,0,tempLow,AR_SIZE(tempLow));
  33.     }
  34.     LCDA.DisplayString(0,0,tempTitle,AR_SIZE(tempTitle));//
  35.     LCDA.DisplayString(0,2,line11,AR_SIZE(line11));
  36.     dtostrf(data,0,1,temp);
  37.     LCDA.DisplayString(0,3,(unsigned char*)temp,AR_SIZE(temp));
  38.   }
  39. }
复制代码

连接图如下:
关于LCD12864显示问题图1

Phoebe  高级技匠

发表于 2014-5-14 10:23:04

看看你的LCD12864和继电器有没有使用了一个口,导致了冲突,也有可能是供电问题
回复

使用道具 举报

Leotower  中级技师

发表于 2014-5-19 10:18:45

请问问题是否解决了?   如果用的是UNO,则Serial使用的是0和1, 继电器不能接在这两个pin上。
回复

使用道具 举报

云水尧  初级技师
 楼主|

发表于 2014-5-20 10:19:14

Leotower 发表于 2014-5-19 10:18
请问问题是否解决了?   如果用的是UNO,则Serial使用的是0和1, 继电器不能接在这两个pin上。 ...

恩,好像是这个问题,把Serial.begin删掉就好了,谢谢!!!
回复

使用道具 举报

云水尧  初级技师
 楼主|

发表于 2014-5-20 10:42:20

Leotower 发表于 2014-5-19 10:18
请问问题是否解决了?   如果用的是UNO,则Serial使用的是0和1, 继电器不能接在这两个pin上。 ...

不对啊,还是有问题诶。
我把“Serial.begin(9600);”删掉了,使得relay = 0(继电器接在PIN0)时, 继电器是正常工作了,但是代码中if(data>25)程序段中,digitalWrite是执行了,但是LCDA.DisplayString没有执行啊,不显示“温度过高”。当使得relay = 3(继电器接在PIN3)时,继电器工作也正常,if(data>25)程序段执行同样正常,但是LCD上逐字显示,能看到字是从左边一个一个出现的,这是怎么回事啊???
回复

使用道具 举报

Leotower  中级技师

发表于 2014-5-21 09:05:42

现象很有意思,建议将连线图提供一下, 使用lcd的库的链接提供一下。 估计和lcd库的实现有关。
回复

使用道具 举报

云水尧  初级技师
 楼主|

发表于 2014-5-22 14:10:41

Leotower 发表于 2014-5-21 09:05
现象很有意思,建议将连线图提供一下, 使用lcd的库的链接提供一下。 估计和lcd库的实现有关。 ...

连接图已将附上了
LCD用的库:http://www.dfrobot.com/image/data/DFR0091/LCD12864RSPI%20v1.0.zip
回复

使用道具 举报

Leotower  中级技师

发表于 2014-5-24 13:04:17

图画的不错:)  这个现象确实奇怪,总的来说是继电器在吸合状态则不太正常; 建议分别做以下尝试:
1、可能继电器有干扰, 给继电器单独供电尝试一下 或者 用9v电源给UNO供电。
2、下面的代码加上delay
      digitalWrite(relay, HIGH);
     delay(200);
      LCDA.DisplayString(1,0,tempHigh,AR_SIZE(tempHigh));

3、LCDA.initDriverPin(2,7,10);  更换为(8,10,12)
回复

使用道具 举报

云水尧  初级技师
 楼主|

发表于 2014-5-27 09:46:49

本帖最后由 云水尧 于 2014-5-27 09:49 编辑
Leotower 发表于 2014-5-24 13:04
图画的不错:)  这个现象确实奇怪,总的来说是继电器在吸合状态则不太正常; 建议分别做以下尝试:
1、可 ...

第一次画这种图就被夸奖了,谢谢你对我的鼓励:)!!!

下面是我做的一些改进:
1:继电器接在PIN0,LCD接在PIN2、7、10,增加了delay(200);,果然有了效果,继电器工作正常,LCD显示正常。但是由于延时过长,LCD闪的很厉害,所以我改成了delay(1);,结果同样可以,但LCD从下侧看仍有细微的闪烁,从正面看没有问题(不好意思哈,有点小强迫症:-)),这似乎没有办法,可能是处理器处理速度不够吧。这加了个delay就能执行“LCDA.DisplayString(1,0,tempHigh,AR_SIZE(tempHigh));”,这似乎不太科学啊???
后来我又将delay(200);加在了LCDA的后面digitalWrite(relay, LOW);LCDA.DisplayString(1,0,tempLow,AR_SIZE(tempLow)); delay(200);就出现了如下的画面。显示在了同一行上。我改成delay(1);后,温度过低几个字就不再显示了,一直只显示“温度:XX.X”。  


关于LCD12864显示问题图2

2:继电器接在PIN5(PIN1也试过),LCD接在PIN8、10、12,结果有点小失望,尝试了继电器用另一块UNO板单独供电,结果依旧是继电器工作正常,LCD显示不正常,逐字显示,如下图。不知道是不是处理器速度的关系。好神奇啊!

关于LCD12864显示问题图1


虽然仍有很多小问题让我感到困扰,但还是非常感谢Leotower耐心的为我解答,非常非常感谢:)!!!







回复

使用道具 举报

20060606  高级技匠

发表于 2020-8-24 05:38:27

是不是处理器速度太慢?试试u8gilb库
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail