功能描述

1、採用51單片機作為主控芯片;
2、具有3個冷藏室,每個冷藏室都有一個温度傳感器,可單獨控温;
3、採用18B20傳感器檢測温度;
4、採用6位數碼管切換顯示3個温度值、設置值;
5、按鍵設置3個製冷閾值,當温度高於設定值,啓動製冷;
6、結霜使用開關模擬,檢測到結霜後啓動除霜加熱;

仿真設計

採用Proteus作為仿真設計工具。Proteus是一款著名的EDA工具(仿真軟件),從原理圖布圖、代碼調試到單片機與外圍電路協同仿真,一鍵切換到PCB設計,真正實現了從概念到產品的完整設計。

0124-基於單片機-冰箱(製冷+除霜+3室)-仿真設計(SEG6+18B20x3)_代碼調試

主程序設計

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);
			}
			}
		}