|
|
本設(shè)計(jì)是一個寵物飼養(yǎng)可控溫定時投喂箱,該飼養(yǎng)箱以STC89C51單片機(jī)為主控芯片,配合多組基礎(chǔ)模塊。我們根據(jù)所飼養(yǎng)寵物的需求,通過按鍵設(shè)定基準(zhǔn)溫度,設(shè)定投喂時間。為了更加清晰的顯示效果,我們將所有需要觀測的數(shù)據(jù)統(tǒng)一顯示在0.96寸OLED顯示屏上。為了保存設(shè)定的基準(zhǔn)溫度和投喂時間,我們采用AT24C02一個2K位串行CMOS E2PROM保存數(shù)據(jù),防止掉電丟失,避免因突發(fā)情況破壞飼養(yǎng)箱的工作狀態(tài)。
1、溫度控制
依靠DS18B20溫度傳感器檢測飼養(yǎng)箱內(nèi)當(dāng)前溫度。單片機(jī)采集到當(dāng)前溫度后與基準(zhǔn)溫度對比,若當(dāng)前溫度高于基準(zhǔn)溫度,單片機(jī)驅(qū)動與風(fēng)扇相連接的繼電器,使風(fēng)扇工作,對飼養(yǎng)箱進(jìn)行降溫處理;若當(dāng)前溫度低于基準(zhǔn)溫度,單片機(jī)驅(qū)動與加熱器相連接的繼電器,使加熱器工作,對飼養(yǎng)箱進(jìn)行加熱處理。
2、定時控制
依靠DS1302時鐘模塊提供標(biāo)準(zhǔn)時間,保證飼養(yǎng)箱的時間標(biāo)準(zhǔn)與生活狀態(tài)一致。單片機(jī)實(shí)時讀取當(dāng)前時間,若讀取的當(dāng)前時間與設(shè)定的投喂時間一致時,單片機(jī)驅(qū)動蜂鳴器,蜂鳴器報警,提示已到投喂時間。待投喂后,蜂鳴器恢復(fù)靜息狀態(tài),等待下一次報警。
1.1.2設(shè)計(jì)原理
在保證每個部件正確供電的情況下,STC89C51單片機(jī)作為主控芯片,AT24C02數(shù)據(jù)存儲器用于存儲數(shù)據(jù),DS18B20溫度傳感器用于測量溫度,DS1302時鐘模塊用于規(guī)定當(dāng)前時間,OLED顯示屏用于顯示參數(shù),獨(dú)立按鍵用于修改溫度閾值和定時時間,兩個LED分別用于照明和提示,蜂鳴器用于報警,繼電器用于打開加熱棒和風(fēng)扇
制作出來的實(shí)物圖如下:
實(shí)物圖
電路原理圖如下:
原理圖
單片機(jī)源程序如下:
- #include "reg52.h"
- #include "config.h"
- #include "control.h"
- #include "oled.h"
- #include "Ds18b20.h"
- #include "ds1302.h"
- #include "menu.h"
- unsigned int Actural_temp = 0; //讀取的實(shí)際溫度 *10 3位
- unsigned char OLED_Reflash = 0; //刷新費(fèi)時間,分三次刷新。
- void DelayXms(unsigned int xtime)
- {
- unsigned char i = 0;
- for(;xtime>0;xtime--)
- for(i = 110;i>0;i--);
- }
- void ALL_Init(void)
- {
- T0Init(); //定時10ms
- OLED_Init(); //初始化OLED
- OLED_Clear();
- start_window();
- DS18B20_init();
- TIME[2] = ZH_Data(1,23);
- TIME[1] = ZH_Data(1,58);
- TIME[0] = ZH_Data(1,58);
- Ds1302Init();
- SET_Init();
-
- LIGHT_LED = 1;
- FEED_BEEP = 1;
- HIGH_RELAY = 1;
- LOW_RELAY = 1;
-
- }
- void main(void)
- {
- unsigned char BeepFlag = 0;
- ALL_Init();
- DelayXms(1000);
- while(1)
- {
- KeyPorc();
- if(xDelay(TIMERINDEX1,1) == TIMEISUP)
- {
- EA = 0; //采集對時序要求嚴(yán)格,不允許打斷
- Actural_temp = temper_change();
- Ds1302ReadTime();
- KeyRead();
- EA = 1;
- }
-
- if(xDelay(TIMERINDEX2,5) == TIMEISUP)
- {
- DataProce();
- StateReflash();
- }
-
- if(xDelay(TIMERINDEX3,10) == TIMEISUP) //100ms
- {
- OLED_Reflash++;if(OLED_Reflash > 5)OLED_Reflash = 0;
- menuEventHandle();
- }
-
- if(xDelay(TIMERINDEX4,100) == TIMEISUP) //1s
- {
-
- if(flagData.feedFlag)
- {
- BeepFlag++;
- FEED_BEEP ^= 1;
- if(BeepFlag > 6)
- {
- BeepFlag = 0;
- FEED_BEEP = 1;
- flagData.feedFlag = 0;
- }
- }
-
- }
-
- }
-
- }
復(fù)制代碼
程序原理圖和word文檔下載:
single-chip-ke-master.7z
(1.87 MB, 下載次數(shù): 0)
2026-3-17 15:35 上傳
點(diǎn)擊文件名下載附件
|
評分
-
查看全部評分
|