找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于51单片机的温度报警系统设计

查看数: 4014 | 评论数: 7 | 收藏 10
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-3-18 10:19

正文摘要:

  设计中有很多不完善的地方,欢迎各位大佬指正。      演示视频:https://www.bilibili.com/video/BV1CS4y1u7s6?share_source=copy_web 利用单片机、DS18B20温度传感器、数码管、按 ...

回复

ID:992677 发表于 2022-12-9 17:07
大佬,delay的代码没有啊
ID:941265 发表于 2022-3-21 19:11
好资料,51黑有你更精彩!!!
ID:161164 发表于 2022-3-19 15:17
Lxy18 发表于 2022-3-19 14:59
十几个ms,不影响数码管显示,目前没有其他好方法,放在主函数中一直刷会被定时器打断,测温读数乱码。

DS18B20的初始化和读写可以分9步来完成
每步只耗600~700us
步与步之间可以干其它事情


  1. typedef         unsigned char        u8;  //0 to 255
  2. typedef         unsigned int        u16;  //0 to 65535

  3. u16 Ds18b20ReadTemp()//放在while(1)中呼叫
  4. {
  5.     static u8 step = 0, tml = 0, tmh = 0;
  6.     u16 temp = 0;
  7.     if(!Delayms_Ds18b20)
  8.     {
  9.         TMR_x10 = 1;//Delayms_Ds18b20每1ms减1
  10.         Delayms_Ds18b20 = 2;//if(Delayms_Ds18b20)Delayms_Ds18b20--;<<放到1ms中断中
  11.         switch(step)
  12.         {
  13.                                         case 0:Ds18b20Init();break;
  14.                                         case 1:Ds18b20WriteByte(0xcc);break;
  15.                                         case 2:Ds18b20WriteByte(0x44);break;
  16.                                         case 3:Ds18b20Init();break;
  17.                                         case 4:Ds18b20WriteByte(0xcc);break;
  18.                                         case 5:Ds18b20WriteByte(0xbe);break;
  19.                                         case 6:tml = Ds18b20ReadByte();break;
  20.                                         case 7:tmh = Ds18b20ReadByte();break;
  21.                                         case 8:
  22.                                                         temp = tmh;
  23.                                                         temp <<= 8;
  24.                                                         temp |= tml;
  25.                                                         tml = 0;
  26.                                                         tmh = 0;
  27.                                                         break;
  28.                                         default:
  29.                                                         Delayms_Ds18b20 = 25;
  30.                                                         TMR_x10 = 0;//Delayms_Ds18b20每10ms减1
  31.                                                         break;
  32.         }
  33.         step = ++step % 10;
  34.     }
  35.     return temp;
  36. }
复制代码
ID:856329 发表于 2022-3-19 14:59
lkc8210 发表于 2022-3-19 14:31
在定时中断中读温度不太好吧?
这里起码耗掉几个ms吧?

十几个ms,不影响数码管显示,目前没有其他好方法,放在主函数中一直刷会被定时器打断,测温读数乱码。
ID:161164 发表于 2022-3-19 14:31
在定时中断中读温度不太好吧?
这里起码耗掉几个ms吧?
ID:1002955 发表于 2022-3-19 07:43
为啥我的只能用扬声器发声http://www.51hei.com/bbs/dpj-218190-1.html
ID:262 发表于 2022-3-19 04:16
好资料,51黑有你更精彩!!!

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

Powered by 单片机教程网

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