找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6366|回复: 7
收起左侧

基于DS18B20温感和单片机 实现热水器功能

  [复制链接]
ID:202986 发表于 2018-1-31 16:55 | 显示全部楼层 |阅读模式
       这个温度计使用的单片机是STC89C2051,测量范围-55到+125度,显示精度为0.1度,DS18B20数据脚P0.4 ,采用器件默认的12位转化,显示采用4位LED共阳显示测温值,P2口为段码输入,P0~P3为位选,继电器接P1.1,蜂鸣器接P1.0,由于时间的关系,我就没有接继电器和蜂鸣器,用两个LED灯来代替,效果也是一样的。引脚也可以自己定义,下面是制作好实物图,由于我用杜邦线没有焊接,因为这样还可以玩其他小作品,请见谅,电路原理比较简单,这里就不给出,百度上一大推。        我程序设置的是  低于 等于 12° 的时候  继电器打开  开始加热功能   高于等于 13° 的时候 关闭继电器    蜂鸣器 响起 。      
请看视频。


制作出来的实物图:
P80131-163858.jpg

单片机源程序如下:
  1. /**************************************************************************************
  2. *                              DS18B20温度传感器实验                                                                                                  *
  3. 实现现象:        具体接线操作请看视频。
  4.                         下载程序后,在温度传感器接口处,按照丝印方向插好温度传感器,数码管就会显示
  5.                         检测的温度值,
  6. 注意事项:                                                                                                                                                                  
  7. ***************************************************************************************/

  8. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  9. #include"temp.h"       

  10. typedef unsigned int u16;          //对数据类型进行声明定义
  11. typedef unsigned char u8;

  12. sbit LSA=P0^0;
  13. sbit LSB=P0^1;
  14. sbit LSC=P0^2;
  15. sbit LSD=P0^3;

  16. sbit led=P1^0;
  17. sbit led1=P1^1;
  18. long zhi=0;
  19. char num=0;
  20. u8 DisplayData[4];
  21. u8 code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  22. /*******************************************************************************
  23. * 函 数 名         : delay
  24. * 函数功能                   : 延时函数,i=1时,大约延时10us
  25. *******************************************************************************/
  26. void delay(u16 i)
  27. {
  28.         while(i--);       
  29. }


  30. /*******************************************************************************
  31. * 函 数 名         : datapros()
  32. * 函数功能                   : 温度读取处理转换函数
  33. * 输    入         : temp
  34. * 输    出         : 无
  35. *******************************************************************************/

  36. void datapros(int temp)          
  37. {
  38.            float tp;  
  39.         if(temp< 0)                                //当温度值为负数
  40.           {
  41.                 DisplayData[0] = 0xBF;           //   -
  42.                 //因为读取的温度是实际温度的补码,所以减1,再取反求出原码
  43.                 temp=temp-1;
  44.                 temp=~temp;
  45.                 tp=temp;
  46.                 temp=tp*0.0625*100+0.5;       
  47.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  48.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  49.                 //算加上0.5,还是在小数点后面。
  50.     zhi=temp;
  51.           }
  52.         else
  53.           {                       
  54.                 DisplayData[0] = 0xff;
  55.                 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  56.                 //如果温度是正的那么,那么正数的原码就是补码它本身
  57.                 temp=tp*0.0625*100+0.5;       
  58.                 //留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
  59.                 //后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
  60.                 //算加上0.5,还是在小数点后面。
  61.           zhi=temp;
  62.                 }

  63.         DisplayData[1] = smgduan[temp % 10000 / 1000];
  64.         DisplayData[2] = smgduan[temp % 1000 / 100] & 0x7F;
  65.         DisplayData[3] = smgduan[temp % 100 / 10];

  66. }


  67. /*******************************************************************************
  68. * 函数名         :DigDisplay()
  69. * 函数功能                 :数码管显示函数
  70. * 输入           : 无
  71. * 输出                  : 无
  72. *******************************************************************************/
  73. void DigDisplay()
  74. {
  75.         u8 i=0;
  76.         for(i=0;i<4;i++)
  77.         {
  78.         switch(i)         //位选,选择点亮的数码管,
  79.                 {
  80.                         case(0):
  81.                                 LSA=0;LSD=1;P2=DisplayData[i];delay(100); break;//显示第0位
  82.                         case(1):
  83.                                 LSA=1;LSB=0;P2=DisplayData[i];delay(100); break;//显示第1位
  84.                         case(2):
  85.                                 LSB=1;LSC=0;P2=DisplayData[i];delay(100); break;//显示第2位
  86.                         case(3):
  87.                                 LSC=1;LSD=0;P2=DisplayData[i];delay(100);break;//显示第3位
  88.                          }
  89.                 P2=0xff;
  90.                  }
  91.                 }               
  92. /*******************************************************************************
  93. * 函 数 名       : main
  94. * 函数功能                 : 主函数
  95. * 输    入       : 无
  96. * 输    出             : 无
  97. *******************************************************************************/
  98. void main()
  99. {       
  100.         led=1;
  101.         led1=1;
  102.         LSA=1;
  103.         LSB=1;
  104.         LSD=1;
  105.         LSC=1;
  106.         while(1)
  107.         {
  108.                 datapros(Ds18b20ReadTemp());         //数据处理函数
  109. ……………………

  110. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.jpg 0.png

所有资料51hei提供下载:
手册及课件.rar (1.21 MB, 下载次数: 72)

评分

参与人数 2黑币 +108 收起 理由
深蓝远景 + 8 共享资料的黑币奖励!
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:294530 发表于 2018-4-10 15:07 | 显示全部楼层
小白黑币不够,楼主可以给我发邮件吗吗?994121863@qq.com
谢谢了
回复

使用道具 举报

ID:314339 发表于 2018-4-24 08:58 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:229821 发表于 2019-3-26 21:08 | 显示全部楼层
谢谢楼主的分享。刚好这几天在研究这个。弄了几天都没有弄出来。。。。
回复

使用道具 举报

ID:428407 发表于 2019-3-27 19:30 | 显示全部楼层
感谢楼主分享,真的不错
回复

使用道具 举报

ID:848824 发表于 2021-1-11 23:17 | 显示全部楼层
显示屏怎么连接啊,没图啊。
回复

使用道具 举报

ID:336670 发表于 2022-2-13 20:48 | 显示全部楼层
楼主,看你实物连接没用138译码器,但是你程序上感觉有用到呢
回复

使用道具 举报

ID:81441 发表于 2023-4-5 08:26 | 显示全部楼层
请问单片机STC89C2051是型号吗?还是STC89C52?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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