Chia sẻ bộ khống chế nhiệt độ

thai duong

Học sinh trung cấp
#51
Chào bạn tdm.
Mình đang tập viết code và đang làm mạch giống bạn nhưng đến đây ko biết bị gì, nhờ bạn xem giúp mình, mình gửi file code và mô phỏng. thanks bạn.
 

Đính kèm

thai duong

Học sinh trung cấp
#53
bạn gửi thẳng code lên đây.
CODE :
Mã:
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit den_do=P2^3;
sbit den_vang=P2^1;
sbit den_xanh=P2^2;
sbit DQ = P3^7;
sbit led1 = P2^4;
sbit led2 = P2^5;
sbit led3 = P2^6;
sbit led4 = P2^7;

unsigned int temp,i;
unsigned int set_t=30;
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char donvi,chuc ;

void tre(unsigned int t)
  {
for(i=1;i<=t;++i);
  }
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20()
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8);
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ;
     delay_18B20(20);
}
//=DOC MOT BYTE 
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
}
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
   
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
    delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = (b*256+a)*25;   
    return( t >> 2  );
}
//========================
void hienthi(void)
  {     temp=ReadTemperature();
  chuc=(temp)/10;  // tach lay hang chuc
  donvi=(temp)%10;  // tach lay hang don vi
  led1=1;
  P0=M[chuc];
  tre(800);
  led1=0;
  P0=0xFF;
  led2=1;
  P0=M[donvi];
  tre(800);
  led2=0;
  P0=0xFF;
  }

void ht_dat()
{
  chuc=(set_t)/10;  // nt
  donvi=(set_t)%10;  //nt
  led3=1;
  P0=M[chuc];
  tre(800);
  led3=0;
  P0=0xFF;
  led4=1;
  P0=M[donvi];
  tre(800);
  led4=0;
  P0=0xFF;
    }

void so_sanh_temp()  // ham so sanh nhiet do
{
if(temp==set_t)
{
den_vang=0;
den_do=den_xanh=1;
}
else
if(temp>set_t)
{
den_xanh=0;
den_do=den_vang=1;
}
else
if (temp<set_t)
{
den_do=0;
den_vang=den_xanh=1;
}
}

void main ()
{
IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
IP=0;    // uu tien ngat bang nhau
IT1=IT0=1;  // ngat theo suon am
//++++++++++++++++//

den_do=den_vang=den_xanh=1;// tat toan bo den
while(1)
{
temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
hienthi();
ht_dat();
so_sanh_temp();
}
}

void ngat_int0() interrupt 0  // ham ngat ngoai 0
{
tre(50); // chong rung phim
set_t++;
}

void ngat_int1() interrupt 2  // ham ngat ngoai 1
{
tre(50);  // chong rung phim
set_t--;
}
 

tdm

Kỹ sư
#54
CODE :
Mã:
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit den_do=P2^3;
sbit den_vang=P2^1;
sbit den_xanh=P2^2;
sbit DQ = P3^7;
sbit led1 = P2^4;
sbit led2 = P2^5;
sbit led3 = P2^6;
sbit led4 = P2^7;

unsigned int temp,i;
unsigned int set_t=30;
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char donvi,chuc ;

void tre(unsigned int t)
  {
for(i=1;i<=t;++i);
  }
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20()
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8);
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ;
     delay_18B20(20);
}
//=DOC MOT BYTE
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
}
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
  
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
    delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = (b*256+a)*25;  
    return( t >> 2  );
}
//========================
void hienthi(void)
  {     temp=ReadTemperature();
  chuc=(temp)/10;  // tach lay hang chuc
  donvi=(temp)%10;  // tach lay hang don vi
  led1=1;
  P0=M[chuc];
  tre(800);
  led1=0;
  P0=0xFF;
  led2=1;
  P0=M[donvi];
  tre(800);
  led2=0;
  P0=0xFF;
  }

void ht_dat()
{
  chuc=(set_t)/10;  // nt
  donvi=(set_t)%10;  //nt
  led3=1;
  P0=M[chuc];
  tre(800);
  led3=0;
  P0=0xFF;
  led4=1;
  P0=M[donvi];
  tre(800);
  led4=0;
  P0=0xFF;
    }

void so_sanh_temp()  // ham so sanh nhiet do
{
if(temp==set_t)
{
den_vang=0;
den_do=den_xanh=1;
}
else
if(temp>set_t)
{
den_xanh=0;
den_do=den_vang=1;
}
else
if (temp<set_t)
{
den_do=0;
den_vang=den_xanh=1;
}
}

void main ()
{
IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
IP=0;    // uu tien ngat bang nhau
IT1=IT0=1;  // ngat theo suon am
//++++++++++++++++//

den_do=den_vang=den_xanh=1;// tat toan bo den
while(1)
{
temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
hienthi();
ht_dat();
so_sanh_temp();
}
}

void ngat_int0() interrupt 0  // ham ngat ngoai 0
{
tre(50); // chong rung phim
set_t++;
}

void ngat_int1() interrupt 2  // ham ngat ngoai 1
{
tre(50);  // chong rung phim
set_t--;
}
code còn nhiều vấn đề ,trước mắt sửa tạm cho bạn như vậy đã.
bạn viết thêm chỗ gợi ý trong code.

Mã:
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit den_do=P2^3;
sbit den_vang=P2^1;
sbit den_xanh=P2^2;
sbit DQ = P3^7;
sbit led1 = P2^4;
sbit led2 = P2^5;
sbit led3 = P2^6;
sbit led4 = P2^7;

unsigned int temp,i;
unsigned int set_t=30;
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char donvi,chuc ;

void tre(unsigned int t)
  {
for(i=1;i<=t;++i);
  }
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20() 
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8); 
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ; 
     delay_18B20(20);
}
//=DOC MOT BYTE  
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE 
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
 }
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
 unsigned int ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
   
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
  //  delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = b ;    t<<=8;    t=t|a;     //????????????????
          t =t/16;           //???????????????? lay phan nguyen
    return t ;
}
//========================
void hienthi(void)
  {    temp=ReadTemperature();
  chuc=(temp)/10;  // tach lay hang chuc
  donvi=(temp)%10;  // tach lay hang don vi
  led1=1;
  P0=M[donvi];    //????????????????
  tre(800);
  led1=0;
  P0=0xFF;
  led2=1;
  P0=M[chuc];    //??????????????????
  tre(800);
  led2=0;
  P0=0xFF;
  }

void ht_dat()
{
  chuc=(set_t)/10;  // nt
  donvi=(set_t)%10;  //nt
  led3=1;
  P0=M[chuc];
  tre(800);
  led3=0;
  P0=0xFF;
  led4=1;
  P0=M[donvi];
  tre(800);
  led4=0;
  P0=0xFF;
    }

void so_sanh_temp()  // ham so sanh nhiet do
{
if(temp==set_t)
{
den_vang=0;
den_do=den_xanh=1;
}
else
if(temp>set_t)
{
den_xanh=0;
den_do=den_vang=1;
}
else
if (temp<set_t)
{
den_do=0;
den_vang=den_xanh=1;
}
}

void main ()
{
IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
IP=0;    // uu tien ngat bang nhau
IT1=IT0=1;  // ngat theo suon am
//++++++++++++++++//

den_do=den_vang=den_xanh=1;// tat toan bo den
while(1)
{
temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
hienthi();
ht_dat();
so_sanh_temp();
}
}

void ngat_int0() interrupt 0  // ham ngat ngoai 0
{
tre(50); // chong rung phim
set_t++;
///phai gioi han gia tri tang 

}

void ngat_int1() interrupt 2  // ham ngat ngoai 1
{
tre(50);  // chong rung phim
set_t--;
//phai gioi han gia tri giam
}
 

thai duong

Học sinh trung cấp
#55
code còn nhiều vấn đề ,trước mắt sửa tạm cho bạn như vậy đã.
bạn viết thêm chỗ gợi ý trong code.

Mã:
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit den_do=P2^3;
sbit den_vang=P2^1;
sbit den_xanh=P2^2;
sbit DQ = P3^7;
sbit led1 = P2^4;
sbit led2 = P2^5;
sbit led3 = P2^6;
sbit led4 = P2^7;

unsigned int temp,i;
unsigned int set_t=30;
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char donvi,chuc ;

void tre(unsigned int t)
  {
for(i=1;i<=t;++i);
  }
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20()
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8);
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ;
     delay_18B20(20);
}
//=DOC MOT BYTE 
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
}
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
unsigned int ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
  
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
  //  delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = b ;    t<<=8;    t=t|a;     //????????????????
          t =t/16;           //???????????????? lay phan nguyen
    return t ;
}
//========================
void hienthi(void)
  {    temp=ReadTemperature();
  chuc=(temp)/10;  // tach lay hang chuc
  donvi=(temp)%10;  // tach lay hang don vi
  led1=1;
  P0=M[donvi];    //????????????????
  tre(800);
  led1=0;
  P0=0xFF;
  led2=1;
  P0=M[chuc];    //??????????????????
  tre(800);
  led2=0;
  P0=0xFF;
  }

void ht_dat()
{
  chuc=(set_t)/10;  // nt
  donvi=(set_t)%10;  //nt
  led3=1;
  P0=M[chuc];
  tre(800);
  led3=0;
  P0=0xFF;
  led4=1;
  P0=M[donvi];
  tre(800);
  led4=0;
  P0=0xFF;
    }

void so_sanh_temp()  // ham so sanh nhiet do
{
if(temp==set_t)
{
den_vang=0;
den_do=den_xanh=1;
}
else
if(temp>set_t)
{
den_xanh=0;
den_do=den_vang=1;
}
else
if (temp<set_t)
{
den_do=0;
den_vang=den_xanh=1;
}
}

void main ()
{
IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
IP=0;    // uu tien ngat bang nhau
IT1=IT0=1;  // ngat theo suon am
//++++++++++++++++//

den_do=den_vang=den_xanh=1;// tat toan bo den
while(1)
{
temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
hienthi();
ht_dat();
so_sanh_temp();
}
}

void ngat_int0() interrupt 0  // ham ngat ngoai 0
{
tre(50); // chong rung phim
set_t++;
///phai gioi han gia tri tang

}

void ngat_int1() interrupt 2  // ham ngat ngoai 1
{
tre(50);  // chong rung phim
set_t--;
//phai gioi han gia tri giam
}
Thanks bạn đã xem qua, để mình thử rồi trả lời bạn sau.
 

thai duong

Học sinh trung cấp
#56
code còn nhiều vấn đề ,trước mắt sửa tạm cho bạn như vậy đã.
bạn viết thêm chỗ gợi ý trong code.

Mã:
#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit den_do=P2^3;
sbit den_vang=P2^1;
sbit den_xanh=P2^2;
sbit DQ = P3^7;
sbit led1 = P2^4;
sbit led2 = P2^5;
sbit led3 = P2^6;
sbit led4 = P2^7;

unsigned int temp,i;
unsigned int set_t=30;
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char donvi,chuc ;

void tre(unsigned int t)
  {
for(i=1;i<=t;++i);
  }
void delay_18B20(unsigned int i)
{
    while(i--);
}
//========================
//=KHOI TAO CAM BIEN
void Init_DS18B20()
{
     unsigned char x=0;
     DQ = 1;
     delay_18B20(8);
     DQ = 0;
     delay_18B20(80);
     DQ = 1;
     delay_18B20(14);
     x=DQ;
     delay_18B20(20);
}
//=DOC MOT BYTE 
ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8;i>0;i--)
     {
          DQ = 0; //CHO DUONG DQ XUONG MUC THAP
          dat>>=1;
          DQ = 1; //CHO DUONG DQ LEN MUC CAO
          if(DQ)
          dat|=0x80;
          delay_18B20(4);
     }
     return(dat);
}
//========================
//=CHUONG TRINH GHI 1BYTE
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
  DQ = 0;
  DQ = dat&0x01;
  delay_18B20(5);
  DQ = 1;
  dat>>=1;
}
}
//========================
//=CHUONG TRINH DOC NHIET DO TU CAM BIEN
unsigned int ReadTemperature(void)
{
    unsigned char a=0;
    unsigned char b=0;
    unsigned int  t=0;
  
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
  //  delay_18B20(100);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);
    a=ReadOneChar();
    b=ReadOneChar();
    t = b ;    t<<=8;    t=t|a;     //????????????????
          t =t/16;           //???????????????? lay phan nguyen
    return t ;
}
//========================
void hienthi(void)
  {    temp=ReadTemperature();
  chuc=(temp)/10;  // tach lay hang chuc
  donvi=(temp)%10;  // tach lay hang don vi
  led1=1;
  P0=M[donvi];    //????????????????
  tre(800);
  led1=0;
  P0=0xFF;
  led2=1;
  P0=M[chuc];    //??????????????????
  tre(800);
  led2=0;
  P0=0xFF;
  }

void ht_dat()
{
  chuc=(set_t)/10;  // nt
  donvi=(set_t)%10;  //nt
  led3=1;
  P0=M[chuc];
  tre(800);
  led3=0;
  P0=0xFF;
  led4=1;
  P0=M[donvi];
  tre(800);
  led4=0;
  P0=0xFF;
    }

void so_sanh_temp()  // ham so sanh nhiet do
{
if(temp==set_t)
{
den_vang=0;
den_do=den_xanh=1;
}
else
if(temp>set_t)
{
den_xanh=0;
den_do=den_vang=1;
}
else
if (temp<set_t)
{
den_do=0;
den_vang=den_xanh=1;
}
}

void main ()
{
IE=0x85;  // cho phep ngat ngoai 0 va ngat ngoai 1
IP=0;    // uu tien ngat bang nhau
IT1=IT0=1;  // ngat theo suon am
//++++++++++++++++//

den_do=den_vang=den_xanh=1;// tat toan bo den
while(1)
{
temp=ReadTemperature(); // gan gia tri chuyen doi vao bien temp
hienthi();
ht_dat();
so_sanh_temp();
}
}

void ngat_int0() interrupt 0  // ham ngat ngoai 0
{
tre(50); // chong rung phim
set_t++;
///phai gioi han gia tri tang

}

void ngat_int1() interrupt 2  // ham ngat ngoai 1
{
tre(50);  // chong rung phim
set_t--;
//phai gioi han gia tri giam
}
thanks bạn tdm nhiều, mạch đã chạy ok, và nhờ bạn chỉ cho mình cách lưu nhiệt độ cài đặt vào chip 24c04 được ko?
 

tdm

Kỹ sư
#59
Không biết do mạch hay do code mà cho mạch chạy khoảng 4 ngày là con 24c04 bị chết, mình thay con này lần thứ 3 rồi, ko biết như thế nào nhờ bạn tdm k.tra giùm mình được ko? thanks bạn.
1:nạp thử file này cứu mấy con 24xx đã nhé.
2:nạp lại file cũ chạy thử.
 

Đính kèm

Quảng cáo Google