定時開關(guān)控制器(gai)_第1頁
定時開關(guān)控制器(gai)_第2頁
定時開關(guān)控制器(gai)_第3頁
定時開關(guān)控制器(gai)_第4頁
定時開關(guān)控制器(gai)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第5章章 定時開關(guān)控制器定時開關(guān)控制器 定時開關(guān)控制器廣泛應用于日常生活與定時開關(guān)控制器廣泛應用于日常生活與工業(yè)生產(chǎn)中的負載電源的通斷,比如,傳統(tǒng)工業(yè)生產(chǎn)中的負載電源的通斷,比如,傳統(tǒng)的大容量電熱水器的加熱時間一般都比較長,的大容量電熱水器的加熱時間一般都比較長,如果熱水器一直開著,則會一直耗能耗電,如果熱水器一直開著,則會一直耗能耗電,而通過定時開關(guān)控制器來設定其電源的通斷而通過定時開關(guān)控制器來設定其電源的通斷時間可有效解決這些問題,使電熱水器使用時間可有效解決這些問題,使電熱水器使用起來更加舒適省電。起來更加舒適省電。通過本項目的學習進一通過本項目的學習進一步掌握單片機定時器步掌握單片機

2、定時器/計數(shù)器和中斷的使用。計數(shù)器和中斷的使用。 5.1 任務描述任務描述 5.2 電路設計電路設計 5.3 軟件設計軟件設計5.1 任務描述任務描述 用單片機實現(xiàn)電源開關(guān)控制,可以由人用單片機實現(xiàn)電源開關(guān)控制,可以由人通過按鍵來設定負載電源的開通過按鍵來設定負載電源的開/關(guān)時間,并且關(guān)時間,并且通過顯示器觀察時間,達到定時開關(guān)機的目通過顯示器觀察時間,達到定時開關(guān)機的目的,實物圖如圖的,實物圖如圖5.1所示。所示。 (a)未加電 (b)項目運行圖5.1 項目實物圖 應用AT89C51單片機為核心,設計具備按鍵功能和數(shù)碼管顯示功能的外圍硬件電路,以便控制器能夠在設定的開關(guān)時刻控制輸出繼電器的動

3、作,進而控制負載電源的啟閉,并完成軟件程序設計??梢詫崿F(xiàn)電源的直接啟實現(xiàn)電源的直接啟動動/關(guān)閉關(guān)閉;也可以通過按鍵設置負載電源的啟按鍵設置負載電源的啟動時間動時間,最大預約時間為最大預約時間為12小時小時。 開始鍵:開始鍵:按下該鍵,電源接通。 關(guān)閉鍵:關(guān)閉鍵:按下該鍵,電源斷。 預約鍵:預約鍵:第一次按下該鍵,可以對電源的接通時間進行小時調(diào)整;第二次按下該鍵,可以對電源的接通時間進行分鐘調(diào)整。 加一鍵:加一鍵:按下該鍵,調(diào)小時時間加一,最大值到11;或調(diào)分鐘時間加一,最大值到59。 減一鍵:減一鍵:按下該鍵,調(diào)小時時間減一,最小值到0;或調(diào)分鐘時間減一,最小可值到0。 預留鍵:預留鍵:本任務

4、中,該鍵預留,用戶可自定義。 顯示功能 按鍵指示燈:按鍵指示燈:只要有按鍵按下,該指示燈均會點亮。 開關(guān)電源指示燈開關(guān)電源指示燈:負載電源處于通的狀態(tài),該燈點亮;否則1S閃爍。 四位數(shù)碼管:四位數(shù)碼管:前兩位為時,后兩位為分。上電即顯示“-”;預約調(diào)時前兩位閃爍,預約調(diào)分后兩位閃爍。預約時間內(nèi)倒計時顯示。負載電源通斷均顯示“-”。 負載電源通斷功能在本項目中,需要實現(xiàn)多個按鍵的輸入識別與控制,以及實現(xiàn)按秒計數(shù)、顯示的顯示控制方法。 為了實現(xiàn)功能要求,選用AT89C51作為電路的控制核心,根據(jù)設計的總體要求劃分出各功能電路塊,其系統(tǒng)組成方框圖如圖5.2。圖5.2 系統(tǒng)組成方框圖5.2 電路設計電

5、路設計 根據(jù)設計要求,選用AT89C51作為電路的控制核心,單片機的主要引腳設計選用如圖5.3所示。該圖中,已經(jīng)包含了時鐘電路、復位電路作為單片機的最小系統(tǒng)。其中,P0.7P0.0作為四位七段數(shù)碼管的段碼輸出端,P1.3P1.0用作位選輸出端;P2.5P2.0及及P3.2用作鍵盤控制輸入端;P3.6為繼電器控制輸出端。圖5.3項目控制單元圖5.4 定時開關(guān)電路仿真圖5.3軟件設計軟件設計參考程序如下:/*定時開關(guān)控制器。按下KEYON鍵,繼電器接通,如設定預約時間,則在預約時間到達后接通;按下KEYOFF鍵,繼電器斷;第一次按下KEYSET,調(diào)小時、數(shù)碼管前兩位閃爍;第二次按下KEYSET,調(diào)

6、分鐘、數(shù)碼管后兩位閃爍;按下KEYINC鍵,小時/分鐘加一;按下KEYDEC鍵,小時/分鐘減一;繼電器接通時,指示燈點亮,否則1s閃爍*/#include #define uchar unsigned char#define uint unsigned intsbit KEYON=P20;sbit KEYOFF=P21;sbit KEYSET=P22;sbit KEYINC=P23;sbit KEYDEC=P24;sbit KEYFREE=P25;sbit POWER=P36;sbit LED=P33;uchar code dispcode=0 x3f, 0 x06, 0 x5b, 0 x4f

7、, 0 x66, 0 x6d, 0 x7d, 0 x07,0 x7f, 0 x6f,0 x40;/0-9 字型碼uchar data disbuf=0,0,0,0; /顯示緩沖區(qū)uchar hour,min; bit Onflag,flag;uchar Setflag;void delay(uchar); /延時函數(shù)void init(void); /初始化函數(shù)uchar GetKeyNum(); /求鍵號void Keyprocess(uchar); /按鍵處理函數(shù)void caculate(); /計時函數(shù)void display(); /顯示函數(shù)void main(void)init()

8、;P1=0 x00;while(1)display();void init(void)/定時器0、 1,外部中斷0初始化TMOD = 0 x11; / 定時器0 ,工作模式1, 16位定時方式TH0=(65536-50000)/256; /設定定時初值高八位TL0=(65536-50000)%256; /設定定時初值低八位TH1=(65536-50000)/256; /設定定時初值高八位TL1=(65536-50000)%256; /設定定時初值低八位 IT0=1; /選擇INT0為下降沿觸發(fā)方式EX0=1;ET1=1;ET0=1;EA=1;TR0=1;void display( ) /顯示函

9、數(shù) uchar i,j=0 x08; /=0 x08位選初始值if(Setflag=0)&!(min|hour) /數(shù)碼管顯示“-”for(i=0;i4;i+) disbufi=dispcode10;else/正常顯示時間disbuf0 = dispcodemin%10; / 秒個位disbuf1 = dispcodemin/10;/ 秒十位disbuf2 = dispcodehour%10+0 x80;/ 分個位disbuf3 = dispcodehour/10;/ 分十位if(Setflag!=0)&flag) /如果調(diào)時,數(shù)碼管閃爍顯示for(i=0;i2) P0=0;

10、/不顯示前面的0;else P0=disbufi; if(Setflag=1) P1=j&0 xfc;/調(diào)時,關(guān)斷前兩位位碼 else P1=j&0 xf3;/調(diào)分,關(guān)斷后兩位位碼delay(5);/延時2.5ms;P1=0 x00;j=j1;else /數(shù)碼管正常顯示for(i=0;i2) P0=0; /不顯示前面的0;else P0=disbufi; P1=j; / 位選通delay(5); /延時2.5ms;P1=0 x00;j=j1; void int0( ) interrupt0 using 1 / 外部中斷0中斷函數(shù)uchar keynum;display();/動

11、態(tài)顯示程序作為消抖if(INT0=0)/判斷是否有鍵按下keynum=GetKeyNum(); /有效鍵,獲取鍵值while(INT0=0); /等待按鍵釋放 Keyprocess(keynum); /按鍵處理 Void time0( ) interrupt1 / 定時器0中斷,處理調(diào)時、顯示器閃爍static uchar ledcnt,num;TH0=(65536-50000)/256; /設定定時初值高八位TL0=(65536-50000)%256; /設定定時初值低八位 if(Onflag&(hour|min)!=0)|!Onflag) /指示燈每隔0.5s閃爍 ledcnt+;

12、 if(ledcnt=10) ledcnt=0; LED=LED; if(Setflag!=0)/調(diào)時閃爍 num+; if(num=5) num=0; flag=flag; void time1( ) interrupt 3 / 定時器1中斷,處理計時TH1=(65536-50000)/256; /設定定時初值高八位TL1=(65536-50000)%256; /設定定時初值低八位 caculate(); /計時uchar GetKeyNum( ) /求鍵號uchar temp;if(KEYON=0)temp=1;if(KEYOFF=0) temp=2;if(KEYSET=0) temp=3

13、;if(KEYINC=0) temp=4;if(KEYDEC=0) temp=5;if(KEYFREE=0) temp=6;return(temp);void Keyprocess(uchar x) /按鍵處理函數(shù)switch(x)case 1: /KEYON處理程序Onflag=1; /開Onflag標志Setflag=0; /關(guān)調(diào)時標志if(!Setflag)&!(hour|min) /沒有調(diào)時且未處于預約,繼電器通POWER=0;LED=0;else TR1=1;/定時器T1運行,執(zhí)行計時程序break;case 2: /KEYOFF,關(guān)處理,標志清零,繼電器斷 Onflag=0

14、; Setflag=0; hour=0;min=0;POWER=1;LED=1;break;case 3: /預約調(diào)時/調(diào)分鍵,處理調(diào)時標志 if(Onflag=0) Setflag+;if(Setflag=3) Setflag=1;break;case 4: /加一鍵, if(Setflag=1) /調(diào)時鍵,加小時處理,最大11 hour+;if(hour=12) hour=0;if(Setflag=2) /調(diào)分鍵,加分處理,最大59min+;if(min=60) min=0;break;case 5: /減一鍵 if(Setflag=1) /調(diào)時鍵,減小時處理,最小0 hour-; if(hour=-1) hour=12; if(Setflag=2) /調(diào)分鍵,減分處理,最小0min-;if(min=-1) min=59;break;void caculate( ) /計算時間static uint tcount;if(hour|min)!=0)t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論