锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

ds18b20电冰箱控制系统

时间:2024-05-12 04:07:10


# include "reg52.h"
# include "math.h"
#include

# define uchar unsigned char
# define uint unsigned int

//写eeprom存储中
sbit scl=P1^1;
sbit sda=P1^2;

sbit DQ = P3^0; //温度输入口
sbit DQ2 = P3^1; //温度输入口

sbit kmbj=P1^4; //开门报警灯入口
sbit motordc=P3^5; //直流入口
sbit hghlgt=P3^6; //温度高于设定值入口
sbit motorout=P3^7;

sbit setlclgt=P3^2; //设置提示灯入口
sbit setldlgt=P1^6; //设置提示灯入口
sbit addlgt=P3^3; //温度加灯入口
sbit sublgt=P3^4; //温度减灯入口
sbit syslgt=P1^7; //系统工作提示灯

sbit setbtn=P1^0; //设置按键入口
sbit addbtn=P1^1; //温度加按键入口
sbit subbtn=P1^2; //温度减按键入口

sbit opndr=P1^3; //开门开关
sbit opndrspk=P1^5; //18度报警

uchar data temp_data[2]={0x00, 0x00,}; //读出温度暂存
uchar temp_buff[3]={0x00,0x00,0x00};
uchar disp_buff[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a}; //显示缓冲单元
uint tt=0,tt2=0,tm=0,cjtm=0,flag_cj=0,open=0,ccount=0;

char lcsetvalue=0,ldsetvalue=0;

uchar code TABLE[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳极 0-9的代码
uchar code codeseat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchar flag_set=1,flag_temp=1,flag_opendr=0,flag_kmbj=0,flag_hbj=0;

void delay(uint j)
{
uint i;
for(i=0;i<=j;i++);
}

/*****************温度设定函数*************************/
void temp_set(void)
{
syslgt=1;
while(flag_set) //设定冷藏室温度和冷冻室温度
{
if(flag_temp)
{
setbtn=1;
if(!setbtn)
{ while(!setbtn)
{ setbtn=1;setlclgt=0; }//等待键的释放
flag_temp++;
if(flag_temp==2)
{ setlclgt=0;setldlgt=1;}
if(flag_temp==3)
{setlclgt=1;addlgt=1;sublgt=1;setldlgt=0;}
if(flag_temp==4)
{flag_temp=1;setlclgt=1;setldlgt=1;addlgt=1;sublgt=1;syslgt=0;flag_set=0;}

tm=0;
disp_buff[0]=10; disp_buff[1]=10;
disp_buff[2]=10; disp_buff[3]=10;
}
}
if(flag_temp==2) //开始冷藏室温度加或者减
{
addbtn=1;
if(!addbtn)
{ while(!addbtn)
{ addbtn=1;addlgt=0;sublgt=1;}//等待键的释放
lcsetvalue++;
if(lcsetvalue>=60)
lcsetvalue=60;
if(lcsetvalue<0)
disp_buff[0]=11;
else
disp_buff[0]=10;

disp_buff[1]=abs(lcsetvalue)/10;
disp_buff[2]=abs(lcsetvalue)%10;
disp_buff[3]=0;
if(!disp_buff[1]) {disp_buff[1]=10;}
}
subbtn=1;
if(!subbtn)
{ while(!subbtn)
{ subbtn=1;sublgt=0;addlgt=1;}//等待键的释放
lcsetvalue--;
if(lcsetvalue<0)
disp_buff[0]=11;
else
disp_buff[0]=10;

disp_buff[1]=abs(lcsetvalue)/10;
disp_buff[2]=abs(lcsetvalue)%10;
disp_buff[3]=0;
if(!disp_buff[1]) {disp_buff[1]=10;}
}
}
if(flag_temp==3) //开始冷冻室温度加或者减
{
addbtn=1;
if(!addbtn)
{ while(!addbtn)
{ addbtn=1;addlgt=0;sublgt=1;}//等待键的释放
ldsetvalue++;
if(ldsetvalue>=60)
ldsetvalue=60;
if(ldsetvalue<0)
disp_buff[0]=11;
else
disp_buff[0]=10;

disp_buff[1]=abs(ldsetvalue)/10;
disp_buff[2]=abs(ldsetvalue)%10;
disp_buff[3]=0;
if(!disp_buff[1]) {disp_buff[1]=10;}
}
subbtn=1;
if(!subbtn)
{ while(!subbtn)
{ subbtn=1;sublgt=0;addlgt=1;}//等待键的释放
ldsetvalue--;
if(ldsetvalue<0)
disp_buff[0]=11;
else
disp_buff[0]=10;

disp_buff[1]=abs(ldsetvalue)/10;
disp_buff[2]=abs(ldsetvalue)%10;
disp_buff[3]=0;
if(!disp_buff[1]) {disp_buff[1]=10;}
}
}
}
}


/********************************计算温度子函数**********************************************/
void temp_work(void)
{
disp_buff[0]=10;

if(temp_data[1]>127)
{temp_data[1]=(255-temp_data[1]);temp_data[0]=(255-temp_data[0])+1;disp_buff[0]=11;} //负温度求补码
tt=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;

disp_buff[1]=tt/10;
disp_buff[2]=tt%10;
disp_buff[3]=0;

if(!disp_buff[1])
disp_buff[1]=10;
}

/*******************************DS复位函数******************************/
void ow_reset2(void)
{
uchar presence=1;

while(presence)
{
while(presence)
{
DQ2=1; //DQ复位
DQ2=0; //单片机将DQ拉低
delay(50); //延时550毫秒
DQ2=1; //拉高总线
delay(6);
presence=DQ2; //如果=0则初始化成功 =1则初始化失败
}
delay(45);
presence=~DQ2;
}
DQ2=1;
}
/*****************************DS写命令函数*********************************/
void write_byte2(uchar dat) //向1-WE总线上写一字节
{
uchar i = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ2 = 0 ;
DQ2 = dat&0x01 ;
delay(7) ; //0时序延时至少60US
DQ2 = 1 ;
dat>>=1 ;
}
}
/*******************************DS读一字节函数****************************************************/
uchar read_byte2(void)
{
uchar i = 0 ;
uchar dat = 0 ;

for (i = 8 ; i > 0 ; i--)
{
DQ2 = 0 ; // 给脉冲信号
dat >>= 1 ;
DQ2 = 1 ; // 给脉冲信号

if(DQ2)
dat |= 0x80 ;
delay(7) ;
}
return (dat) ;
}
/*******************************DS复位函数******************************/
void ow_reset(void)
{
uchar presence=1;

while(presence)
{
while(presence)
{
DQ=1; //DQ复位
DQ=0; //单片机将DQ拉低
delay(50); //延时550毫秒
DQ=1; //拉高总线
delay(6);
presence=DQ; //如果=0则初始化成功 =1则初始化失败
}
delay(45);
presence=~DQ;
}
DQ=1;
}
/*****************************DS写命令函数*********************************/
void write_byte(uchar dat) //向1-WIRE总线上写一字节
{
uchar i = 0 ;
for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ;
DQ = dat&0x01 ;
delay(7) ; //0时序延时至少60US
DQ = 1 ;
dat>>=1 ;
}
}
/*******************************DS读一字节函数****************************************************/
uchar read_byte(void)
{
uchar i = 0 ;
uchar dat = 0 ;

for (i = 8 ; i > 0 ; i--)
{
DQ = 0 ; // 给脉冲信号
dat >>= 1 ;
DQ = 1 ; // 给脉冲信号

if(DQ)
dat |= 0x80 ;
delay(7) ;
}
return (dat) ;
}

/******************************读出温度函数*************************************************/
void read_temp(void)
{
ow_reset();
write_byte(0xcc);//skip ROM
write_byte(0x44);// 启动温度转换

ow_reset();
write_byte(0xcc);
write_byte(0xbe); //读取温度寄存器

temp_data[0]=read_byte(); //温度低8位
temp_data[1]=read_byte(); //温度高8位

}


/*****************第二个ds18b20处理函数******************/

/******************************读出温度函数*************************************************/
void read_temp2(void)
{
ow_reset2();
write_byte2(0xcc);//skip ROM
write_byte2(0x44);// 启动温度转换

ow_reset2();
write_byte2(0xcc);
write_byte2(0xbe); //读取温度寄存器

temp_data[0]=read_byte2(); //温度低8位
temp_data[1]=read_byte2(); //温度高8位

}
/********************************计算温度子函数**********************************************/
void temp_work2(void)
{
disp_buff[4]=10;

if(temp_data[1]>127)
{temp_data[1]=(255-temp_data[1]);temp_data[0]=(255-temp_data[0])+1;disp_buff[4]=11;} //负温度求补码
tt2=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
disp_buff[5]=tt2/10;
disp_buff[6]=tt2%10;
disp_buff[7]=0;

if(!disp_buff[5])
disp_buff[5]=10;

}
/**********eeprom函数******************/
////////延时//////////////////////////////////
void flash()
{ ; ;

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章