极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 82769|回复: 30

基于Arduino的18B20+LCD12864温度显示

[复制链接]
发表于 2012-8-13 01:42:36 | 显示全部楼层 |阅读模式
本帖最后由 greenfort 于 2012-8-13 01:49 编辑

初学Arduino,制作的通过12864显示多个18B20温度的程序

接线
请参考本论坛中的18B20及LCD12864与Arduino接线,这里不再重复,只是强调一点,18B20的PIN1和PIN3要同时接地,否则会在返回若干值后出现一次错误值(85.00)不知道什么原因

鉴于12864的显示大小,程序最多接9个18B20传感器,多了显示不了

程序代码如下
  1. /*
  2. LCD  Arduino
  3. PIN1 = GND
  4. PIN2 = 5V
  5. RS(CS) = 8;
  6. RW(SID)= 9;
  7. EN(CLK) = 3;
  8. PIN15 PSB = GND;
  9. */
  10. #include <OneWire.h>
  11. #include <DallasTemperature.h>
  12. #include <stdlib.h>
  13. #define ONE_WIRE_BUS 2
  14. #include "LCD12864RSPI.h"
  15. #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

  16. OneWire oneWire(ONE_WIRE_BUS);
  17. DallasTemperature sensors(&oneWire);

  18. char str[4]; //定义温度值存储数组,4位,其中3位为数字,1位为小数点
  19. double temp =0; //定义中间变量,用于将获取的float型温度值转变为unsigned char数组
  20. unsigned char show[]={
  21.   0xB5,0xB1,0xC7,0xB0,0xBB,0xB7,0xBE,0xB3,0xCE,0xC2,0xB6,0xC8};//当前环境温度
  22. int numberOfDevices;
  23. void setup()
  24. {
  25.   Serial.begin(9600);
  26.   sensors.begin(); //传感器初始化
  27.   numberOfDevices = sensors.getDeviceCount();
  28.   LCDA.Initialise(); // 屏幕初始化
  29.   LCDA.DisplayString(0,0,show,AR_SIZE(show));//第一行第1格开始,显示文字“当前环境温度”
  30. }

  31. void loop()
  32. {
  33.   sensors.requestTemperatures(); //获取温度值
  34.   for(int i=0;i<numberOfDevices; i++)    //逐个获取传感器的温度
  35.   {
  36.     temp=sensors.getTempCByIndex(i); //使用索引序号获得摄氏度数值
  37.     dtostrf(temp,4,2,str);  //将获取的数值转换为字符型数组
  38.     if (i<=2)
  39.     {
  40.       LCDA.DisplayString(1,i*3,(unsigned char *)str,sizeof(str));
  41.     } //自第2行第1列开始显示温度值
  42.     else
  43.     {
  44.       if(i>2&&i<=5)
  45.       {
  46.       LCDA.DisplayString(2,(i-3)*3,(unsigned char *)str,sizeof(str));
  47.       }
  48.       else
  49.       {
  50.       LCDA.DisplayString(3,(i-6)*3,(unsigned char *)str,sizeof(str));  
  51.       }
  52.     }
  53.   }
  54. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-8-13 02:50:22 | 显示全部楼层
其实你可以考虑翻页显示。
回复 支持 反对

使用道具 举报

发表于 2012-8-13 09:10:05 | 显示全部楼层
是的,考虑一下下一级菜单显示。把你的接线图上传一下,谢谢!
回复 支持 反对

使用道具 举报

发表于 2012-8-13 09:19:59 | 显示全部楼层
嗯,可以个定时翻页,每个温度前加上中文名称,就更好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-13 09:43:29 | 显示全部楼层
本帖最后由 greenfort 于 2012-8-13 09:45 编辑
cnkids 发表于 2012-8-13 02:50
其实你可以考虑翻页显示。


有道理,抽空再改改,增进学习
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-13 09:44:16 | 显示全部楼层
Randy 发表于 2012-8-13 09:10
是的,考虑一下下一级菜单显示。把你的接线图上传一下,谢谢!

回头找个软件画画补上
回复 支持 反对

使用道具 举报

发表于 2012-8-13 09:49:45 | 显示全部楼层
greenfort 发表于 2012-8-13 09:44
回头找个软件画画补上

回复 支持 反对

使用道具 举报

发表于 2012-8-14 19:21:20 | 显示全部楼层
pin1 pin3同时接地?把你的接线图传上来看看吧,我做了很多18B20了,没这个问题哦
回复 支持 反对

使用道具 举报

发表于 2012-9-4 10:27:37 | 显示全部楼层
请教楼主怎么确认显示的温度对应哪个探头,还有如果要在温度超过设定值时让一端口输出控制(就是做个多点温控器)该怎么做?谢谢
回复 支持 反对

使用道具 举报

发表于 2012-9-4 15:54:06 | 显示全部楼层
18B20有对应唯一地址吧。根据这个地址可以判断。
回复 支持 反对

使用道具 举报

发表于 2013-3-31 10:25:52 | 显示全部楼层
楼主上个图呗!
回复 支持 反对

使用道具 举报

发表于 2013-4-29 19:27:01 | 显示全部楼层
好东西!+++++
回复 支持 反对

使用道具 举报

发表于 2013-5-6 21:04:53 | 显示全部楼层
请问楼主 LCDA.DisplayString 这个函数如何显示摄氏度这个字符呢? 不能直接显示数字吗?
回复 支持 反对

使用道具 举报

发表于 2013-5-10 12:03:29 | 显示全部楼层
greenfort 发表于 2012-8-13 09:44
回头找个软件画画补上

期待楼主回头找个软件画画补上
回复 支持 反对

使用道具 举报

发表于 2013-9-15 14:47:42 | 显示全部楼层
您好我编译的时候出现这样的情况是什么意思,能帮忙解释一下吗,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 02:03 , Processed in 0.042888 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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