标题: 温度报警器制作,附51单片机程序 仿真原理图等资料 [打印本页]

作者: XXXZZZ    时间: 2017-8-6 14:54
标题: 温度报警器制作,附51单片机程序 仿真原理图等资料
利用DS18B20温度传感器,检测到外界的温度,通过数码管显示出来,同时还可以设置最高值和最低值,当温度超过此范围,蜂鸣器报警。

实物图:


背面:


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)



仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


数字温度报警器说明书

一、    概述:
主要实现:实时温度测量及显示,超出温度范围声光报警,上下限温度可通过按键设定等功能。
本数字温度报警器是基于51单片机及温度传感器DS18B20来设计的,温度测量范围0到99.9摄氏度,精度为0.1摄氏度,可见测量温度的范围广,精度高的特点。可设置上下限报警温度,默认上限报警温度为38℃、默认下限报警温度为5℃(通过程序可以更改上下限值)。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。将下限报警值调为0时为关闭下限报警功能。

二、    使用说明:
1、    开机:打开电源,机器进入初始化状态,此时数码管显示 - - - -;片刻即开始显示当前温度。
2、    查看当前上下限温度范围:按下【S1】键(左边键),数码管闪烁显示Hxxx,H表示上限温度,再次按下【S1】键,数码管闪烁显示Lxxx, L表示下限温度。再按【S1】键时退出设置,数码管显示当前实时温度。
3、    重新设定上下限温度范围:按下【S1】键一次,数码管闪烁显示Hxxx时,此时是设定上限温度,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,此时是设定下限温度,数码管闪烁显示Lxxx时,按【S3】键加温度,【S2】键减温度。再按下【S1】键一次,设置成功并退出设置。
4、    报警:当检测到当前实时温度高于上限温度值,或者低于下限温度值,系统会自动发出报警,报警为红灯一直闪烁且蜂鸣器随着灯的频率响。除非重设上下限温度范围,否则报警一直持续。

单片机源程序如下:
  1. #include <AT89X52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char           //宏定义
  4. #define SET  P3_1                            //定义调整键
  5. #define DEC  P3_2                            //定义减少键
  6. #define ADD  P3_3                            //定义增加键
  7. #define BEEP P3_6                            //定义蜂鸣器
  8. #define ALAM P1_2                                //定义灯光报警
  9. #define DQ   P3_7                             //定义DS18B20总线I/O        
  10. bit shanshuo_st;                            //闪烁间隔标志
  11. bit beep_st;                                     //蜂鸣器间隔标志
  12. sbit DIAN = P0^5;                        //小数点
  13. uchar x=0;                                      //计数器
  14. signed char m;                                     //温度值全局变量
  15. uchar n;                                              //温度值全局变量
  16. uchar set_st=0;                             //状态标志
  17. signed char shangxian=38;                  //上限报警温度,默认值为38
  18. signed char xiaxian=5;                   //下限报警温度,默认值为38
  19. //uchar code  LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
  20. uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B};

  21. //============================================================================================
  22. //====================================DS18B20=================================================
  23. //============================================================================================
  24. /*****延时子程序*****/
  25. void Delay_DS18B20(int num)
  26. {
  27.   while(num--) ;
  28. }
  29. /*****初始化DS18B20*****/
  30. void Init_DS18B20(void)
  31. {
  32.   unsigned char x=0;
  33.   DQ = 1;         //DQ复位
  34.   Delay_DS18B20(8);    //稍做延时
  35.   DQ = 0;         //单片机将DQ拉低
  36.   Delay_DS18B20(80);   //精确延时,大于480us
  37.   DQ = 1;         //拉高总线
  38.   Delay_DS18B20(14);
  39.   x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  40.   Delay_DS18B20(20);
  41. }
  42. /*****读一个字节*****/
  43. unsigned char ReadOneChar(void)
  44. {
  45.   unsigned char i=0;
  46.   unsigned char dat = 0;
  47.   for (i=8;i>0;i--)
  48.   {
  49.     DQ = 0;     // 给脉冲信号
  50.     dat>>=1;
  51.     DQ = 1;     // 给脉冲信号
  52.     if(DQ)
  53.     dat|=0x80;
  54.     Delay_DS18B20(4);
  55.   }
  56.   return(dat);
  57. }
  58. /*****写一个字节*****/
  59. void WriteOneChar(unsigned char dat)
  60. {
  61.   unsigned char i=0;
  62.   for (i=8; i>0; i--)
  63.   {
  64.     DQ = 0;
  65.     DQ = dat&0x01;
  66.     Delay_DS18B20(5);
  67.     DQ = 1;
  68.     dat>>=1;
  69.   }
  70. }
  71. /*****读取温度*****/
  72. unsigned int ReadTemperature(void)
  73. {
  74.   unsigned char a=0;
  75.   unsigned char b=0;
  76.   unsigned int t=0;
  77.   float tt=0;
  78.   Init_DS18B20();
  79.   WriteOneChar(0xCC);  //跳过读序号列号的操作
  80.   WriteOneChar(0x44);  //启动温度转换
  81.   Init_DS18B20();
  82.   WriteOneChar(0xCC);  //跳过读序号列号的操作
  83.   WriteOneChar(0xBE);  //读取温度寄存器
  84.   a=ReadOneChar();     //读低8位
  85.   b=ReadOneChar();    //读高8位
  86.   t=b;                                   //高8位转移到t
  87.   t<<=8;                           //t数据左移8位
  88.   t=t|a;                           //将t和a按位或,得到一个16位的数
  89.   tt=t*0.0625;                   //将t乘以0.0625得到实际温度值(温度传感器设置12位精度,最小分辨率是0.0625)
  90.   t= tt*10+0.5;     //放大10倍(将小数点后一位显示出来)输出并四舍五入
  91.   return(t);                   //返回温度值

  92. ……………………

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

Keil代码与Proteus仿真文档下载:
温度传感器.7z (1.09 MB, 下载次数: 1196)

作者: 小223    时间: 2018-6-28 12:27
不错哦
作者: 1379310    时间: 2018-6-29 19:32
下载了自己打开显示器上也会出现51黑电子论坛的logo吗?
作者: admin    时间: 2018-6-29 21:50
1379310 发表于 2018-6-29 19:32
下载了自己打开显示器上也会出现51黑电子论坛的logo吗?

当然不会,那只是图片上面的水印啊
作者: ak5689998    时间: 2018-6-30 18:52
楼主你好~  我用了proteus仿真打开你的仿真的时候温度报警气没到设置的上限的时候老是发出滴滴的声音,是我的软件有问题吗??   还是我什么东西没有调试好啊??  萌新求个助~~感谢大佬

作者: 1379310    时间: 2018-6-30 20:04
admin 发表于 2018-6-29 21:50
当然不会,那只是图片上面的水印啊

谢谢你
作者: xsxs99    时间: 2018-7-5 18:12
楼主你好,想问一下原理图的封装都是哪些呢?感谢!
作者: ntfs32    时间: 2018-9-6 22:43
感谢分享
作者: 灭雷决88    时间: 2018-9-14 16:34
我有个问题!我在设计程序时候遇到和141错误代码!请各位帮我就这一个问题我写得uint   temperature   出现141
作者: 灭雷决88    时间: 2018-9-14 16:41
xsxs99 发表于 2018-7-5 18:12
楼主你好,想问一下原理图的封装都是哪些呢?感谢!

请问你懂单片机编程不!我现在遇到个难题希望a帮我就这一问题 uint  temperature结果出现了141错误不晓得咋改!请帮我问问
作者: wukelili    时间: 2018-9-17 16:17
有用的
作者: 1216805172    时间: 2018-9-21 13:38
太棒了!
作者: fallingrain    时间: 2018-10-17 19:27
good,辛苦
作者: iousky    时间: 2018-10-22 15:48
感谢分享
作者: 13228199539    时间: 2018-10-25 16:11
感谢楼主分享,很有用,资料非常齐全,很棒!!!
作者: 清酒梦话123    时间: 2018-11-21 14:32
谢谢楼主分享
作者: xiean2002    时间: 2018-11-26 10:42
十分不错,谢谢楼主分享
作者: 小霞子    时间: 2018-12-1 17:15
ak5689998 发表于 2018-6-30 18:52
楼主你好~  我用了proteus仿真打开你的仿真的时候温度报警气没到设置的上限的时候老是发出滴滴的声音,是我 ...

你好,请问能分享以下楼主的资料给我吗,我的等级还不能看

作者: xiaozhiTZM    时间: 2018-12-13 13:55
学习学习下
作者: xiaozhiTZM    时间: 2018-12-13 13:55
学习了  很好的资料  谢谢楼主了
作者: newader    时间: 2018-12-16 14:41
谢谢楼主分享,赞一个
作者: 梦影心辰    时间: 2018-12-16 21:19
非常感谢
作者: zhangchenghao    时间: 2019-2-21 10:12
很棒很给力
作者: zhangchenghao    时间: 2019-2-21 10:14
很棒很给力,牛逼
作者: 111··22@ddf    时间: 2019-2-27 15:29
有Word形式程序吗
作者: Android大神    时间: 2019-5-21 16:24
感谢大神
作者: 1新手    时间: 2019-6-4 18:54
想问一下楼主和各位,上面的dat<<=1的作用是什么呀,没懂,麻烦各位解答一下

作者: zhao12345655    时间: 2019-6-24 09:39
很给力能发一下教程就更加完美
作者: ddh1998    时间: 2019-7-6 10:16
很棒棒的
作者: ddh1998    时间: 2019-7-6 12:28
ntfs32 发表于 2018-9-6 22:43
感谢分享

非常棒棒哟
作者: 周天飞    时间: 2019-7-14 16:13
很棒,蟹蟹楼主
作者: geyujiuban    时间: 2019-10-31 17:01
给力啊
作者: hanxuefeng    时间: 2019-11-3 15:40
想问一下这里电阻是多大的
作者: hanxuefeng    时间: 2019-11-3 15:48
想问一下楼主,这里面的电阻都有多大的,图片看不清
还有原理图封装都是哪些
作者: 小仙帝    时间: 2019-11-20 18:06
请问可以给一下仿真的程序吗
作者: 前来求药    时间: 2019-11-23 12:51
有元器件 封装库吗

作者: 郑泽旭    时间: 2019-12-2 13:42
设计很完美啊!
作者: 黑晨    时间: 2019-12-21 11:45
感谢楼主分享,十分给力,很有用处
作者: lhy0315cn    时间: 2019-12-30 20:22
感谢楼主的无私奉献,么么哒
作者: lhy0315cn    时间: 2019-12-30 20:23
感谢楼主无私奉献
作者: shenzhen123    时间: 2020-1-3 14:49
感谢感谢
作者: 2450768115    时间: 2020-1-8 13:50
楼主,有汇编语言版的吗

作者: lgjkk    时间: 2020-1-23 10:00
谢谢分享
作者: 128h    时间: 2020-3-2 15:17
很实用,挺喜欢这个设计
作者: jlkml;n    时间: 2020-3-13 09:52
为啥我下载了不知道在哪
作者: wudi540530058    时间: 2020-3-27 09:32
一直想找个数码管多级菜单的处理框架。先下载看看哈
作者: harryup    时间: 2020-5-5 07:55
十分感谢呀
作者: 1295621580wd    时间: 2020-5-27 09:50
没有PCB么
作者: 270992941    时间: 2020-6-5 09:36
好用吗
作者: 1565868814    时间: 2020-6-5 14:50
非常有用!
作者: fanfanfna123    时间: 2020-6-10 14:46
真的好厉害呢
作者: 街边    时间: 2020-6-11 13:06
果然,技术员的操作就是nb
作者: mujingfan    时间: 2020-6-19 01:26
真的好
作者: XYB1995    时间: 2020-6-19 08:35
下载来学习,谢谢分享
作者: 许胤    时间: 2020-6-19 21:32
怎么没有pcb文件只有图片
作者: LLQ2723    时间: 2020-11-8 20:24
想问一下,焊洞洞板的话,直接按原理图焊,没有问题吧
作者: LLQ2723    时间: 2020-11-8 20:25
焊板直接按原理图没问题吗
作者: 编程苏乞儿    时间: 2021-6-8 19:33
PNP DEVICE和PNP ASIMMDLS的区别有哪位大佬知道吗

作者: gxzqh    时间: 2021-6-9 09:37
现在PCB打样很便宜了,时间也就2天
作者: gxzqh    时间: 2021-6-9 09:42
111··22@ddf 发表于 2019-2-27 15:29
有Word形式程序吗

c程序要特定格式,用WPS打开就可以了
作者: CD724    时间: 2021-6-24 16:14
蜂鸣器怎么加
作者: CD724    时间: 2021-6-24 16:15
蜂鸣器在哪加 仿真图里面没看见蜂鸣器

作者: 猫猫想你    时间: 2021-11-1 20:05
1379310 发表于 2018-6-29 19:32
下载了自己打开显示器上也会出现51黑电子论坛的logo吗?

不会啊亲
作者: 隐楼    时间: 2021-11-16 08:40
能用德飞莱开发板吗

作者: rkdz110    时间: 2021-12-3 16:13
蜂鸣器需要并个1K--10K电阻,Q5接个4.7K下拉电阻
作者: houjue    时间: 2022-4-4 09:41
很不错的学习资料,谢谢分享了!
作者: 最帅的孩子    时间: 2024-12-24 08:58
太棒了吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1