單片機加熱定時器.doc_第1頁
單片機加熱定時器.doc_第2頁
單片機加熱定時器.doc_第3頁
單片機加熱定時器.doc_第4頁
單片機加熱定時器.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.1 設(shè)計題目:加熱定時器設(shè)計1.2.1 設(shè)計目的(1) 掌握可任意預(yù)置的定時構(gòu)成、原理與設(shè)計方法;(2) 熟悉集成電路的使用方法。(3) 通過應(yīng)用單片機系統(tǒng),培養(yǎng)創(chuàng)新意識,提高動手能力。1.2.2 基本要求(1)設(shè)計要求:為系熱水器定時加熱(2)每天早7:00起加熱,晚10:00起加熱,保證熱水; 周末全天供水。 (3)控制面板設(shè)計。1.2.3 基本優(yōu)點 傳統(tǒng)的大容量電熱水器的加熱時間一般都比較長,如果熱水器一直開著,則會一直耗能耗電,而定時開關(guān)控制器則可有效解決這些問題,使電熱水器使用起來更加舒適省電。這樣,電熱水器不僅可以充分利用閑置的時間,避免用戶使用時長時間的等待,減少不必要的保溫,也可以更加節(jié)約電能,特別對低谷及高峰用電有差價的地區(qū)利用晚間低谷用電開機加熱,白天用電高峰關(guān)機保溫,便能大量節(jié)約電費開支。本文中的定時控制器主要是以單片機at89c51作為核心控制元件,通過外圍電路來控制熱水器的電源,以達到定時開關(guān)機的目的。2 設(shè)計思路 1 硬件組成 本電熱水器控制系統(tǒng)在加電后即可進入正常計時狀態(tài),用戶可以隨時校準(zhǔn)時間并設(shè)定熱水器的開關(guān)時間,以便控制器能夠在設(shè)定的開關(guān)時刻通過單片機的輸出端口控制輸出繼電器的動作,進而控制熱水器的啟閉。該系統(tǒng)的硬件原理圖見圖1所示。 本系統(tǒng)的核心單片機at89c2051為20腳300mil封裝,是一種帶有2kb flash e2prom的單片機。該單片機除了少了兩個并口外,能兼容mcs-51系列單片機的所有功能,且具備體積小、功能強、運行速度快等特點。該電路可通過單片機的p37口連接一個鍵盤電路來實現(xiàn)對參數(shù)的人工自由設(shè)定,同時可通過串口連接8位led數(shù)碼管,以分別顯示小時、分鐘和秒。系統(tǒng)定時啟動是通過p30口完成的。程序開始時這三個口的輸出狀態(tài)都是低電平,at89c51通過程序查詢p30口輸出on或off的狀態(tài)預(yù)置時間是否已到,如果已到時間,則改變相應(yīng)的輸出狀態(tài),從而完成對外部電路的控制。本設(shè)計采用時鐘芯片ds1302來控制時間。美國dallas公司推出的具有涓細電流充電能力的低功耗實時時鐘電路ds1302的結(jié)構(gòu)、工作原理及其在實時顯示時間中的應(yīng)用。它可以對年、月、日、周、日、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。ds1302 是美國dallas公司推出的一種高性能、低功耗、帶ram的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器。ds1302是ds1202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。 1.1 引腳功能及結(jié)構(gòu)ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc1+0.2v時,vcc2給ds1302供電。當(dāng)vcc2小于vcc1時,ds1302由vcc1供電。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc2.0v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細說明。sclk為時鐘輸入端。1.2 數(shù)據(jù)輸入輸出(i/o)在控制指令字輸入后的下一個sclk時鐘的上升沿時,數(shù)據(jù)被寫入ds1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個sclk脈沖的下降沿讀出ds1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0位到高位7。 2.4 ds1302的寄存器ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式, 下面重點介紹鍵盤、顯示以及輸出控制這三種電路。 11 顯示電路 本系統(tǒng)中的顯示電路主要由七段共陽顯示譯碼器74ls47、3線8線譯碼器74thc138、7個pnp型三極管和六個數(shù)碼管組成。通過at89c2051的p14p17口將要顯示字符的bcd碼輸出到74ls47的四個輸人端,然后譯碼并輸出相應(yīng)的筆段來驅(qū)動led數(shù)碼管(共陽)。led數(shù)碼管顯示采用動態(tài)掃描方式,即在某一時刻,只有一個數(shù)碼管被點亮。數(shù)碼管的位選信號由at89c2051的p33p35輸出,并經(jīng)74hcl38譯碼后通過三極管放大,以驅(qū)動相應(yīng)的數(shù)碼管。 12 鍵盤電路 鍵盤電路跟顯示電路一樣采用掃描方式,并利用動態(tài)顯示時的數(shù)碼管驅(qū)動位置信號來判斷相應(yīng)按鍵的狀態(tài)。單片機的p33p35口輸出的bcd碼經(jīng)譯碼器譯碼后,相應(yīng)的y口呈低電平,而at89c205 1的p37口平時為高電平(由于有上拉電阻),只有當(dāng)某一按鍵按下時,p37才被下拉為低,這時,單片機將利用程序查詢p37是否為低,如果p37為低電平,則讀回單片機p33p35口的值(從緩沖區(qū)讀取),并判斷是那個按鍵按下然后調(diào)用相應(yīng)的處理程序進行處理。 13 輸出控制電路 單片機的控制輸出是通過p30p32口完成的。當(dāng)程序開始時,這三個口的輸出狀態(tài)都是低電平,at89c2051通過程序查詢?nèi)份敵龅膐n或off狀態(tài)預(yù)置時間是否已到,若時間到,則改變相應(yīng)的輸出狀態(tài),以完成對外部電路的控制。中斷功能申請寄存器ie介紹中斷允許寄存器ie(可以打開和屏蔽相應(yīng)的中斷)ex0/ex1 et1/et0 es 位:分別是外部中斷、定時中斷、串口中斷 允許控制位。 =0 :禁止中斷; =1 :允許中斷。ea:總的中斷允許控制位(總開關(guān)): =0 :禁止全部中斷;=1 :允許中斷。模式設(shè)置(杯子的大?。┕ぷ鞣绞郊拇嫫鱰mod高四位對于定時器1,低四位對應(yīng)定時器0m1,m0:工作方式選擇位 。工作方式0 =00:13位定時器/計數(shù)器;工作方式1 =01:16位定時器/計數(shù)器(常用);工作方式2 =10:可自動重裝的8位定時器/計數(shù)器(常用);工作方式3 =11:t0 分為2個8位定時器/計數(shù)器;僅適用于t0。c/t :定時方式/計數(shù)方式選擇位。 = 0 :內(nèi)部提供信號脈沖。 = 1: 外部提供信號脈沖。gate:定時器啟動控制位 = 0 :程序控制。 = 1 :硬件控制。例如:tmod = 0000 0001 =0x01; /設(shè)定時器0為16位模式1 例如:tmod = 0001 0000 =0x10; /設(shè)定時器1為16位模式1 如何選擇16位內(nèi)部脈沖計數(shù)寄存器,并選擇定時器0作為為定時器,且用軟件方式實現(xiàn)定時器啟動控制。tmod的值為多少?定時0,選擇低四位(高四位全為0)16位計數(shù)寄存器 選工作方式1 即m1 m0值為01內(nèi)部脈沖 c/t 值為0軟件啟動定時器 gate 值為 0tmod=0000 0001 =0x01定時器控制寄存器tcon(高四位與定時器中斷有關(guān),低四位與外部中斷有關(guān))tr0/tr1:定時器運行啟停控制位(可由用戶通過軟件設(shè)置 )。 =0:定時器停止運行; =1:定時器啟動運行。tf0/tf1:定時器溢出中斷申請標(biāo)志位(由硬件自動置位)。 =0:定時器未溢出;=1:定時器溢出(由全“1”變成全“0”)時由硬件自動置位,申請中斷,中斷被cpu響應(yīng)后由硬件自動清零。7、如何啟動定時器和判斷是否溢出trx賦值為1,即可啟動相應(yīng)的定時器如果tfx的值為1,即可以判斷計數(shù)寄存器的值已經(jīng)溢出。可以用位賦值。tcon=0001 0000 =0x10 代表什么?即tr0的值為1,tf0的值為0。定時器已經(jīng)啟動,并且計數(shù)寄存器的計數(shù)值還沒有溢出。(不能產(chǎn)生有效的內(nèi)容中斷信號)程序1:仿真實現(xiàn)定時器1s led閃爍一次 #include sbit led=p20;int count=0; /50ms次數(shù)記錄timer_csh() /定時中斷初始化函數(shù) ie=0x82; /允許cpu中斷和定時計數(shù)器0中斷開關(guān) 1000 0010 tmod = 0x01; /設(shè)定時器0和1為16位模式1 th0 = 0x3c; /12m晶振 定時 50ms tl0 = 0xb0; void main() timer_csh(); /定時中斷初始化tr0 = 1;/開始計數(shù) while(1); /主程處于無限循環(huán)這里可以處理其他的事情/定時器0中斷處理void timeint(void) interrupt 1 count+; if(count=20) /1s到 count=0; led=led; th0=0x3c; /定時初始值 tl0=0xb0; 2 軟件設(shè)計 21 主程序流程 本系統(tǒng)的主程序工作過程是首先循環(huán)進行8個數(shù)碼管的掃描顯示(disply段),然后比較所有預(yù)置時間(comp段)是否與當(dāng)前時間相等,如相等則轉(zhuǎn)向相應(yīng)處理程序。比較完成(或處理完成)后,再判斷有無按鍵(pp2段)按下,沒有則返回繼續(xù)顯示、比較、判斷;有按鍵按下則轉(zhuǎn)向相應(yīng)的處理程序。按鍵轉(zhuǎn)移采用偏移量加表格跳轉(zhuǎn)轉(zhuǎn)移法(key段)。預(yù)置時間比較則采用逐一比較法,即對每一個預(yù)設(shè)的值都進行比較,如果相等,則進行相應(yīng)的處理。在具體比較時(comp1段),首先比較th值,如不相等,則直接轉(zhuǎn)出并置時間到標(biāo)志ccb為0,而如果th、tm、ts全部對應(yīng)相等,則置該標(biāo)志為1,其軟件流程見圖2所示。 此次設(shè)計的可預(yù)置熱水器控制電路,實現(xiàn)對時間和分鐘的現(xiàn)實,可以設(shè)置熱水器的使用時間,使熱水器自動加熱和停止,并且設(shè)置了水位比較電路可以進行報警。由石英晶體振蕩器產(chǎn)生頻率為1000hz的信號,經(jīng)過三片74ls160進行分頻后,得到1hz的秒脈沖信號,再經(jīng)過2片74ls90連接成的60進制計數(shù)器后得到1/60秒的分脈沖信號。將分信號傳輸給兩片74ls290連成的六十進制計數(shù)器進行分的計數(shù),再由分計數(shù)的進位驅(qū)動二十四進制的時計數(shù)器。時間計數(shù)器連接七段譯碼顯示器進行時間的現(xiàn)實。預(yù)置時間的電路與此相同。預(yù)置時間計數(shù)器產(chǎn)生的輸出進入減法器進行自動減一的設(shè)置,減法器的輸出信號進入比較器,與正常時間計數(shù)器產(chǎn)生的信號進行比較。當(dāng)兩者相等時,自動開始加。由時計數(shù)器和分計數(shù)器產(chǎn)生的輸出接入比較器,與設(shè)定時間電路的時計數(shù)器和分計數(shù)器相比較,當(dāng)時間相等時熱水器停止加熱。由傳感器感知水位,經(jīng)由模數(shù)轉(zhuǎn)換器轉(zhuǎn)換成八位二進制數(shù),再由二進制bcd碼轉(zhuǎn)換器將其轉(zhuǎn)換成8421bcd碼,輸出的數(shù)據(jù)經(jīng)計數(shù)器傳入七段譯碼顯示器進行水位的顯示。從水位計數(shù)器引出的信號進入比較器,與比較器中設(shè)置的水位進行比較,當(dāng)其水位低于設(shè)定值時,自動停止工作并進行水位報警。其中水位報警電路由555定時器構(gòu)成的單穩(wěn)態(tài)單路和多諧振蕩電路組成。 22 秒脈沖發(fā)生器的軟件設(shè)計 系統(tǒng)中的秒脈沖發(fā)生器是由定時器t0和內(nèi)存空間tt0配合完成的。其中t0工作于l 6位計數(shù)器模式,當(dāng)t0向上計數(shù)并由全1變?yōu)槿?時產(chǎn)生中斷。本程序中,t0的初值為0dc00h,大約001秒中斷一次。這里使用的晶振頻率為110592mhz,由此可計算出日誤差約為078 s。其操作流程如圖3所示,系統(tǒng)產(chǎn)生中斷后,首先保存acc和psw的值,然后為t0重裝初值,并判斷中斷次數(shù)是否小于100,若是,則轉(zhuǎn)出中斷服務(wù),反之則將秒計數(shù)器加1。秒計數(shù)器大于59時,則為分計數(shù)器加1,同時秒計數(shù)器清0。同樣,分計數(shù)器如大于59,則為時計數(shù)器加1,同時分計數(shù)器清0。時計數(shù)器如大于23時則清0并轉(zhuǎn)出中斷服務(wù)。td中斷100次的時間剛好為1秒鐘。 附圖 程序#include #include ds1302.h/*端 口 定 義*/sbit hot = p17;sbit add_hour = p30;sbit add_min = p31; unsigned char qiangdanum=0;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f;/unsigned char code duan=;unsigned char ge=0,shi=0; void delay(unsigned int ms) /晶振12m unsigned int i,j;for(j=ms;j0;j-) for(i=0;i120;i+); void display(void) p2=0x7f;p0=tableweek;delay(5);p2=0xbf;p0=0x40;delay(5);p2=0xdf;p0=tableh1;delay(5);p2=0xef;p0=tableh0;delay(5);p2=0xf7;p0=tablemi1;delay(5);p2=0xfb;p0=tablemi0;delay(5);p2=0xfd;p0=tables1;delay(5);p2=0xfe;p0=tables0;delay(5);/*write_ds1302(0x8e,0x00);/寫保護寄存器,在對時鐘或ram寫前wp一定要為0/write_ds1302(0x8c,year);/年/write_ds1302(0x88,month);/月/write_ds1302(0x86,day);/日/write_ds1302(0x8a,week);/星期write_ds1302(0x84,hour);/時write_ds1302(0x82,minute);/分write_ds1302(0x80,second);/秒write_ds1302(0x8e,0x80);/寫保護寄存器*/void changtime()unsigned char change_minute,change_hour;change_minute = minute;change_hour=hour; if(0 = add_min)while(0 = add_min)display(); change_minute+; if( change_minute=90) change_minute=0; if( change_minute%16=10) change_minute+=6; write_ds1302(0x8e,0x00);/寫保護寄存器,在對時鐘或ram寫前wp一定要為0/write_ds1302(0x8c,year);/年/write_ds1302(0x88,month);/月/write_ds1302(0x86,day);/日/write_ds1302(0x8a,week);/星期/write_ds1302(0x84,hour);/時write_ds1302(0x82,change_minute);/分/write_ds1302(0x80,second);/秒write_ds1302(0x8e,0x80);/寫保護寄存器 if( 0=add_hour) while(0 =add_hour)display(); change_hour+; if( change_hour=0x24) change_hour=0; if( change_hour%16=10) change_hour+=6; write_ds1302(0x8e,0x00);/寫保護寄存器,在對時鐘或ram寫前wp一定要為0/write_ds1302(0x8c,year);/年/write_ds1302(0x88,month);/月/write_ds1302(0x86,day);/日/write_ds1302(0x8a,week);/星期 write_ds1302(0x84,change_hour);/時/write_ds1302(0x82,change_minute);/分/write_ds1302(0x80,second);/秒write_ds1302(0x8e,0x80);/寫保護寄存器void main ()hot = 1; initial_ds1302(); while(1)read_time(); /讀時間display();/ if()changtime();if(week=0x07 & hour=0x22) hot = 0;elsehot = 1;else hot = 0; 3 結(jié)束語 本文通過以at89c2051單片機為核心并輔以外圍電路的設(shè)計方法實現(xiàn)了低成本的控制要求。該定時時控制器可定時控制并顯示有關(guān)參數(shù),在滿足系統(tǒng)要求的同時,又具備簡單、經(jīng)濟之特點。此外,靈活的鍵盤輸入方式來設(shè)定參數(shù)可增加系統(tǒng)的靈活性。 日前,采用本設(shè)計制作的定時控制器已經(jīng)通過測試并投入使用,實際使用結(jié)果證明:該定時控制器運行可靠,操作方便,可用在傳統(tǒng)的不帶定時功能的熱水器上,而且既經(jīng)濟又實用,值得推廣??深A(yù)置熱水器控制電路是一個十分接近于生活的課題,其中采用數(shù)字電路實現(xiàn)對時和分的顯示計時裝置。整個熱水器電路只要有晶體振蕩電路、分頻電路、時間顯示電路、譯碼顯示電路、減法器電路、比較電路、模數(shù)轉(zhuǎn)換電路、水位控制電路、報警電路組成。熱水器電路廣泛應(yīng)用于生活中,為人們的生活提供了便利的條件。經(jīng)過這次對可預(yù)置熱水器控制電路的設(shè)計,我了解了熱水器電路的基本構(gòu)成和原理,同時也更加了解一直基本電路的實現(xiàn)方法。這次的數(shù)字電子課程設(shè)計是一次自我檢驗的機會,我們要將課堂上所學(xué)到知識融會貫通到一個設(shè)計電路中去,而且,僅僅是教科書上所講解的知識是完全不夠的,設(shè)計的過程中,我們需要自己去查找各種各樣的資料,將一些陌生的東西用我們學(xué)過的知識去理解,再把它們應(yīng)用到我們設(shè)計的電路中去。經(jīng)過2個星期的課程設(shè)計,我對數(shù)字電子技術(shù)知識的了解更加深刻,我認(rèn)真研究了幾種電路中應(yīng)用的芯片,將它們與同類的芯片進行比較,選擇出最合適我所設(shè)置電路的芯片。對于計數(shù)器的連接我有了一些掌握,理解了要怎樣連接才可以得到需要的進制、將計數(shù)器用于分頻電路的連接方法。而且在電路我,我還可

溫馨提示

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

評論

0/150

提交評論