找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5901|回复: 13
收起左侧

单片机多路DS18B20测温报警proteus仿真及程序

  [复制链接]
ID:137190 发表于 2016-9-25 13:53 | 显示全部楼层 |阅读模式
用51单片机实现的多路ds18b20测试温度并且可以报警,下面是仿真原理图:

0.png
所有资料下载:
fireware_slave.zip (85.25 KB, 下载次数: 228)


部分源程序预览:
  1. #include <main.h>
  2. #include <18b20.h>
  3. #include <LCD.h>
  4. //#include <485.h>
  5. sbit warning=P3^5;
  6. sbit greenled=P3^6;//485 收发控制
  7. //uchar flag1;            // sign of the result positive or negative
  8. uchar j;
  9. int temper[4];
  10. uchar code str4_sht11[]=" max:       min:    ";
  11. sbit k1=P3^0;//set
  12. sbit k2=P3^1;//+
  13. sbit k3=P3^2;//-
  14. sbit sound=P1^7;
  15. char max=40;
  16. char min=10;
  17. uchar change_flag;


  18. uchar flag;

  19. void delay(uint count)      //delay
  20. {
  21.   uint i;
  22.   while(count)
  23.   {
  24.     i=200;
  25.     while(i>0)
  26.     i--;
  27.     count--;
  28.   }
  29. }

  30. void serial_int()
  31. {
  32. TMOD=0X01;//t1工作在方式2
  33. TH0=0xF0;//2400BIT/S
  34. TL0=0x0F;
  35. TR0=1;//打开计数器开始计数
  36. ET0=0;
  37. //EA=1;
  38. //ES=1;
  39. }

  40. void timer_isr() interrupt 1
  41. {
  42.     TH0=0xF0;
  43.     TL0=0x0F;
  44.         sound=~sound;
  45. }

  46. void key1()
  47. {
  48.         if(k1==0)
  49.     {
  50.                 change_flag++;
  51.         if(change_flag>2)
  52.         change_flag=0;
  53.     }
  54. while(k1==0);
  55. }

  56. void key2()
  57. {
  58.         if(k2==0)
  59.     {
  60.             if(change_flag==1)
  61.          max++;
  62.                 if(change_flag==2)
  63.          min++;
  64.     }
  65. while(k2==0);
  66. }

  67. void key3()
  68. {
  69.         if(k3==0)
  70.     {
  71.        if(change_flag==1)
  72.          max--;
  73.        if(change_flag==2)
  74.          min--;
  75.     }
  76. while(k3==0);
  77. }

  78. void key()//按钮
  79. {
  80.     key2();
  81.         key1();
  82.         key3();
  83. }
  84. void main()
  85. {
  86.    uchar i,a=1,b=1;
  87. //   uchar mm;
  88. //  uchar nn;
  89.    warning=0;
  90.    
  91.    serial_int();
  92.    greenled=1;
  93.    lcd_init();
  94.    for(i=0;i<4;i++)
  95.    {
  96.       tmpchange(i);
  97.       temper[i]=tmp(i);
  98.     }
  99.     //j=3;
  100.    display_1602();
  101.   while(1)
  102.   {
  103.          //DS=P1;
  104.         



  105.         if(change_flag==0)
  106.                 {        if(a==1)
  107.             {   b=1;
  108.                 a=0;
  109.                     write_lcdcom(0x01); //显示清屏       
  110.                                 display_1602();
  111.                         }
  112.                 tmpchange(j);
  113.                 for(i=0;i<100;i++)
  114.                         {
  115.                        key();
  116.                            temper[j]=tmp(j);
  117.                    lcd_printf(j,temper[j],0xcd);//显示        
  118.                  }        
  119.                   j++;
  120.                   if(j>3)
  121.                   j=0;
  122.        
  123.                   
  124.                           if(((temper[j]>max)||(temper[j]<min))&&(temper[j]<850))
  125.                  // if(((temper[j]/10>max)||(temper[j]/10<min)))
  126.                                  {
  127.                                   warning=1;
  128.                                         greenled=0;
  129. //                                        nn=0;
  130.                                         EA=1;
  131.                      }
  132.                           else
  133.                       {
  134.                          EA=0;                       
  135.                                         warning=0;
  136.                                     greenled=1;
  137.                                    }
  138.                      }
  139.                  else
  140.           {     key();
  141.                            if(b==1)
  142.                                 {   
  143.                                         a=1;
  144.                     b=0;
  145.                         write_lcdcom(0x01); //显示清屏
  146.                     write_lcdcom(0x80);//第一行lcd显示地址
  147.                                     for(i=0;i<32;i++)
  148.                                         {
  149.                                           write_lcddate(str4_sht11[i]);//显示table1中的字符
  150.                                         }
  151.                                 }
  152.                 else
  153.                                     lcd_set(max,min);
  154.                        
  155.                   }

  156.   }               
  157. }
复制代码



回复

使用道具 举报

ID:77498 发表于 2017-5-3 19:23 | 显示全部楼层
没有黑色钱下载
回复

使用道具 举报

ID:205862 发表于 2017-5-30 10:50 | 显示全部楼层
非常非常感谢
回复

使用道具 举报

ID:89286 发表于 2017-5-30 22:49 | 显示全部楼层
thanks for sharing
回复

使用道具 举报

ID:136615 发表于 2017-6-9 18:48 | 显示全部楼层
这个不错呀,谢谢分享
回复

使用道具 举报

ID:136615 发表于 2017-6-9 18:49 | 显示全部楼层
拿来学习学习
回复

使用道具 举报

ID:159139 发表于 2017-6-20 15:38 来自手机 | 显示全部楼层
下载了,谢谢分享。
回复

使用道具 举报

ID:212441 发表于 2017-6-21 09:23 | 显示全部楼层
感谢楼主,课设有希望了。  )))
回复

使用道具 举报

ID:214324 发表于 2018-6-24 11:27 | 显示全部楼层
非常感谢楼主分享 码起来看
回复

使用道具 举报

ID:457634 发表于 2019-1-6 22:43 | 显示全部楼层
非常感谢楼主的无私奉献,下载下来学习学习。
回复

使用道具 举报

ID:106422 发表于 2019-1-8 09:50 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:458411 发表于 2019-3-22 16:06 | 显示全部楼层
正好需要,学习了
回复

使用道具 举报

ID:272852 发表于 2019-4-2 13:00 | 显示全部楼层
本帖最后由 erwin095 于 2019-4-2 13:22 编辑

还再研究中

回复

使用道具 举报

ID:678199 发表于 2020-4-4 13:38 | 显示全部楼层
为啥编译时出错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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