|
本設(shè)計(jì)通過(guò)對(duì)溫度測(cè)量系統(tǒng)、上水循環(huán)系統(tǒng)、輔助加熱系統(tǒng),這三個(gè)太陽(yáng)能熱水器中最重要的組成部分的自動(dòng)控制設(shè)計(jì),使其太陽(yáng)能的利用率達(dá)到最大化,通過(guò)科技的手段造福人類,在proteus中進(jìn)行仿真實(shí)現(xiàn)家用太能熱水控制器的主要功能,在一定程度上提高使系統(tǒng)的利用率!
太陽(yáng)能熱水控制器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (30.89 KB, 下載次數(shù): 84)
下載附件
2018-5-27 19:09 上傳
0.png (19.3 KB, 下載次數(shù): 88)
下載附件
2018-5-27 19:09 上傳
太陽(yáng)能控制器的單片機(jī)源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #include <stdio.h>
- #include <lcd1602.h>
- #include <ds1302.h>
- #include <ds18b20.h>
- #include <depth.h>
- sbit heater = P2^3;
- sbit k1=P1^0; //選擇按鍵
- sbit k2=P1^1; //增加按鍵
- sbit k3=P1^2; //減小按鍵
- sbit k4=P1^3;// 確認(rèn)按鍵
- sbit k5=P1^4; //加熱開(kāi)關(guān)按鍵
- sbit k6=P1^5;// 上水開(kāi)關(guān)
- unsigned char x;
- unsigned char flag = 0;
- unsigned char temp_max = 55; //保存溫度變量
- unsigned char temp_min = 40; //保存濕度變量
- unsigned char presskeynum = 0; //按鍵次數(shù)變量
- unsigned char Current_MIN[4];
- unsigned char Current_MAX[4];
- unsigned char integer,symbol,decimal;
- /************更新***************/
- void updatatime()
- { systemtime datetime;
- dsgettime(&datetime); //獲取時(shí)間
- lcdoutput(0,0,"DATE:"); //日期
- datezstr(&datetime,datestring);
- lcdoutput(5,0,"20");
- lcdoutput(7,0,datestring);
- lcdoutput(0,1,"TIME:");
- for(x=8;x>0;x--) //循環(huán)顯示時(shí)間
- {
- converttemp();
- dsgettime(&datetime);
- timezstr(&datetime,timestring);
- lcdoutput(5,1,timestring);
- delay_ms(5);
- }
- }
- void updatatemp()
- {
- lcdoutput(0,0,"SWEN:"); //水溫
- lcdoutput(0,1,"SWEI:"); //水位
- lcdoutput(13,0,Current_MAX); //水溫
- lcdoutput(13,1,Current_MIN);
- for(x=8;x>0;x--) //循環(huán)顯示時(shí)間
- {
- converttemp();
- lcdoutput(5,0,tempstr);
- depthprocess();
- delay_ms(5);
- }
- }
- void key()
- {
- if (k1==0) //調(diào)整按鍵檢測(cè)
- {
- delay_ms(1);
- if (k1==0)
- {
- presskeynum++; flag = ~flag;
- if(presskeynum==4)
- presskeynum=0;
- while(k1==0); //若一直按下,循環(huán)
- lcdwrite(command,clear_screen);
- }
- }
- if(presskeynum==1)//設(shè)置模式溫度上限
- {
- if(k2==0) // 加
- {
- delay_ms(1);
- temp_max++;
- if (temp_max>99)
- temp_max=99;
- while(k2==0); //加上此句必須松按鍵才處
- lcdwrite(command,clear_screen);
- }
- if(k3==0)//減
- {
- delay_ms(1);
- temp_max--;
- if (temp_max<1)
- temp_max=1;
- while(k3==0); //加上此句必須松按鍵
- lcdwrite(command,clear_screen);
- }
- }
- if(presskeynum==3)//濕度設(shè)置
- {
- if(k2==0)// 加
- {
- delay_ms(1);
- temp_min++;
- if (temp_min>99)
- temp_min=100;
- while(k2==0);
- lcdwrite(command,clear_screen);
- }
- if(k3==0)//減
- {
- delay_ms(1);
- temp_min--;
- if (temp_min<1)
- temp_min=1;
- while(k3==0); //這句是調(diào)試加入的
- lcdwrite(command,clear_screen);
- }
- }
- if(k4==0)// 退出鍵 //設(shè)置完初始值以后通過(guò)IIC寫入24c02并清屏
- {
- delay_ms(1);
- if((k4==0)&&(flag != 0))
- {
- while(k4==0);
- lcdwrite(command,clear_screen);
- lcdoutput_delay(0,0,"SAVE DATE...");
- }
- }
- }
- /************主函數(shù)***************/
- void main()
- {
- ds1302init();
- lcdini();
- while(1)
- {
- key();
- sprintf(Current_MAX,"+%2d",(int)temp_max);
- sprintf(Current_MIN,"-%2d",(int)temp_min);
-
- dsgettemp(&integer,&decimal,&symbol); //獲取溫度
- if(integer<temp_min) //自動(dòng)加熱設(shè)置temp的上下限
- {
- heater=0;
- }
- else if(integer>temp_max)
- {
- heater=1;
- }
- if(flag)
- {
- updatatemp();
- }else
- {
- updatatime(); //關(guān)鍵顯示部分
- }
- }
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
工程源碼.zip
(65.66 KB, 下載次數(shù): 132)
2018-5-27 16:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
仿真文件.zip
(69.78 KB, 下載次數(shù): 112)
2018-5-27 16:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|