單片機(jī)畢業(yè)設(shè)計(jì)----魚缸自動(dòng)換水系統(tǒng)設(shè)計(jì)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設(shè)計(jì)報(bào)告</b></p><p>  課題:魚缸自動(dòng)換水系統(tǒng)設(shè)計(jì)</p><p>  系 部: 電子信息工程系</p><p>  專 業(yè): 電氣自動(dòng)化</p><p>  班 級(jí): 07-1</p><p>  姓 名:

2、xxx</p><p>  指導(dǎo)老師: xxx</p><p>  2010年6月26日</p><p><b>  目 錄:</b></p><p>  第一章 總體方案設(shè)計(jì)……………………………………………………3</p><p>  第二章 硬件設(shè)計(jì) ……………………………………………

3、……4</p><p>  2.1 控制核心AT89S52單片機(jī)…………………………………………4</p><p>  2.2 八段四位共陽極數(shù)碼管 …………………………………………7</p><p>  2.3穩(wěn)壓電路設(shè)計(jì) ……………………………………………………9</p><p>  2.4電磁閥的結(jié)構(gòu)原理 ………………………………

4、………………10</p><p>  2.5熱繼電器 …………………………………………………………10</p><p>  2.6微型水泵 …………………………………………………………11</p><p>  2.7水位器的選擇 ……………………………………………………11</p><p>  第三章 軟件設(shè)計(jì) ………………………………

5、…………………………12</p><p>  3.1換水時(shí)間及換水量選擇 …………………………………………12</p><p>  3.2控制過程 …………………………………………………………12</p><p>  3.3程序設(shè)置 …………………………………………………………14</p><p>  3.4編程程序 ……………………

6、……………………………………16</p><p>  第四章 系統(tǒng)安裝與調(diào)試 …………………………………………………26</p><p>  4.1軟件調(diào)試 …………………………………………………………26</p><p>  4.2系統(tǒng)調(diào)試 …………………………………………………………26</p><p>  結(jié)束語 ……………………

7、………………………………………………27</p><p>  辭謝 ………………………………………………………………………27</p><p>  參考文獻(xiàn) …………………………………………………………………28</p><p>  附錄1 ………………………………………………………………………29</p><p>  附錄2 ……………

8、…………………………………………………………30</p><p><b>  摘 要:</b></p><p>  養(yǎng)魚的朋友都知道,水質(zhì)對(duì)魚兒影響是最嚴(yán)重的,好的水質(zhì)可以使你的魚兒健康生長,怎樣才能保證水質(zhì)呢?只有經(jīng)常換水,對(duì)現(xiàn)在上班族來說換水是很麻煩的,占用很長的時(shí)間,對(duì)魚缸的市場(chǎng)前景考慮,分析自動(dòng)換水魚缸實(shí)現(xiàn)的必要性和可行性,選用合適的單片機(jī)芯片和多種外圍器件

9、,完成硬件和軟件的整體設(shè)計(jì),最終實(shí)現(xiàn)了一個(gè)每天按時(shí)定量換水控制系統(tǒng)</p><p>  關(guān)鍵詞:自動(dòng)換水系統(tǒng);定時(shí)控制;實(shí)時(shí)顯示</p><p><b>  總體方案設(shè)計(jì)</b></p><p>  魚缸自動(dòng)換水系統(tǒng)的原理圖如圖1-1所示:</p><p>  圖1-1 魚缸自動(dòng)換水系統(tǒng)原理圖</p>&l

10、t;p>  原理圖中的電磁閥(2)和水位器主要控制水位起到雙保險(xiǎn),用單片機(jī)控制更精確。有效防止水流出缸外。電磁閥(1)和抽水馬達(dá)是把想要換的沉水抽出,換水的多少由單片機(jī)設(shè)定,流量的大小是用微量調(diào)控運(yùn)行的情況。</p><p>  工作過程為:用單片機(jī)控制電磁閥.電源接通電磁閥就開起,水管就通了。反之電磁閥電源關(guān)閉水管斷流。進(jìn)水管直接接在自來水管子上。進(jìn)水的多少要看想要換多少水(抽掉的水)這也是用單片機(jī)控制電

11、磁閥和抽水馬達(dá)。排水管接在抽水馬達(dá)噴水口只要接通電源水就會(huì)往外排,如果每天按排水一小時(shí)30升水來計(jì)算的話,一個(gè)星期能換掉210升水(定時(shí)器控制排水電磁閥開起電源一小時(shí))。方法是用定時(shí)器設(shè)定時(shí)間比如下午1-2點(diǎn)排水 2-3點(diǎn)進(jìn)水 ,這個(gè)過程就是自動(dòng)循環(huán)的換水。定時(shí)器設(shè)定時(shí)間長短和調(diào)節(jié)電磁閥上的微調(diào)是控制換水的多少和水的流量。水位器是控制水位的高度,進(jìn)水管接在水位器上起到雙重保護(hù),以防水溢出魚缸。</p><p>&

12、lt;b>  第二章 硬件設(shè)計(jì)</b></p><p>  本章中,我主要介紹組成自動(dòng)換水魚缸的硬件,以及它們之間的聯(lián)系,在這個(gè)系統(tǒng)中起到的作用。</p><p>  2. 1 控制核心AT89S52單片機(jī)</p><p>  2.1.1功能特性概述</p><p>  AT89S52是一種低功耗、高性能CMOS8位微控制

13、器,在系統(tǒng)可編程Flash中擁有8k容量的存儲(chǔ)器。它是使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。而且Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。</p><p>  AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)可編程Fla

14、sh存儲(chǔ)器,256字節(jié)RAM,32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工UART串行通道,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。</

15、p><p>  2.1.2 單片機(jī)的特點(diǎn)主要有一下幾點(diǎn):</p><p>  ??與MCS-51單片機(jī)產(chǎn)品兼容;</p><p>  ??1000次擦寫周期;</p><p>  ??全靜態(tài)操作:0Hz~33Hz;</p><p>  ??三級(jí)加密程序存儲(chǔ)器;</p><p><b>  

16、??八個(gè)中斷源;</b></p><p>  ??低功耗空閑和掉電模式;</p><p>  ??掉電后中斷可喚醒;</p><p><b>  ??掉電標(biāo)識(shí)符;</b></p><p>  2.1.3 AT89S52的芯片管腳圖如圖2-1</p><p>  圖2-1 AT89S52

17、芯片管腳圖</p><p><b>  各引腳的功能說明:</b></p><p><b>  VCC:電源</b></p><p><b>  GND: 接地點(diǎn)</b></p><p>  P0 口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯

18、電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。</p><p>  當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。</p><p>  在flash編程時(shí),P0口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。</p><p>  P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位

19、雙向I/O 口,p1 輸出緩沖器能驅(qū);為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。</p><p>  此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入(P1.1/T2EX),含義如下:</p><p>  P1.0 T2(定時(shí)器/計(jì)數(shù)器T2的外部計(jì)數(shù)輸入),時(shí)鐘輸出</p>

20、<p>  P1.1 T2EX(定時(shí)器/計(jì)數(shù)器T2的捕捉/重載觸發(fā)信號(hào)和方向控制)</p><p>  P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。</p><p>  

21、在訪問外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。</p><p>  在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。</p><p>  P3 口:P3 口是一個(gè)具有內(nèi)部上拉

22、電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。</p><p>  P3口亦作為AT89S52特殊功能(第二功能)使用;在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。引腳的功能如表2-1所示:</p><p> 

23、 表2-1 P3口的特殊功能</p><p>  RST: 復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2 個(gè)機(jī)器周期時(shí),高電平將使單片機(jī)復(fù)位。當(dāng)看門狗計(jì)時(shí)完成后,RST 腳輸出96 個(gè)晶振周期的高電平。另外,在地址8EH上的特殊寄存器AUXR上的DISRTO位可以使此功能無效,當(dāng)DISRTO處于默認(rèn)狀態(tài)下,復(fù)位高電平有效。</p><p>  ALE/PROG:地址鎖存控制信號(hào)ALE是訪問外部程序

24、存儲(chǔ)器時(shí),鎖存低8 位地址的輸出脈沖。在flash編程時(shí),此引腳(PROG)也用作編程輸入脈沖。</p><p>  在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE脈沖將會(huì)跳過。</p><p>  如果需要,通過將地址為8EH的SFR的第0位置設(shè)置為 “1”時(shí),ALE操作將無效。這一位置為“0”時(shí)

25、,ALE 僅在執(zhí)行MOVX 或MOVC指令時(shí)有效。否則,ALE 將被微弱拉高。這個(gè)ALE 使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無效。</p><p>  PSEN:表示外部程序存儲(chǔ)器選通信號(hào)。</p><p>  當(dāng)AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期中被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN不被激活。</

26、p><p>  EA/VPP:訪問外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H 到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。</p><p>  在flash編程期間,EA也接收12伏VPP電壓。</p><p>  XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。</p><p>  X

27、TAL2:振蕩器反相放大器的輸出端。</p><p>  2.1.4單片機(jī)硬件資源的分配</p><p>  P0.0-P0.7連接四位共陽極數(shù)碼管;</p><p>  P2.0連接按鍵K1;</p><p>  P2.1 連接按鍵K2;</p><p>  P2.2 連接按鍵K3;</p><p

28、>  P2.3連接按鍵K4;</p><p>  2.2 七段四位共陽極數(shù)碼管</p><p>  2.2.1數(shù)碼管介紹</p><p>  七段數(shù)碼管是由7個(gè)發(fā)光二極管單構(gòu)成。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管。共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮。當(dāng)某

29、一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。</p><p>  結(jié)構(gòu)圖如圖2-2所示:</p><p>  圖2-2 數(shù)碼管結(jié)構(gòu)示意</p><p>  2.2.2數(shù)碼管的驅(qū)動(dòng)方式</p><p>  數(shù)碼管與單片機(jī)的連接電路如圖2-3所示,數(shù)碼管動(dòng)態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動(dòng)態(tài)驅(qū)動(dòng)是將所有數(shù)碼管的8個(gè)顯示筆劃&quo

30、t;a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,每個(gè)數(shù)碼管顯示出字形取決于單片機(jī)對(duì)位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就會(huì)顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。通過分時(shí)輪流控制各個(gè)數(shù)碼管的的COM端,就會(huì)使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。

31、在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,能夠節(jié)省大量的I/O端口,而且功耗更低。</p><p>  圖2-3 數(shù)碼管與單片機(jī)連接電路</p><p><b>  2.3穩(wěn)壓電路設(shè)計(jì)</b></p><p>  穩(wěn)壓電路中含有元器件H7805,它的外形圖如圖2-4所示,它是3 端正穩(wěn)壓電路,TO-220 封裝,能提供多種固定的輸出電

32、壓,應(yīng)用范圍比較廣。內(nèi)含過流、過熱和過載保護(hù)電路,帶散熱片時(shí),輸出電流可達(dá) 1A。雖然是固定穩(wěn)壓電路,但使用外接元件,可獲得不同的電壓和電流。 它的各個(gè)腳的含義為:</p><p>  1―輸入,INPUT ;2―地,GND ;3―輸出,OUTPUT TO-220。</p><p>  圖2-4 元器件H7805的外形圖</p><p>  它的主要特點(diǎn):輸出電流可

33、達(dá) 1A;輸出電壓有5V ;內(nèi)含有過熱保護(hù)、短路保護(hù)、輸出晶體管 SOA 保護(hù);以及一些極限值:</p><p> ?。═a=25℃) VI——輸入電壓(VO=5~18V)??????????? 35V ;</p><p>  RθJC——熱阻???????????? 5℃/W;</p><p>  RθJA——熱阻?????????? 65℃/W;</p&g

34、t;<p>  TOPR——工作結(jié)溫范圍??????????? 0~125℃;</p><p>  H7805在硬件電路中的使用,起到固定輸出電壓作用,使按鍵更好的使用,如圖所示2-5所示:</p><p>  圖2-5 H7805在電路中的連接</p><p>  2.4電磁閥的結(jié)構(gòu)原理 </p><p>  直動(dòng)式電磁閥有常

35、閉型和常開型二種。在我的魚缸自動(dòng)換水的系統(tǒng)中主要采用常閉型,它在斷電時(shí)呈關(guān)閉狀態(tài),當(dāng)線圈通電時(shí)產(chǎn)生電磁力,使動(dòng)鐵芯克服彈簧力同靜鐵芯吸合直接開啟閥,介質(zhì)呈通路;當(dāng)線圈斷電時(shí)電磁力消失,動(dòng)鐵芯在彈簧力的作用下復(fù)位,直接關(guān)閉閥口,介質(zhì)不通。此電磁閥結(jié)構(gòu)簡單,動(dòng)作可靠,在零壓差和微真空下正常工作。結(jié)構(gòu)如圖2-6所示:</p><p>  圖2-6 直動(dòng)式電磁閥結(jié)構(gòu)圖</p><p><b&

36、gt;  2.5熱繼電器</b></p><p>  繼電器在通俗意義上來說就是開關(guān),在條件滿足的情況下關(guān)閉或者開啟。繼電器的開關(guān)特性在很多的控制系統(tǒng)尤其是離散的控制系統(tǒng)中得到廣泛的應(yīng)用。在我的魚缸自動(dòng)換水系統(tǒng)中用到了5V繼電器。它在電路中為交流電動(dòng)機(jī)起到過載保護(hù)作用,也起到了開關(guān)的作用。在我的系統(tǒng)電路中,繼電器的位置如圖2-7所示:</p><p>  圖2-7 繼電器與原理

37、圖</p><p>  由圖中可以看出繼電器是用作開關(guān)使用的,控制電磁閥開與關(guān),</p><p>  當(dāng)K5接通時(shí),電磁閥1運(yùn)轉(zhuǎn)</p><p>  當(dāng)K6接通時(shí),電磁閥2運(yùn)轉(zhuǎn)</p><p><b>  2.6微型水泵</b></p><p>  微型水泵,在我魚缸自動(dòng)換水系統(tǒng)中起到抽水以及雜質(zhì)

38、的作用。選用的水泵抽水量為0.015立方米/min</p><p>  它的主要特點(diǎn)有:體積超小;獨(dú)有水氣兩用功能,工作介質(zhì)可以為氣體和液體(非油,無強(qiáng)腐蝕),有水抽水、有氣抽氣;可24小時(shí)連續(xù)運(yùn)轉(zhuǎn);長期空轉(zhuǎn)屬正常工作,不會(huì)損壞泵;具備可靠自吸功能,吸程:1.5米,揚(yáng)程:3米。無油、不污染工作介質(zhì),免維護(hù)、任意方向安裝。</p><p>  2. 7水位器的選擇</p>&l

39、t;p>  在我的自動(dòng)換水系統(tǒng)里,定位器其實(shí)就是抽水馬桶里的定位器,為什么選擇它呢?主要是價(jià)格便宜,市場(chǎng)廣,在馬桶專賣店里就可以買到,定位器的原理很簡單,就是靠水的浮力和水的壓力來控制的。把定位器連接進(jìn)水管上,起到雙重保護(hù)。</p><p>  第 三 章 軟 件 設(shè) 計(jì)</p><p>  我的魚缸自動(dòng)換水系統(tǒng)是用單片機(jī)控制電磁閥的開與關(guān),每天換水的時(shí)間也是經(jīng)過精確的計(jì)算設(shè)置的。

40、可在自動(dòng)模式中的設(shè)置時(shí)間,也可以通過手動(dòng)設(shè)置時(shí)間。</p><p>  3.1 換水時(shí)間及換水量選擇</p><p>  圖3-1 魚缸尺寸示意(長2米,寬0.65米,高0.8米)</p><p>  魚缸的大小如圖3-1所示,首先我們要先求出魚缸水的體積,公式為:</p><p>  Vs=2*0.65*0.8*0.85=0.884(立方米

41、)</p><p>  (注: 0.85的意思是水的體積是魚缸總體積的85%)</p><p>  根據(jù)有關(guān)資料證明,每天換水量占水總體積的15%是最好的,對(duì)魚兒的生長是最有利的,故可以算出每天換水量,所用公式為:</p><p>  Vh=0.884*0.15=0.1326立方米</p><p>  根據(jù)前面水泵的選擇,計(jì)算每天只要排15分

42、鐘水就可以了。由于家里自來水每分鐘流量是一定的,根據(jù)實(shí)際考察所得算出進(jìn)水只需要20分鐘。</p><p>  算出每天換水的時(shí)間后,即在系統(tǒng)中設(shè)置,本系統(tǒng)開機(jī)后顯示實(shí)時(shí)時(shí)間,默認(rèn)是自動(dòng)控制兩個(gè)電磁閥。每天換水一般在中午,所以整個(gè)單片機(jī)程序設(shè)置如下:</p><p>  電磁閥1接通時(shí)間為每天13:00,斷開時(shí)間13:20。</p><p>  電磁閥2接通時(shí)間為每天

43、14:00,斷開時(shí)間14:15。</p><p><b>  3. 2控制過程:</b></p><p>  在自動(dòng)模式中,系統(tǒng)是根據(jù)我自己設(shè)定的時(shí)間控制兩個(gè)電磁閥在指定的時(shí)間接通和斷開。</p><p>  在手動(dòng)模式中,即在非設(shè)置狀態(tài)下,可通過按鍵控制電磁閥的接通與斷開,如下:</p><p>  點(diǎn)按K1鍵控制電磁

44、閥1接通和斷開;</p><p>  點(diǎn)按K2鍵控制電磁閥2接通和斷開。</p><p>  自動(dòng)與手動(dòng)控制模式的切換方法為:</p><p>  首先點(diǎn)按K3鍵可查看狀態(tài), 自動(dòng)數(shù)碼管顯示OPEN, 手動(dòng)顯示OFF, 繼續(xù)點(diǎn)按K3鍵切換自動(dòng)/手動(dòng),數(shù)碼管會(huì)有相應(yīng)的顯示。</p><p>  在設(shè)置定時(shí)時(shí)間狀態(tài)下:</p>&l

45、t;p>  LED2(out1on)亮表示設(shè)置電磁閥1定開時(shí)間</p><p>  LED3(out1off)亮表示設(shè)置電磁閥1定關(guān)時(shí)間</p><p>  LED4(out2on)亮表示設(shè)置電磁閥2定開時(shí)間</p><p>  LED4(out1off)亮表示設(shè)置電磁閥2定關(guān)時(shí)間</p><p>  詳細(xì)內(nèi)容請(qǐng)看圖3-2</p&

46、gt;<p><b>  圖3-2</b></p><p><b>  3.3程序設(shè)計(jì)</b></p><p>  3.3.1 主程序設(shè)計(jì)</p><p>  3.3.2 子程序設(shè)計(jì)</p><p>  主要控制子程序說明如下:</p><p>  ● Time

47、r2_Server:定時(shí)器2計(jì)時(shí)中斷程序每隔31.25ms中斷一次;</p><p>  ● DELAY:延時(shí)子程序;</p><p>  ● feng:蜂鳴器鳴響處理程序;</p><p>  ● display:工作LED閃動(dòng)控制;轉(zhuǎn)換數(shù)據(jù)為七段顯示器顯示數(shù)據(jù)并寫入顯示內(nèi)存內(nèi)</p><p>  ● LED_out:七段數(shù)碼管顯示程序;&

48、lt;/p><p>  ● CONV:將時(shí)及分的數(shù)據(jù)轉(zhuǎn)換為七段顯示器顯示數(shù)據(jù)并寫入顯示內(nèi)存內(nèi);</p><p>  ● key:按*鍵檢測(cè)包括設(shè)置現(xiàn)在的時(shí)間小時(shí)及分鐘,查看/設(shè)置定時(shí)時(shí)間等</p><p><b>  3.4編程程序</b></p><p>  /*******************************

49、***************</p><p>  P0.0-P0.7與數(shù)碼管中的ABCDEFGH端口連接。 </p><p>  P1.0-P1.3與數(shù)碼管中的S1,S2,S3,S4端口。 </p><p>  **********************************************/</p><p>  #includ

50、e <REGX52.H></p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uchar code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,</p><p&

51、gt;  0x80,0x90,0xFF,0xC0,0x8E,0x8C,0x86,0xC8,};</p><p>  /* O F P EN */</p><p>  uchar timecount,Hour,Cent,Second,qian,bai,shi,ge,THour,TCent,offTH,offTC,</p><p>  onTH2

52、,onTC2,offTH2,offTC2;</p><p>  uchar disL,disH,keytemp,mbiao,App,onHour,onCent,offHour,offCent;</p><p>  uchar onHour2,onCent2,offHour2,offCent2;</p><p>  bit biaoA;</p><

53、;p>  sbit led0=P1^0;</p><p>  sbit led1=P1^1;</p><p>  sbit led2=P1^2;</p><p>  sbit led3=P1^3;</p><p>  sbit led4=P3^7;</p><p>  sbit K0=P2^0;</p>

54、;<p>  sbit K1=P2^1;</p><p>  sbit K2=P2^2;</p><p>  sbit K3=P2^3;</p><p>  sbit BP=P3^2;sbit Aout=P1^6;sbit Aout2=P1^7;</p><p>  void display();</p><

55、p>  void key();</p><p>  uchar AddReduce(uchar dd,uchar max,char min);</p><p>  void Alarm_clock();</p><p>  void LED_out();</p><p>  void delay(uchar i) /***延時(shí)**

56、*/</p><p><b>  { uint x;</b></p><p>  for(;i>0;i--)</p><p>  for(x=114;x>0;x--); //22.1184=228,,11.0592=114</p><p><b>  }</b></p>

57、<p>  void feng(uchar i) /***蜂鳴器***/</p><p><b>  { uint x;</b></p><p>  for(;i>0;i--){BP=~BP;</p><p>  for(x=114;x>0;x--);}</p><p><b> 

58、 BP=1;</b></p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  Hour=12;Cent=00;//Second=50;</p><p>  onHour

59、=13;onCent=0;offHour=13;offCent=20;biaoA=1;</p><p>  onHour2=14;onCent2=0;offHour2=14;offCent2=15;</p><p>  RCAP2H=0x8F; /* 11.0592=8F80,,22.1184=1F00 */</p><p>  RCAP2L=0x80;</p

60、><p>  ET2=1; // 允許T2定時(shí)器中斷</p><p>  TR2=1; // 啟動(dòng)T2定時(shí)器</p><p><b>  EA=1;</b></p><p><b>  while(1)</b></p><p><b>  {</b>

61、;</p><p>  display();</p><p><b>  key();</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***T2***中***斷***函***數(shù)***/<

62、;/p><p>  void Timer2_Server(void) interrupt 5 using 3</p><p><b>  {</b></p><p>  TF2=0;//清除溢出標(biāo)記</p><p>  timecount++;</p><p>  if(timecount==3

63、2)</p><p>  {timecount=0;</p><p><b>  Second++;</b></p><p>  if(Second==60)</p><p>  {Second=0;</p><p><b>  Cent++;</b></p>

64、<p>  if(Cent==60)</p><p><b>  {Cent=0;</b></p><p><b>  Hour++;</b></p><p>  if(Hour==24)</p><p><b>  Hour=0;</b></p>&l

65、t;p><b>  }</b></p><p><b>  }</b></p><p>  Alarm_clock();</p><p><b>  }</b></p><p>  switch (mbiao)</p><p><b> 

66、 {</b></p><p>  case 0: {disH=Hour;disL=Cent;}</p><p><b>  break;</b></p><p>  case 1: {disH=100;disL=Second;}</p><p><b>  break;</b>&

67、lt;/p><p><b>  } </b></p><p><b>  }</b></p><p>  /***顯***示***函***數(shù)***/</p><p>  void display()</p><p>  {if(disH==100)</p><

68、p>  {qian=10;bai=10;shi=disL/10;ge=disL%10;}</p><p><b>  else </b></p><p>  {if(disL==100)</p><p>  {qian=disH/10;bai=disH%10;shi=10;ge=10;}</p><p><b

69、>  else</b></p><p>  {qian=disH/10;bai=disH%10;shi=disL/10;ge=disL%10;}</p><p><b>  }</b></p><p>  if(mbiao>3)if(timecount>16)</p><p>  {if(k

70、eytemp%2){shi=10;ge=10;}</p><p>  if(keytemp%2==0){qian=10;bai=10;}}</p><p>  LED_out();</p><p><b>  }</b></p><p>  void LED_out()</p><p><b

71、>  {</b></p><p>  if(qian){ //千位處理</p><p>  P0=dispcode[qian];</p><p>  led0=0;delay(2);led0=1;}</p><p>  P0=dispcode[bai];//百位處理</p><p>

72、  led1=0;delay(2);led1=1;</p><p>  if((timecount<16)&&(mbiao==0)) //十位處理</p><p>  P0=dispcode[shi]&0x7f;</p><p><b>  else </b></p><p>  

73、P0=dispcode[shi]; </p><p>  led2=0;delay(2);led2=1;</p><p>  if((timecount<16)&&(mbiao==0)) //個(gè)位處理</p><p>  P0=dispcode[ge]&0x7f;</p><p><b>  e

74、lse </b></p><p>  P0=dispcode[ge];</p><p>  led3=0;delay(2);led3=1;</p><p>  if(mbiao==5){</p><p>  switch (keytemp)</p><p><b>  {</b>

75、</p><p>  case 0:{P0=0xFE;}</p><p><b>  break;</b></p><p>  case 1:{P0=0xFE;}</p><p><b>  break;</b></p><p>  case 2:{P0=0xFD;}&

76、lt;/p><p><b>  break;</b></p><p>  case 3:{P0=0xFD;}</p><p><b>  break;</b></p><p>  case 4:{P0=0xFB;}</p><p><b>  break;</

77、b></p><p>  case 5:{P0=0xFB;}</p><p><b>  break;</b></p><p>  case 6:{P0=0xF7;}</p><p><b>  break;</b></p><p>  case 7:{P0=0x

78、F7;}</p><p><b>  break;</b></p><p><b>  }</b></p><p>  led4=0;delay(2);led4=1;</p><p><b>  }</b></p><p><b>  } &l

79、t;/b></p><p>  /***按***鍵***檢***測(cè)***/</p><p>  void key()</p><p>  { uchar i,temp;</p><p>  if(K3==0){delay(5);if(K3==0)</p><p>  {while(!K3){display();

80、temp++;</p><p>  if(temp==125){if(mbiao==0)</p><p>  {feng(20);mbiao=4;THour=Hour;TCent=Cent;keytemp=0;break;}</p><p><b>  else</b></p><p>  {temp=0;break;}

81、</p><p><b>  }}</b></p><p>  if(mbiao<4){</p><p>  feng(20);mbiao++;</p><p>  if(mbiao==2)mbiao=0;}</p><p>  if((temp<125)&&(mbia

82、o>3)){feng(20);keytemp++;</p><p>  switch (mbiao)</p><p><b>  {</b></p><p>  case 4: if(keytemp==2)mbiao=0;</p><p><b>  break;</b></p>

83、<p>  case 5: if(keytemp==8)mbiao=0;</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  while(!K3)display(

84、);}</p><p><b>  temp=0;</b></p><p><b>  }</b></p><p>  if(mbiao==0)</p><p>  {if(K2==0)</p><p>  {delay(5);</p><p><

85、;b>  if(K2==0)</b></p><p>  {while(!K2)</p><p>  {display();temp++;</p><p>  if(temp==125)</p><p>  {feng(20);mbiao=5;keytemp=0;</p><p>  THour=on

86、Hour;TCent=onCent;offTH=offHour;offTC=offCent;</p><p>  onTH2=onHour2;onTC2=onCent2;offTH2=offHour2;offTC2=offCent2;</p><p>  while(!K2)</p><p>  {disH=THour;disL=TCent;display();}&

87、lt;/p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(temp<125){feng(20);mbiao=6;}</p><p><b>

88、  temp=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  switch (mbiao)</p><p><b>  { &

89、lt;/b></p><p>  case 0:{if(K0==0){delay(5);if(K0==0)</p><p>  {feng(20);Aout=~Aout;}}</p><p>  if(K1==0){delay(5);if(K1==0)</p><p>  {feng(20);Aout2=~Aout2;}}</p&

90、gt;<p>  while(!(K0&K1))LED_out();</p><p><b>  }</b></p><p><b>  break;</b></p><p>  case 2:{;}</p><p><b>  break;</b>&l

91、t;/p><p>  case 3:{}</p><p><b>  break;</b></p><p>  case 4:{if(keytemp==0){THour=AddReduce(THour,23,0);disH=THour;disL=TCent;display();}</p><p>  if(keytemp=

92、=1){TCent=AddReduce(TCent,59,0);disH=THour;disL=TCent;display();}</p><p>  if(K2==0){delay(5);if(K2==0) //保存數(shù)據(jù)并退出</p><p>  {TR2=0;Second=0;timecount=0;Hour=THour;</p><p>  Cent=TC

93、ent;TR2=1;feng(20);mbiao=0;</p><p>  while(!K2)display();}}} </p><p><b>  break;</b></p><p>  case 5:{if(keytemp==0){THour=AddReduce(THour,23,0);disH=THour;disL=TCent;d

94、isplay();}</p><p>  if(keytemp==1){TCent=AddReduce(TCent,59,0);disH=THour;disL=TCent;display();}</p><p>  if(keytemp==2){offTH=AddReduce(offTH,23,0);disH=offTH;disL=offTC;display();}</p>

95、<p>  if(keytemp==3){offTC=AddReduce(offTC,59,0);disH=offTH;disL=offTC;display();}</p><p>  if(keytemp==4){onTH2=AddReduce(onTH2,23,0);disH=onTH2;disL=onTC2;display();}</p><p>  if(keytemp=

96、=5){onTC2=AddReduce(onTC2,59,0);disH=onTH2;disL=onTC2;display();}</p><p>  if(keytemp==6){offTH2=AddReduce(offTH2,23,0);disH=offTH2;disL=offTC2;display();}</p><p>  if(keytemp==7){offTC2=AddRedu

97、ce(offTC2,59,0);disH=offTH2;disL=offTC2;display();}</p><p>  if(K2==0){delay(5);if(K2==0) //保存數(shù)據(jù)并退出</p><p>  {feng(20);mbiao=0;keytemp=0;</p><p>  onHour=THour;onCent=TCent;offHou

98、r=offTH;offCent=offTC;</p><p>  onHour2=onTH2;onCent2=onTC2;offHour2=offTH2;offCent2=offTC2;</p><p>  while(!K2)display();}}</p><p><b>  } </b></p><p><

99、b>  break;</b></p><p>  case 6:{i=100;while(--i)</p><p>  {if(biaoA){qian=11;bai=13;shi=14;ge=15;LED_out();}</p><p><b>  else</b></p><p>  {qian=0

100、;bai=11;shi=12;ge=12;LED_out();}</p><p>  if(K2==0){delay(5);if(K2==0){feng(20);biaoA=~biaoA;</p><p><b>  i=100;</b></p><p>  while(!K2)</p><p>  {if(biaoA)

101、{qian=11;bai=13;shi=14;ge=15;LED_out();}</p><p><b>  else</b></p><p>  {qian=0;bai=11;shi=12;ge=12;LED_out();}</p><p><b>  }}}}</b></p><p><b

102、>  mbiao=0;}</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*加減按鍵子程序*/</p><p>  uc

103、har AddReduce(char dd,uchar max,uchar min)</p><p>  {uint x=15;</p><p>  if(K1==0){delay(5);if(K1==0){</p><p>  feng(20);dd++;</p><p>  if(dd>max)dd=min;</p>

104、<p>  while(--x){display();if(K1)break;}</p><p><b>  }}</b></p><p>  if(K0==0){delay(5);if(K0==0){</p><p>  feng(20);dd--;</p><p>  if(dd<min)

105、dd=max;</p><p>  while(--x){display();if(K0)break;}</p><p><b>  }}</b></p><p>  return dd;</p><p><b>  }</b></p><p>  /**定時(shí)功能子

106、程序**/</p><p>  void Alarm_clock()</p><p><b>  {</b></p><p>  if (biaoA)</p><p>  {if (Hour==onHour)</p><p>  {if (Cent==onCent)</p><

107、p>  if (Second==0)</p><p>  {feng(120);Aout=0;}</p><p><b>  }}</b></p><p>  if (biaoA)</p><p>  {if (Hour==offHour)</p><p>  {if (Cent==o

108、ffCent)</p><p>  if (Second==0)</p><p>  {feng(120);Aout=1;}</p><p><b>  }}</b></p><p>  if (biaoA)</p><p>  {if (Hour==onHour2)</p><

109、;p>  {if (Cent==onCent2)</p><p>  if (Second==0)</p><p>  {feng(120);Aout2=0;}</p><p><b>  }}</b></p><p>  if (biaoA)</p><p>  {if (Hour=

110、=offHour2)</p><p>  {if (Cent==offCent2)</p><p>  if (Second==0)</p><p>  {feng(120);Aout2=1;}</p><p><b>  }}</b></p><p><b>  }</b>

111、</p><p>  第四章 系統(tǒng)安裝與調(diào)試</p><p><b>  4.1 軟件調(diào)試</b></p><p>  采用模塊化程序設(shè)計(jì)思想,首先調(diào)試子程序,然后逐級(jí)疊加調(diào)試。</p><p><b>  4.2 系統(tǒng)調(diào)試</b></p><p>  軟硬件結(jié)合在一起,看是

112、否能工作正常,由于在模塊調(diào)試過程中,我們把軟硬件所出現(xiàn)的錯(cuò)誤都調(diào)整過來了,所以系統(tǒng)調(diào)試通過。</p><p><b>  結(jié)束語</b></p><p>  在這次畢業(yè)設(shè)計(jì)中,我學(xué)到了很多東西,真的沒有想到搞一篇畢業(yè)設(shè)計(jì)這么難,每天腦子里總想著怎么做才能更好,本人專業(yè)知識(shí)有限,設(shè)計(jì)出來的東西還存在很多很多問題,這是專業(yè)知識(shí)的不夠。在以后走入工作崗位中,要把技術(shù)學(xué)到位,

113、等以后再來設(shè)計(jì)這樣產(chǎn)品就是輕而易舉的事情了。</p><p>  從這次畢業(yè)設(shè)計(jì)中,明白了單片機(jī)的重要性,平時(shí)沒有感覺到單片機(jī)在生活中的作用這么大,通過這次設(shè)計(jì),才明白單片機(jī)無處不在,生活中到處都用的到它。</p><p><b>  謝辭</b></p><p>  快要畢業(yè)了,感覺自己沒有學(xué)到什么,但學(xué)校提供給我們這次機(jī)會(huì),大大彌補(bǔ)了我的理

114、論學(xué)習(xí),感謝學(xué)校!還要感謝我的指導(dǎo)老師,焦振宇老師,沒有他每時(shí)每刻提醒我督促我,我不會(huì)按時(shí)完成的,在我想不出來設(shè)計(jì)什么產(chǎn)品時(shí),是焦老師提醒了我。給我啟發(fā)!在這次畢業(yè)設(shè)計(jì)中遇到一些問題,特別是編程問題,說實(shí)話我個(gè)人沒有能力去完成,在這要謝謝我認(rèn)識(shí)一個(gè)工程師,在我最無助的時(shí)候幫助了我,感謝他! </p><p><b>  謝謝!</b></p><p><b>

115、;  參 考 文 獻(xiàn)</b></p><p>  [1] 胡漢才編,《單片機(jī)原理及其接口技術(shù)》,北京,清華大學(xué)出版社,1996 </p><p>  [2] 徐愛均編,《智能化儀表原理與設(shè)計(jì)》,北京,北京航空大學(xué)出版社,1996 </p><p>  [3] 公茂法等編,《單片機(jī)人機(jī)接口實(shí)力集》,北京,北京航空大學(xué)出版社,1998 </p>

116、<p>  [4] 李朝青編,《單片機(jī)原理及其接口技術(shù)》,北京,北京航空大學(xué)出版社,1998 </p><p>  [5] 鄔寬明編,《單片機(jī)外圍器件實(shí)用手冊(cè)》,北京,北京航空大學(xué)出版社,1998 </p><p>  [6] 先鋒工作室編著,《單片機(jī)程序設(shè)計(jì)實(shí)例》,北京,清華大學(xué)出版社,2002 </p><p>  [7] 張毅剛,彭喜元,孟升衛(wèi),劉

117、兆慶編,《MCS-51單片機(jī)使用子程序設(shè)計(jì)》,哈爾濱,哈爾濱工業(yè)大學(xué)出版社,2003 </p><p>  [8] 陳明熒編,《8051單片機(jī)課程設(shè)計(jì)實(shí)訓(xùn)教材》,北京,清華大學(xué)出版社,2003 </p><p>  [9] 肖玲妮,袁增貴編,《Protel99SE印刷電路板設(shè)計(jì)教程》,北京,清華大學(xué)出版社,2003 </p><p>  [10] X5045的中英文

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論