找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1989|回复: 2
打印 上一主题 下一主题
收起左侧

单片机温度上下限监控报警程序

[复制链接]
跳转到指定楼层
楼主
ID:535889 发表于 2019-5-24 00:15 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>         //包含头文件
  3. #define uchar unsigned char
  4. #define uint unsigned int   //宏定义
  5. #include "eeprom52.h"
  6. ////////////////////
  7. sbit dj=P1^0;
  8. sbit dq=P1^1;
  9. sbit DQ=P1^6;
  10. sbit bj=P1^7;
  11. //////////按键接口/////////////////////////////////
  12. sbit key1=P3^5;//
  13. sbit key2=P3^6;//
  14. sbit key3=P3^7;//
  15. //////////////////////////////////////////////////////
  16. sbit w1=P2^4;
  17. sbit w2=P2^5;
  18. sbit w3=P2^6;
  19. sbit w4=P2^7;        //
  20. /////共阴数码管段选//////////////////////////////////////////////
  21. uchar table[22]=
  22. {0x3F,0x06,0x5B,0x4F,0x66,
  23. 0x6D,0x7D,0x07,0x7F,0x6F,
  24. 0x77,0x7C,0x39,0x5E,0x79,0x71,
  25. 0x40,0x38,0x76,0x00,0xff,0x37};//'-',
  26. uint wen_du;                                                  
  27. uint shang,xia; //
  28. uchar dang;//
  29. uchar flag;
  30. uchar d1,d2,d3;//
  31. uchar m;
  32. uchar js;

  33. /******************把数据保存到单片机内部eeprom中******************/
  34. void write_eeprom()
  35. {
  36.         SectorErase(0x2000);               
  37.         byte_write(0x2000, shang);      
  38.         byte_write(0x2001, xia);
  39.         byte_write(0x2060, a_a);
  40. }

  41. /******************把数据从单片机内部eeprom中读出来*****************/
  42. void read_eeprom()
  43. {
  44.         shang   = byte_read(0x2000);               
  45.         xia = byte_read(0x2001);                        
  46.         a_a      = byte_read(0x2060);                 
  47. }

  48. /**************开机自检eeprom初始化*****************/
  49. void init_eeprom()
  50. {
  51.         read_eeprom();               
  52.         if(a_a != 1)               
  53.         {
  54.                 shang   = 30;
  55.                 xia = 20;               
  56.                 a_a = 1;               
  57.                 write_eeprom();         
  58.         }      
  59. }

  60. void delay(uint ms)                //延时函数,大约延时1ms
  61. {
  62.         uchar x;
  63.         for(ms;ms>0;ms--)
  64.                 for(x=121;x>0;x--);
  65. }
  66. /***********ds18b20延迟子函数(晶振12MHz )*******/
  67. void delay_18B20(uint i)
  68. {
  69.         while(i--);
  70. }
  71. /**********ds18b20初始化函数**********************/
  72. void Init_DS18B20()
  73. {
  74.          uchar x=0;
  75.          DQ=1;         
  76.          delay_18B20(8);  
  77.          DQ=0;         
  78.          delay_18B20(80);
  79.          DQ=1;         
  80.          delay_18B20(14);
  81.          x=DQ;            
  82.          delay_18B20(20);
  83. }
  84. /***********ds18b20读一个字节**************/  
  85. uchar ReadOneChar()
  86. {
  87.         uchar i=0;
  88.         uchar dat=0;
  89.         for (i=8;i>0;i--)
  90.          {
  91.                   DQ=0; //
  92.                   dat>>=1;
  93.                   DQ=1; //
  94.                   if(DQ)
  95.                   dat|=0x80;
  96.                   delay_18B20(4);
  97.          }
  98.         return(dat);
  99. }
  100. /*************ds18b20写一个字节****************/  
  101. void WriteOneChar(uchar dat)
  102. {
  103.         uchar i=0;
  104.         for (i=8;i>0;i--)
  105.         {
  106.                   DQ=0;
  107.                 DQ=dat&0x01;
  108.             delay_18B20(5);
  109.                 DQ=1;
  110.             dat>>=1;
  111.         }
  112. }
  113. /**************读取ds18b20当前温度************/
  114. void ReadTemperature()
  115. {
  116.         uchar a=0;
  117.         uchar b=0;
  118.         uchar t=0;
  119.         Init_DS18B20();
  120.         WriteOneChar(0xCC);           
  121.         WriteOneChar(0x44);        
  122.         delay_18B20(100);      
  123.         Init_DS18B20();
  124.         WriteOneChar(0xCC);        
  125.         WriteOneChar(0xBE);        
  126.         delay_18B20(100);
  127.         a=ReadOneChar();           
  128.         b=ReadOneChar();                  
  129.         wen_du=((b*256+a)>>4);   
  130. }

  131. void zi_keyscan()
  132. {
  133.         if(key1==0)                                       
  134.         {
  135.                 delay(80);                                       
  136.                 if(key1==0)
  137.                 {
  138.                         flag=1;                                 
  139.                         while(key1==0);
  140.                 }
  141.         }
  142.         while(flag==1)                                               
  143.         {
  144.                 d1=18;d2=shang/10;d3=shang%10;         
  145.                 if(key1==0)                                                
  146.                 {
  147.                         delay(80);                                          
  148.                         if(key1==0)
  149.                         {
  150.                                 flag=2;                          
  151.                                 while(key1==0);
  152.                         }
  153.                 }
  154.                 if(key2==0)                              
  155.                 {
  156.                         delay(80);                                       
  157.                         if(key2==0)                                         
  158.                         {
  159.                                 shang+=1;                       
  160.                                 if(shang>=100)shang=100;  
  161.                                 while(key2==0);
  162.                         }
  163.                 }
  164.                 if(key3==0)                                                  
  165.                 {
  166.                         delay(80);                                       
  167.                         if(key3==0)                              
  168.                         {
  169.                                 shang-=1;                              
  170.                                 if(shang<=10)shang=10;         
  171.                                 while(key3==0);
  172.                         }
  173.                 }               
  174.         }
  175.         while(flag==2)                                                
  176.         {
  177.                 d1=17;d2=xia/10;d3=xia%10;                  
  178.                 if(key1==0)
  179.                 {
  180.                         delay(80);
  181.                         if(key1==0)
  182.                         {
  183.                                 flag=0;
  184.                                 while(key1==0);
  185.                                 write_eeprom();                          
  186.                         }
  187.                 }
  188.                 if(key2==0)
  189.                 {
  190.                         delay(80);
  191.                         if(key2==0)
  192.                         {
  193.                                 xia+=1;
  194.                                 if(xia>=99)xia=99;
  195.                                 while(key2==0);
  196.                         }
  197.                 }
  198.                 if(key3==0)
  199.                 {
  200.                         delay(80);
  201.                         if(key3==0)
  202.                         {
  203.                                 xia-=1;
  204.                                 if(xia<=0)xia=0;
  205.                                 while(key3==0);
  206.                         }
  207.                 }               
  208.         }
  209. }

  210. void init()                  
  211. {
  212.         TMOD=0x01;         
  213.         TH0=0xf8;
  214.         TL0=0x30;         
  215.         ET0=1;                  
  216.         TR0=1;                  
  217.         EA=1;                  
  218. }

  219. void zi_dong()
  220. {
  221.         d1=dang;d2=wen_du/10;d3=wen_du%10;      
  222.         zi_keyscan();
  223.         if(wen_du<xia){dang=0;}_du>=xia)&&(wen_du<=shang))
  224.         {dang=1;}
  225.         if(wen_du>shang){dang=2;}}
  226. void main()                  //主函数
  227. {
  228.         uchar j;
  229.         dj=0;                  
  230.         shang=30;
  231.         xia=20;                  
  232.         init_eeprom();  
  233.         for(j=0;j<80;j++)         
  234.         ReadTemperature();
  235.         init();
  236.         while(1)                        
  237.         {      
  238.                 if(js>=50)                       
  239.                 {
  240.                         ReadTemperature();
  241.                         js=0;                              
  242.                 }      
  243.                
  244.                 zi_dong();}
  245. }



  246. void T0_TIME() interrupt 1                 
  247. {
  248.         TH0=0xf8;
  249.         TL0=0x30;                                         
  250.         m++;                                                  switch(dang)                                 
  251.         {
  252.                 case 0:dj=0;break;                  
  253.                 case 1:if(m<=3)dj=1;else dj=0;break;
  254.                 case 2:dj=1;break;                 
  255.                 default:;                                 
  256.         }
  257.         switch(m)                                          
  258.         {
  259.                 case 1:                                                                       
  260.                                 w4=1;P0=~table[d1];w1=0; break;      
  261.                 case 2:
  262.                                 w1=1;P0=~table[16];w2=0; break;      
  263.                 case 3:
  264.                                 w2=1;P0=~table[d2];w3=0;        break;      
  265.                 case 4:
  266.                                 w3=1;P0=~table[d3];w4=0;m=0;if(js<50)js++;break; //
  267.                                                                                                                               
  268.                 default:;                                                               
  269.         }
  270.         if(m>4)                  {
  271.                 m=0;  
  272.         }
  273. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-5-24 06:12 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:23606 发表于 2019-5-24 09:27 | 只看该作者
电路和程序好像不匹配
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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