功能描述
1、採用51單片機作為主控芯片;
2、具有3個冷藏室,每個冷藏室都有一個温度傳感器,可單獨控温;
3、採用18B20傳感器檢測温度;
4、採用6位數碼管切換顯示3個温度值、設置值;
5、按鍵設置3個製冷閾值,當温度高於設定值,啓動製冷;
6、結霜使用開關模擬,檢測到結霜後啓動除霜加熱;
仿真設計
採用Proteus作為仿真設計工具。Proteus是一款著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。
主程序設計
void main()
{
uint i;
TMOD|=0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//打開定時器
while(1)
{
if(!s1) //設置
{
if(mode<3)
mode++;
else
mode=0;
while(!s1);
}
if(mode>0)//設置閥值
{
if(!s2)
{
if(down[mode-1]<99)
down[mode-1]++;
while(!s2);
}
if(!s3)
{
if(down[mode-1]>-50)
down[mode-1]--;
while(!s3);
}
}
//開門檢測
led=!k1;
if(k1)
{
miao=20;
}
//報警
if(miao==0)
beep=0;
else
beep=1;
//除霜
if(!k2)
out1=0;
else
out1=1;
//壓縮機控制
if(ds18b20_temp1>down[0])
out2=0;
else
out2=1;
if(ds18b20_temp2>down[1])
out3=0;
else
out3=1;
if(ds18b20_temp3>down[2])
out4=0;
else
out4=1;
//顯示
if(mode==0)
{
if(flag==0)
{
//温度1
P0=0;smg3=0;smg2=0;smg1=0;
P0=smgduan[1];delay(50);
if(ds18b20_temp1>0)
{
i=ds18b20_temp1;
P0=0;smg3=0;smg2=1;smg1=1;
P0=smgduan[i/100];delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i%100/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
else
{
i=-ds18b20_temp1;
P0=0;smg3=0;smg2=1;smg1=1;
P0=0x40;delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
}
if(flag==1)
{
//温度2
P0=0;smg3=0;smg2=0;smg1=0;
P0=smgduan[2];delay(50);
if(ds18b20_temp2>0)
{
i=ds18b20_temp2;
P0=0;smg3=0;smg2=1;smg1=1;
P0=smgduan[i/100];delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i%100/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
else
{
i=-ds18b20_temp2;
P0=0;smg3=0;smg2=1;smg1=1;
P0=0x40;delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
}
if(flag==2)
{
//温度3
P0=0;smg3=0;smg2=0;smg1=0;
P0=smgduan[3];delay(50);
if(ds18b20_temp3>0)
{
i=ds18b20_temp3;
P0=0;smg3=0;smg2=1;smg1=1;
P0=smgduan[i/100];delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i%100/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
else
{
i=-ds18b20_temp3;
P0=0;smg3=0;smg2=1;smg1=1;
P0=0x40;delay(50);
P0=0;smg3=1;smg2=0;smg1=0;
P0=smgduan[i/10];delay(50);
P0=0;smg3=1;smg2=0;smg1=1;
P0=smgduan[i%10];delay(50);
}
}
}