找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于DS18B20温度传感器设计多温度区间控制的程序

[复制链接]
跳转到指定楼层
楼主
ID:280979 发表于 2019-10-7 23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是程序和要求
产品要求
质量标准 电路设计要求:
1、 温度在10度以下,每间隔X分钟工作一次,工作时间Y分钟
温度在11-20度,每间隔X分钟工作一次,工作时间Y分钟
温度在21-30度,每间隔X分钟工作一次,工作时间Y分钟
温度在31-40度,每间隔X分钟工作一次,工作时间Y分钟
温度在41度以上,每间隔X分钟工作一次,工作时间Y分钟
注意:X在5-999分钟范围,Y在1-60分钟范围
2、 白天工作,晚上工作一次(最好是采用光感)
3、 继电器输出,
4、 工作电压:12V直流电(要求少于12V停止工作)

配套程序
#include <stc89.h>
#include<intrins.h>
#include<eeprom.h>
#include <ds18b20.h>
#include <display.h>
#include <worktime.h>

#define  uchar unsigned char
#define  uint  unsigned int
int  count[7]={0,0,0,0,0,0,0};
void Work_Time_Set();
void KEY();
void DS18_delay(int useconds);
unsigned char ow_reset(void);
void write_bit(char bitval);
void ds18write_byte(char val);
unsigned char read_bit(void);
unsigned char DSread_byte(void);
unsigned int ReadTemperature(void);

sbit P1_1=P1^1;

sbit P1_7=P1^4;

uint sec;
uint tcnt;
uchar i,j;
uchar mcount[7]={0,0,0,0,0,0,0};
uchar ncount[7]={0,0,0,0,0,0,0};



//int num;



/********************************************************************
                            定时中断服务函数
*********************************************************************/  
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
      
        tcnt++; //每过250ust tcnt 加一
        if(tcnt==400) //计满400 次(1/10 秒)时
        {
                tcnt=0; //重新再计
                sec++;
                if(sec==600) //定时1s,在从零开始计时
                {
                        sec=0;

                        switch(num1)
                         {
                  case 1:count[1]++;
                                
                                 if((count[1]<(DSY_Buffer[1]))) P1_1=1;
                                          else if((count[1]>=(DSY_Buffer[1]))&&(count[1]<((DSY_Buffer[1])+(DSY_Buffer[6])))) {P1_1=0;i++;}
                                         else {P1_1=1;j++;count[1]=0;}
                                /*         EEPROMSectorErase((*(p)));
                                         mm=DSY_Buffer[1]/255;
                                         mn=DSY_Buffer[1]%255;
                                         mcount[1]=count[1]/255;
                                         ncount[1]=count[1]%255;
                                 EEPROMWriteByte((*(p))+5,mm);
                                         EEPROMWriteByte((*(p))+mm,mn);
                                         EEPROMWriteByte((*(p))+10,mcount[1]);
                                         EEPROMWriteByte((*(p))+mcount[1]+11,ncount[1]);  */
                                         break;
      
                          case 2:count[2]++;if((count[2]<(DSY_Buffer[2]))) P1_1=1;
                                          else if((count[2]>=(DSY_Buffer[2]))&&(count[2]<((DSY_Buffer[2])+(DSY_Buffer[6])))) {P1_1=0;i++;}
                                         else {P1_1=1;j++;count[2]=0;}
                /*                         EEPROMSectorErase((*(p+1)));
                                         mm=DSY_Buffer[2]/255;
                                         mn=DSY_Buffer[2]%255;
                                         mcount[2]=count[2]/255;
                                         ncount[2]=count[2]%255;
                                 EEPROMWriteByte((*(p+1))+5,mm);
                                         EEPROMWriteByte((*(p+1))+mm,mn);
                                         EEPROMWriteByte((*(p+1))+10,mcount[2]);
                                         EEPROMWriteByte((*(p+1))+mcount[2]+11,ncount[2]);         */
                                         break;
                                         
      
                          case 3:count[3]++;
                                 if((count[3]<(DSY_Buffer[3]))) P1_1=1;
                                          else if((count[3]>=(DSY_Buffer[3]))&&(count[3]<((DSY_Buffer[3])+(DSY_Buffer[6])))) {P1_1=0;i++;}
                                         else {P1_1=1;j++;count[3]=0;}
                        /*                 EEPROMSectorErase((*(p+2)));
                                         mm=DSY_Buffer[3]/255;
                                         mn=DSY_Buffer[3]%255;
                                         mcount[3]=count[3]/255;
                                         ncount[3]=count[3]%255;
                                 EEPROMWriteByte((*(p+2))+5,mm);
                                         EEPROMWriteByte((*(p+2))+mm,mn);
                                         EEPROMWriteByte((*(p+2))+10,mcount[3]);
                                         EEPROMWriteByte((*(p+2))+mcount[3]+11,ncount[3]);                   */
                                         break;
                       

                          case 4:count[4]++;
                                 if((count[4]<(DSY_Buffer[4]))) P1_1=1;
                                          else if((count[4]>=(DSY_Buffer[4]))&&(count[4]<((DSY_Buffer[4])+(DSY_Buffer[6])))) {P1_1=0;i++;}
                                         else {P1_1=1;j++;count[4]=0;}
                /*                         EEPROMSectorErase((*(p+3)));
                                         mm=DSY_Buffer[4]/255;
                                         mn=DSY_Buffer[4]%255;
                                         mcount[4]=count[4]/255;
                                         ncount[4]=count[4]%255;
                                 EEPROMWriteByte((*(p+3))+5,mm);
                                         EEPROMWriteByte((*(p+3))+mm,mn);
                                         EEPROMWriteByte((*(p+3))+10,mcount[4]);
                                         EEPROMWriteByte((*(p+3))+mcount[4]+11,ncount[4]);           */
                                         break;
                                       
                          case 5:count[5]++;if((count[5]<(DSY_Buffer[5]))) P1_1=1;
                                          else if((count[5]>=(DSY_Buffer[5]))&&(count[5]<((DSY_Buffer[5])+(DSY_Buffer[6])))) {P1_1=0;i++;}
                                         else {P1_1=1;j++;count[5]=0;}
                        /*                 EEPROMSectorErase((*(p+4)));
                                         mm=DSY_Buffer[5]/255;
                                         mn=DSY_Buffer[5]%255;
                                         mcount[5]=count[5]/255;
                                         ncount[5]=count[5]%255;
                                 EEPROMWriteByte((*(p+4))+5,mm);
                                         EEPROMWriteByte((*(p+4))+mm,mn);
                                         EEPROMWriteByte((*(p+4))+10,mcount[5]);
                                         EEPROMWriteByte((*(p+4))+mcount[5]+11,ncount[5]);                        */
                                         break;
                  

                         }
                }      
        }
}                 
                                                                        
/********************************************************************
                            主函数
*********************************************************************/
void main()
{
         /*
        mcount[1]=EEPROMReadByte((*(p))+10);
    count[1]=((EEPROMReadByte((*(p))+mcount[1]+11))+((mcount[1])*(EEPROMReadByte((*(p))+10))));

        mcount[2]=EEPROMReadByte((*(p+1))+10);
    count[2]=((EEPROMReadByte((*(p+1))+mcount[2]+11))+((mcount[2])*(EEPROMReadByte((*(p+1))+10))));

    mcount[3]=EEPROMReadByte((*(p+2))+10);
    count[3]=((EEPROMReadByte((*(p+2))+mcount[3]+11))+((mcount[3])*(EEPROMReadByte((*(p+2))+10))));

        mcount[4]=EEPROMReadByte((*(p+3))+10);
    count[4]=((EEPROMReadByte((*(p+3))+mcount[4]+11))+((mcount[4])*(EEPROMReadByte((*(p+3))+10))));

        mcount[5]=EEPROMReadByte((*(p+4))+10);
    count[5]=((EEPROMReadByte((*(p+4))+mcount[5]+11))+((mcount[5])*(EEPROMReadByte((*(p+4))+10))));
        */
        ctime=0;
        TMOD=0x02; //定时器工作在方式2
        ET0=1;
        EA=1;
        sec=0;
         
while(1)
{                       
        if(P1_7==0)
        {
                     i=0;
                         j=0;
                  
                                 
                   Key_Time_Set();
                   KEY();
                   Work_Time_Set();
                   mm=EEPROMReadByte((*(p+address_count))+5);
                   DSY_Buffer[ctime]=(((mm)*(EEPROMReadByte((*(p+address_count)))))+(EEPROMReadByte((*(p+address_count))+mm)));  
                  
                   if(ctime==0) DSY_Buffer[ctime]=count[ctime];

                   if((DSY_Buffer[ctime]>count[ctime])||(DSY_Buffer[ctime]==0))  Led(DSY_Buffer[ctime]-count[ctime],ctime);

                   else if(((DSY_Buffer[ctime])<=(count[ctime]))&&((DSY_Buffer[ctime]!=0)))  Led(DSY_Buffer[ctime]+DSY_Buffer[6]-count[ctime],6);

                  
                 

               
                                          
        }
        if(P1_7==1)
        {
                         i=0;
                         j=0;
                         TR0=1;
                         num1=1;
                   Key_Time_Set();
                   KEY();
                   //Work_Time_Set();
                   //mm=EEPROMReadByte((*(p+address_count))+5);
                   //DSY_Buffer[ctime]=(((mm)*(EEPROMReadByte((*(p+address_count)))))+(EEPROMReadByte((*(p+address_count))+mm)));  
                   if((ctime==1)||(ctime==2)||(ctime==3)||(ctime==4)||(ctime==5))  DSY_Buffer[ctime]=300;
                   if(ctime==0) DSY_Buffer[ctime]=count[ctime];

                   if((DSY_Buffer[ctime]>count[ctime]))  Led(DSY_Buffer[ctime]-count[ctime],1);

                   else if((DSY_Buffer[ctime]<=(count[ctime])))  Led(DSY_Buffer[ctime]+DSY_Buffer[6]-count[ctime],6);

                         if(i==1)
                          {
                           while(j==0);
                           TR0=0;
                           while(P1_7);
                          }
                       
               
         }
         
}

}


      
/********************************************************************
                              结束
*********************************************************************/

温度延时开关.rar

67.63 KB, 下载次数: 15, 下载积分: 黑币 -5

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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