水温控制器

#include<reg51.h>  
#define uchar unsigned char 
#define uint unsigned int  
sbit DQ=P3^7;
sbit RS=P3^2; 
sbit RW=P3^1; 
sbit EN=P3^0; 

sbit PT = P3^5;

sbit yellow=P1^7; 
sbit green=P1^6; 
sbit red=P1^5; 

sbit up_up=P1^3; 
sbit up_down=P1^2;
sbit down_up=P1^1; 
sbit down_down=P1^0; 

unsigned char code str1[]={"temperature(deg): "}; 
unsigned char code str2[]={" "}; 
uchar data disdata[4]; 
uint tvalue;
uchar tflag;
uchar up_temp=50;
uchar down_temp=40;

void delay1ms(unsigned int ms)
{
unsigned int i,j; 
 for(i=0;i<ms;i++) 
 for(j=0;j<100;j++); 
}  

void wr_com(unsigned char com)

  delay1ms(1); 
  RS=0; 
  RW=0;    
  EN=0;    
  P2=com;    
  delay1ms(1);    
  EN=1; 
  delay1ms(1);    
  EN=0;
   } 

void wr_dat(unsigned char dat)    
 { 
  delay1ms(1);; 
  RS=1; 
  RW=0; 
  EN=0; 
  P2=dat;  
  delay1ms(1); 
  EN=1; 
  delay1ms(1);   
   EN=0; 
  } 

void lcd_init()
{
 delay1ms(15); 
 wr_com(0x38);
 delay1ms(5);    
 wr_com(0x08);delay1ms(5);    
 wr_com(0x01);delay1ms(5);      
 wr_com(0x06);delay1ms(5);       
 wr_com(0x0c);delay1ms(5); 
 }  

void display(unsigned char *p)    
 { 
  while(*p!='\0')
  { 
    wr_dat(*p); p++; 
    delay1ms(1);
     } } 
  init_play()
  { 
   lcd_init(); 
   wr_com(0x80);
   display(str1);
   wr_com(0xc0); 
   display(str2);   
    }

void delay_18B20(unsigned int i) 
  { 
   while(i--);
   } 
void ds1820rst()

 unsigned char x=0; 
 DQ = 1;        
 delay_18B20(4); 
 DQ = 0;        
 delay_18B20(100);
 DQ = 1;         
  delay_18B20(40);    
   }
uchar ds1820rd()
{ unsigned char i=0; 
unsigned char dat = 0;
 for (i=8;i>0;i--) 
{   DQ = 0; 
 dat>>=1; 
    DQ = 1; 
       if(DQ)     
       dat|=0x80; 
    delay_18B20(10);
     } 
   return(dat);
    }
 void ds1820wr(uchar wdata)
 {
 unsigned char i=0; 
   for (i=8; i>0; i--)    
    { DQ = 0; 
     DQ = wdata&0x01;     
     delay_18B20(10);     
      DQ = 1;     
       wdata>>=1;   
       } }
  read_temp()
   {
   uchar a,b; 
ds1820rst();     
ds1820wr(0xcc);
ds1820wr(0x44);
 ds1820rst();     
ds1820wr(0xcc);
ds1820wr(0xbe);
 a=ds1820rd(); 
 b=ds1820rd(); 
 tvalue=b;
  tvalue<<=8; 
  tvalue=tvalue|a; 
    if(tvalue<0x0fff)    
    tflag=0;     
    else 
   {tvalue=~tvalue+1;
    tflag=1;  
      }
      tvalue=tvalue*(0.625);
      return(tvalue); 
     } 

  void ds1820disp()
  { 
  uchar flagdat; 
  uchar temp[2];
   disdata[0]=tvalue/1000+0x30;
     disdata[1]=tvalue%1000/100+0x30;   
     disdata[2]=tvalue%100/10+0x30;     
     disdata[3]=tvalue%10+0x30;   
     if(tflag==0) 
     flagdat=0x20;  
     else 
       flagdat=0x2d;      
       if(disdata[0]==0x30)
       {
       disdata[0]=0x20;   
       if(disdata[1]==0x30) 
    {
    disdata[1]=0x20;   
     }    } 
    wr_com(0xc0); 
   wr_dat(flagdat);   
   wr_com(0xc1); 
    wr_dat(disdata[0]); 
     wr_com(0xc2); 
    wr_dat(disdata[1]);     
    wr_com(0xc3); 
    wr_dat(disdata[2]);   
    wr_com(0xc4); 
    wr_dat(0x2e);   
    wr_com(0xc5);
    wr_dat(disdata[3]);
    temp[1]=up_temp/10+0x30;
    temp[0]=up_temp%10+0x30;
    wr_com(0xc7); 
    wr_dat(temp[1]);     
    wr_com(0xc8); 
    wr_dat(temp[0]); 
    wr_com(0xc9); 
    wr_dat(0x2d); 
    temp[1]=down_temp/10+0x30;
    temp[0]=down_temp%10+0x30;
    wr_com(0xca); 
    wr_dat(temp[1]);     
    wr_com(0xcb); 
    wr_dat(temp[0]);
}   

void init_jianpan_led()
{
    yellow=green=red=1;
    up_up=up_down=down_up=down_down=1;
}
void jianpan_saomiao()
{
    if(up_up==0)up_temp++;
    if(up_temp>80)up_temp=80;
    if(up_down==0)up_temp--;
    if(up_temp<=down_temp)up_temp=down_temp;

    if(down_up==0)down_temp++;
    if(down_temp>=up_temp)down_temp=up_temp;
    if(down_down==0)down_temp--;
    if(down_temp<20)down_temp=20;    
    while(up_up==0||up_down==0||down_up==0||down_down==0)
    {
         delay1ms(51);
         
    }

}
 void main() 

    uchar temp;
    uchar temp1[2];
    init_play();  
    init_jianpan_led();
    PT = 0;
while(1) 
 {
 read_temp();   
  ds1820disp();
  jianpan_saomiao();
  
  temp=tvalue%1000/10;
  if(temp<down_temp)
  {
      red=0;
    green=yellow=1;
  }
  if(temp>up_temp)
  {
      red=green=1;
    yellow=0;
  }
  if(temp>=down_temp&&temp<=up_temp) 
  {
       red=yellow=1;
     green=0;
  
  }      
   } }
 

系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。系统由STC89C52单片机最小系统、DS18B20温度传感器、MOS管PWM电子开关控制模块、LCD1602显示屏、按键模块、电源模块和U型防水加热棒组成。单片机控制DS18B20温度传感器模块实时测量水温,并存储转化后的真实温度用于PID计算。PID计算结果转化成PWM输出到MOS管来控制U型加热棒加热。按键模块用于设定目标温度值。LCD1602用于显示当前温度值和设定目标温度值。RTGRETG
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值