單片機(jī)課程設(shè)計---加熱定時器_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  嵌入式系統(tǒng)課程設(shè)計 </p><p>  設(shè)計名稱 加熱定時器 </p><p>  專業(yè)班級 </p><p>  學(xué) 號 </p><p>  姓 名 </p><p>  指導(dǎo)教師

2、 </p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  注:課程設(shè)計完成后,學(xué)生提交的歸檔文件應(yīng)按,封面—任務(wù)書—說明書—圖紙的順序進(jìn)行裝訂上交(大張圖紙不必裝訂)</p><p>  專業(yè)班級 學(xué)號 姓名 成績

3、 </p><p>  一.實驗?zāi)康?</p><p>  1、 掌握可任意預(yù)置的定時構(gòu)成、原理與設(shè)計方法;</p><p>  2、 熟悉集成電路的使用方法。</p><p>  

4、3、通過應(yīng)用單片機(jī)系統(tǒng),培養(yǎng)創(chuàng)新意識,提高動手能力。 </p><p>  二.設(shè)計要求 </p><p>  1、每天早7:00起加熱,晚10:00起加熱,保證熱水; 周末全天供水。</p><p&

5、gt;  2、控制面板設(shè)計。 </p><p>  主要設(shè)計參數(shù): </p>

6、<p>  1、能準(zhǔn)確實現(xiàn)加熱時間控制 。 </p><p><b>  2、保證熱水供應(yīng)。</b></p><p><b>  三.定時加熱器優(yōu)點</b></p><p>  傳統(tǒng)的大容量電熱

7、水器的加熱時間一般都比較長,如果熱水器一直開著,則會一直耗能耗電,而定時開關(guān)控制器則可有效解決這些問題,使電熱水器使用起來更加舒適省電。這樣,電熱水器不僅可以充分利用閑置的時間,避免用戶使用時長時間的等待,減少不必要的保溫,也可以更加節(jié)約電能,特別對低谷及高峰用電有差價的地區(qū).利用晚間低谷用電開機(jī)加熱,白天用電高峰關(guān)機(jī)保溫,便能大量節(jié)約電費(fèi)開支。本文中的定時控制器主要是以單片機(jī)AT89C51作為核心控制元件,通過外圍電路來控制熱水器的電

8、源,以達(dá)到定時開關(guān)機(jī)的目的。</p><p>  四.設(shè)計原理 </p><p><b>  1 硬件組成</b></p><p>  本電熱水器控制系統(tǒng)在加電后即可進(jìn)

9、入正常計時狀態(tài),用戶可以隨時校準(zhǔn)時間并設(shè)定熱水器的開關(guān)時間,以便控制器能夠在設(shè)定的開關(guān)時刻通過單片機(jī)的輸出端口控制輸出繼電器的動作,進(jìn)而控制熱水器的啟閉。該系統(tǒng)的硬件原理圖見圖1所示。</p><p>  本系統(tǒng)的核心單片機(jī)AT89C2051為20腳300MIL封裝,是一種帶有2KB FLASH E2PROM的單片機(jī)。該單片機(jī)除了少了兩個并口外,能兼容MCS-51系列單片機(jī)的所有功能,且具備體積小、功能強(qiáng)、運(yùn)行速

10、度快等特點。</p><p>  1.1 引腳功能及結(jié)構(gòu)</p><p>  DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.7

11、68kHz晶振。RST是復(fù)位/片選線,通過把RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時,在Vcc>2.0V之前,RST必須保持低電平。只有在

12、SCLK為低電平時,才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說明。SCLK為時鐘輸入端。</p><p>  1.2 數(shù)據(jù)輸入輸出(I/O)</p><p>  在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位0

13、位到高位7。 </p><p>  1.3 DS1302的寄存器</p><p>  DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式,</p><p>  1.4鍵盤、顯示以及輸出控制這三種電路。</p><p><b>  1.41 顯示電路</b></p>&l

14、t;p>  本系統(tǒng)中的顯示電路主要由七段共陽顯示譯碼器74LS47、3線-8線譯碼器74tHC138、7個PNP型三極管和六個數(shù)碼管組成。通過AT89C2051的P1.4~P1.7口將要顯示字符的BCD碼輸出到74LS47的四個輸人端,然后譯碼并輸出相應(yīng)的筆段來驅(qū)動LED數(shù)碼管(共陽)。LED數(shù)碼管顯示采用動態(tài)掃描方式,即在某一時刻,只有一個數(shù)碼管被點亮。數(shù)碼管的位選信號由AT89C2051的P3.3~P3.5輸出,并經(jīng)74HCl

15、38譯碼后通過三極管放大,以驅(qū)動相應(yīng)的數(shù)碼管。</p><p><b>  1.42 鍵盤電路</b></p><p>  鍵盤電路跟顯示電路一樣采用掃描方式,并利用動態(tài)顯示時的數(shù)碼管驅(qū)動位置信號來判斷相應(yīng)按鍵的狀態(tài)。單片機(jī)的P3.3~P3.5口輸出的BCD碼經(jīng)譯碼器譯碼后,相應(yīng)的Y口呈低電平,而AT89C205 1的P3.7口平時為高電平(由于有上拉電阻),只有當(dāng)某

16、一按鍵按下時,P3.7才被下拉為低,這時,單片機(jī)將利用程序查詢P3.7是否為低,如果P3.7為低電平,則讀回單片機(jī)P3.3~.P3.5口的值(從緩沖區(qū)讀取),并判斷是那個按鍵按下.然后調(diào)用相應(yīng)的處理程序進(jìn)行處理。</p><p>  1.43 輸出控制電路</p><p>  單片機(jī)的控制輸出是通過P3.0~P3.2口完成的。當(dāng)程序開始時,這三個口的輸出狀態(tài)都是低電平,AT89C2051通

17、過程序查詢?nèi)份敵龅腛N或OFF狀態(tài)預(yù)置時間是否已到,若時間到,則改變相應(yīng)的輸出狀態(tài),以完成對外部電路的控制。中斷功能申請寄存器IE介紹</p><p>  中斷允許寄存器IE(可以打開和屏蔽相應(yīng)的中斷)</p><p>  EX0/EX1 ET1/ET0 ES 位:分別是外部中斷、定時中斷、串口中斷 允許控制位。</p><p>  =0 :禁止中斷;

18、 =1 :允許中斷。</p><p>  EA:總的中斷允許控制位(總開關(guān)):</p><p>  =0 :禁止全部中斷; =1 :允許中斷。</p><p>  工作方式寄存器TMOD</p><p>  高四位對于定時器1,低四位對應(yīng)定時器0 M1,M0:工作方式選擇位 。</p&g

19、t;<p>  工作方式0 =00:13位定時器/計數(shù)器;工作方式1 =01:16位定時器/計數(shù)器(常用);</p><p>  工作方式2 =10:可自動重裝的8位定時器/計數(shù)器(常用);工作方式3 =11:T0 分為2個8位定時器/計數(shù)器;僅適用于T0。</p><p>  C/T :定時方式/計數(shù)方式選擇位。</p>

20、<p>  = 0 :內(nèi)部提供信號脈沖。 = 1: 外部提供信號脈沖。</p><p>  GATE:定時器啟動控制位</p><p>  = 0 :程序控制。 = 1 :硬件控制。</p><p>  例如:TMOD = 0000 0001 =0x01; //設(shè)定時器0為16位模式1 </p><p&

21、gt;  例如:TMOD = 0001 0000 =0x10; //設(shè)定時器1為16位模式1 </p><p>  如何選擇16位內(nèi)部脈沖計數(shù)寄存器,并選擇定時器0作為為定時器,且用軟件方式實現(xiàn)定時器啟動控制。TMOD的值為多少?</p><p>  定時0,選擇低四位(高四位全為0)</p><p>  16位計數(shù)寄存器 選工作方式1 即M1 M0值為01<

22、;/p><p>  內(nèi)部脈沖 C/T 值為0</p><p>  軟件啟動定時器 GATE 值為 0</p><p>  TMOD=0000 0001 =0x01</p><p>  定時器控制寄存器TCON(高四位與定時器中斷有關(guān),低四位與外部中斷有關(guān))</p><p>  TR0/TR1:定時器運(yùn)行啟??刂莆唬捎?/p>

23、用戶通過軟件設(shè)置 )。</p><p>  =0:定時器停止運(yùn)行;</p><p>  =1:定時器啟動運(yùn)行。</p><p>  TF0/TF1:定時器溢出中斷申請標(biāo)志位(由硬件自動置位)。</p><p>  =0:定時器未溢出;</p><p>  =1:定時器溢出(由全“1”變成全“0”)時由硬件自動置位,申請

24、中斷,中斷被CPU響應(yīng)后由硬件自動清零。</p><p>  啟動定時器和判斷是否溢出</p><p>  TRx賦值為1,即可啟動相應(yīng)的定時器</p><p>  如果TFx的值為1,即可以判斷計數(shù)寄存器的值已經(jīng)溢出。</p><p><b>  可以用位賦值。</b></p><p>  TC

25、ON=0001 0000 =0x10 代表什么?</p><p>  即TR0的值為1,TF0的值為0。定時器已經(jīng)啟動,并且計數(shù)寄存器的計數(shù)值還沒有溢出。(不能產(chǎn)生有效的內(nèi)容中斷信號)</p><p><b>  2 軟件設(shè)計</b></p><p><b>  2.1 主程序流程</b></p><p

26、>  本系統(tǒng)的主程序工作過程是首先循環(huán)進(jì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è)的值都進(jìn)行比較,如果相等,則進(jìn)行相應(yīng)的處理。在具體比較時(

27、COMP1段),首先比較TH值,如不相等,則直接轉(zhuǎn)出并置"時間到"標(biāo)志CCB為0,而如果TH、TM、TS全部對應(yīng)相等,則置該標(biāo)志為1,其軟件流程見圖2所示。</p><p>  此次設(shè)計的可預(yù)置熱水器控制電路,實現(xiàn)對時間和分鐘的現(xiàn)實,可以設(shè)置熱水器的使用時間,使熱水器自動加熱和停止,并且設(shè)置了水位比較電路可以進(jìn)行報警。</p><p>  由石英晶體振蕩器產(chǎn)生頻率為10

28、00Hz的信號,經(jīng)過三片74LS160進(jìn)行分頻后,得到1Hz的秒脈沖信號,再經(jīng)過2片74LS90連接成的60進(jìn)制計數(shù)器后得到1/60秒的分脈沖信號。將分信號傳輸給兩片74LS290連成的六十進(jìn)制計數(shù)器進(jìn)行分的計數(shù),再由分計數(shù)的進(jìn)位驅(qū)動二十四進(jìn)制的時計數(shù)器。時間計數(shù)器連接七段譯碼顯示器進(jìn)行時間的現(xiàn)實。預(yù)置時間的電路與此相同。</p><p>  預(yù)置時間計數(shù)器產(chǎn)生的輸出進(jìn)入減法器進(jìn)行自動減一的設(shè)置,減法器的輸出信號

29、進(jìn)入比較器,與正常時間計數(shù)器產(chǎn)生的信號進(jìn)行比較。當(dāng)兩者相等時,自動開始加。由時計數(shù)器和分計數(shù)器產(chǎn)生的輸出接入比較器,與設(shè)定時間電路的時計數(shù)器和分計數(shù)器相比較,當(dāng)時間相等時熱水器停止加熱。</p><p>  由傳感器感知水位,經(jīng)由模數(shù)轉(zhuǎn)換器轉(zhuǎn)換成八位二進(jìn)制數(shù),再由二進(jìn)制→BCD碼轉(zhuǎn)換器將其轉(zhuǎn)換成8421BCD碼,輸出的數(shù)據(jù)經(jīng)計數(shù)器傳入七段譯碼顯示器進(jìn)行水位的顯示。從水位計數(shù)器引出的信號進(jìn)入比較器,與比較器中設(shè)置的

30、水位進(jìn)行比較,當(dāng)其水位低于設(shè)定值時,自動停止工作并進(jìn)行水位報警。其中水位報警電路由555定時器構(gòu)成的單穩(wěn)態(tài)單路和多諧振蕩電路組成。</p><p>  2.2 秒脈沖發(fā)生器的軟件設(shè)計</p><p>  系統(tǒng)中的秒脈沖發(fā)生器是由定時器T0和內(nèi)存空間TT0配合完成的。其中T0工作于l 6位計數(shù)器模式,當(dāng)T0向上計數(shù)并由全1變?yōu)槿?時產(chǎn)生中斷。本程序中,T0的初值為0DC00H,大約0.01秒

31、中斷一次。這里使用的晶振頻率為11.0592MHz,由此可計算出日誤差約為0.78 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秒

32、鐘。</p><p><b>  3、 程序</b></p><p>  #include <REG52.H></p><p>  #include "DS1302.h" /************端 口 定 義****************/</p><p>  sbit

33、 hot = P1^7;</p><p>  sbit Add_hour = P3^0;</p><p>  sbit Add_min = P3^1;</p><p>  unsigned char qiangdanum=0;</p><p>  unsigned char code table[]={0x3f,0x0

34、6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,</p><p>  0x7f,0x6f};</p><p>  //unsigned char code duan[]={};</p><p>  unsigned char ge=0,shi=0;</p><p>  void delay(unsigned int ms)

35、 //晶振12M</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for(j=ms;j>0;j--) </p><p><b>  {</b></p><p>  for(i=0;i<

36、;120;i++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void display(void)</p><p><b>  { </b></p><p><b>  P2=0x7f

37、;</b></p><p>  P0=table[week];</p><p><b>  delay(5);</b></p><p><b>  P2=0xbf;</b></p><p><b>  P0=0x40;</b></p><p>

38、;<b>  delay(5);</b></p><p><b>  P2=0xdf;</b></p><p>  P0=table[h1];</p><p><b>  delay(5);</b></p><p><b>  P2=0xef;</b>&l

39、t;/p><p>  P0=table[h0];</p><p><b>  delay(5);</b></p><p><b>  P2=0xf7;</b></p><p>  P0=table[mi1];</p><p><b>  delay(5);</b&

40、gt;</p><p><b>  P2=0xfb;</b></p><p>  P0=table[mi0];</p><p><b>  delay(5);</b></p><p><b>  P2=0xfd;</b></p><p>  P0=tab

41、le[s1];</p><p><b>  delay(5);</b></p><p><b>  P2=0xfe;</b></p><p>  P0=table[s0];</p><p><b>  delay(5);</b></p><p><

42、b>  }</b></p><p><b>  {</b></p><p>  write_ds1302(0x8e,0x00);//寫保護(hù)寄存器,在對時鐘或RAM寫前WP一定要為0</p><p>  write_ds1302(0x8c,year);//年</p><p>  write_ds1

43、302(0x88,month);//月</p><p>  write_ds1302(0x86,day);//日</p><p>  write_ds1302(0x8A,week);//星期</p><p>  write_ds1302(0x84,hour);//時</p><p>  write_ds1302(0x82,m

44、inute);//分</p><p>  write_ds1302(0x80,second);//秒</p><p>  write_ds1302(0x8e,0x80);//寫保護(hù)寄存器</p><p><b>  }</b></p><p>  void changtime()</p><

45、;p><b>  {</b></p><p>  unsigned char Change_minute,Change_hour;</p><p>  Change_minute = minute;</p><p>  Change_hour=hour;</p><p>  if(0 == Add_min)<

46、/p><p><b>  {</b></p><p>  while(0 == Add_min)</p><p><b>  {</b></p><p>  display();</p><p><b>  }</b></p><p>

47、;  Change_minute++;</p><p>  if( Change_minute==90)</p><p>  { Change_minute=0;</p><p><b>  }</b></p><p>  if( Change_minute%16==10)</p><p>  {

48、 Change_minute+=6;</p><p><b>  }</b></p><p>  write_ds1302(0x8e,0x00);//寫保護(hù)寄存器,在對時鐘或RAM寫前WP一定要為0</p><p>  write_ds1302(0x8c,year);//年</p><p>  write_ds1

49、302(0x88,month);//月</p><p>  write_ds1302(0x86,day);//日</p><p>  write_ds1302(0x8A,week);//星期</p><p>  write_ds1302(0x84,hour);//時</p><p>  write_ds1302(0x82,C

50、hange_minute);//分</p><p>  write_ds1302(0x80,second);//秒</p><p>  write_ds1302(0x8e,0x80);//寫保護(hù)寄存器</p><p><b>  }</b></p><p>  if( 0==Add_hour) </p

51、><p><b>  {</b></p><p>  while(0 ==Add_hour)</p><p><b>  {</b></p><p>  display(); </p><p><b>  }</b></p><p>

52、  Change_hour++;</p><p>  if( Change_hour==0x24)</p><p>  {Change_hour=0;}</p><p>  if( Change_hour%16==10)</p><p>  {Change_hour+=6;}</p><p>  write_ds1

53、302(0x8e,0x00);//寫保護(hù)寄存器,在對時鐘或RAM寫前WP一定要為0</p><p>  write_ds1302(0x8c,year);//年</p><p>  write_ds1302(0x88,month);//月</p><p>  write_ds1302(0x86,day);//日</p><p>

54、;  write_ds1302(0x8A,week);//星期</p><p>  write_ds1302(0x84,Change_hour);//時</p><p>  write_ds1302(0x82,Change_minute);//分</p><p>  write_ds1302(0x80,second);//秒</p>&

55、lt;p>  write_ds1302(0x8e,0x80);//寫保護(hù)寄存器</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main ()</p><p><b>  {</b></p>

56、<p><b>  hot = 1;</b></p><p>  initial_ds1302();</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  read_time(); //讀時間</

57、p><p>  display();</p><p><b>  if()</b></p><p>  changtime();</p><p>  if(week<=0x05)</p><p><b>  {</b></p><p>  if(ho

58、ur>=0x07 & hour<=0x22)</p><p><b>  {</b></p><p><b>  hot = 0;</b></p><p><b>  }</b></p><p><b>  else</b></p

59、><p><b>  {</b></p><p><b>  hot = 1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b>&

60、lt;/p><p><b>  {</b></p><p><b>  hot = 0;</b></p><p><b>  }</b></p><p><b>  五、設(shè)計總結(jié)</b></p><p>  在這次設(shè)計過程中,體現(xiàn)出組員

61、相互合作設(shè)計電路的能力以及綜合運(yùn)用知識的能力,體會了學(xué)以致用、突出自己勞動成果的喜悅心情,從中發(fā)現(xiàn)自己平時學(xué)習(xí)的不足和薄弱環(huán)節(jié),從而加以彌補(bǔ)。</p><p>  在此感謝我們的XX老師.,老師嚴(yán)謹(jǐn)細(xì)致、一絲不茍的作風(fēng)一直是我工作、學(xué)習(xí)中的榜樣;老師循循善誘的教導(dǎo)和不拘一格的思路給予我無盡的啟迪;這次電路設(shè)計的每個實驗細(xì)節(jié)和每個數(shù)據(jù),都離不開老師您的細(xì)心指導(dǎo)。而您開朗的個性和寬容的態(tài)度,幫助我能夠很順利的完成了這

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論