畢業(yè)設(shè)計(jì)基于STC89C52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)(包含原理圖和程序)_第1頁(yè)
畢業(yè)設(shè)計(jì)基于STC89C52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)(包含原理圖和程序)_第2頁(yè)
畢業(yè)設(shè)計(jì)基于STC89C52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)(包含原理圖和程序)_第3頁(yè)
畢業(yè)設(shè)計(jì)基于STC89C52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)(包含原理圖和程序)_第4頁(yè)
畢業(yè)設(shè)計(jì)基于STC89C52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)(包含原理圖和程序)_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、方案分析論文基于stc89c52單片機(jī)控制電熱水壺溫度的設(shè)計(jì)中文摘要隨著微機(jī)測(cè)量和控制技術(shù)的迅速發(fā)展與廣泛應(yīng)用,以單片機(jī)為核心的溫度采集與控制系統(tǒng)的研發(fā)與應(yīng)用在很大程度上提高了生產(chǎn)生活中對(duì)溫度的控制水平。本設(shè)計(jì)論述了一種以stc89c52單片機(jī)為主控制單元,以ds18b20為溫度傳感器的溫度控制系統(tǒng)。該控制系統(tǒng)可以實(shí)時(shí)存儲(chǔ)相關(guān)的溫度數(shù)據(jù)并記錄當(dāng)前的時(shí)間。系統(tǒng)設(shè)計(jì)了相關(guān)的硬件電路和相關(guān)應(yīng)用程序。硬件電路主要包括stc89c52單片機(jī)最小系統(tǒng),測(cè)溫電路、實(shí)時(shí)時(shí)鐘電路、lcd液晶顯示電路以及通訊模塊電路等。系統(tǒng)程序主要包括主程序,讀出溫度子程序,計(jì)算溫度子程序、按鍵處理程序、lcd顯示程序以及數(shù)據(jù)存

2、儲(chǔ)程序等。關(guān)鍵詞:stc89c52單片機(jī);ds18b20;顯示電路目 錄一、引言4(一)課題研究的背景4(二)課題研究的目的和意義5二、硬件電路的設(shè)計(jì)5(一)系統(tǒng)設(shè)計(jì)的框架5(二)單片機(jī)最小系統(tǒng)電路6(三)單片機(jī)的選型61.stc89c52單片機(jī)簡(jiǎn)介62.stc89c52單片機(jī)時(shí)序73.stc89c52單片機(jī)引腳介紹7(四)溫度傳感器電路9(五)系統(tǒng)電源電路的設(shè)計(jì)10(六)lcd顯示電路11(七)串口通訊電路12(八)按鍵接口電路13(九)ds1302時(shí)鐘電路13(十)存儲(chǔ)器接口電路13三、系統(tǒng)軟件設(shè)計(jì)14(一)計(jì)算溫度子程序15(二)按鍵處理子程序15(三)計(jì)算溫度子程序16(四)顯示數(shù)據(jù)刷

3、新子程序17四、結(jié)束語(yǔ)18參考文獻(xiàn)19致謝20附件1:系統(tǒng)原理圖21附件2:系統(tǒng)相關(guān)程序22一、ds18b20底層驅(qū)動(dòng)程序22二、ds1302時(shí)鐘底層驅(qū)動(dòng)程序27三、數(shù)據(jù)存儲(chǔ)底層驅(qū)動(dòng)程序33一、引言(一)課題研究的背景工業(yè)控制是計(jì)算機(jī)的一個(gè)重要應(yīng)用領(lǐng)域,計(jì)算機(jī)控制系統(tǒng)正是為了適應(yīng)這一領(lǐng)域的需要而發(fā)展起來(lái)的一門專業(yè)技術(shù),它主要研究如何將計(jì)算機(jī)技術(shù)、通過(guò)信息技術(shù)和自動(dòng)控制理論應(yīng)用于工業(yè)生產(chǎn)過(guò)程,并設(shè)計(jì)出所需要的計(jì)算機(jī)控制系統(tǒng)。隨著微機(jī)測(cè)量和控制技術(shù)的迅速發(fā)展與廣泛應(yīng)用,以單片機(jī)為核心的溫度采集與控制系統(tǒng)的研發(fā)與應(yīng)用在很大程度上提高了生產(chǎn)生活中對(duì)溫度的控制水平。本設(shè)計(jì)就是基于單片機(jī)stc89c52溫

4、度控制系統(tǒng)的設(shè)計(jì),通過(guò)本次課程實(shí)踐,我們更加的明確了單片機(jī)的廣泛用途和使用方法,以及其工作的原理。(二)課題研究的目的和意義隨著社會(huì)的發(fā)展,溫度的測(cè)量及控制變得越來(lái)越重要。本文采用單片機(jī)stc89c52設(shè)計(jì)了溫度實(shí)時(shí)測(cè)量及控制系統(tǒng)。單片機(jī)stc89c52 能夠根據(jù)溫度傳感器ds18b20 所采集的溫度在液晶屏上實(shí)時(shí)顯示,通過(guò)控制從而把溫度控制在設(shè)定的范圍之內(nèi)。所有溫度數(shù)據(jù)均通過(guò)液晶顯示器lcd顯示出來(lái)。系統(tǒng)可以根據(jù)時(shí)鐘存儲(chǔ)相關(guān)的數(shù)據(jù)。通過(guò)該課程的學(xué)習(xí)使我們對(duì)計(jì)算機(jī)控制系統(tǒng)有一個(gè)全面的了解、掌握常規(guī)控制算法的使用方法、掌握簡(jiǎn)單微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬的設(shè)計(jì)方法,進(jìn)一步鍛煉同學(xué)們?cè)谖⑿陀?jì)算機(jī)應(yīng)用方面

5、的實(shí)際工作能力。二、硬件電路的設(shè)計(jì)(一)系統(tǒng)設(shè)計(jì)的框架本課題設(shè)計(jì)的是一種以stc89c52單片機(jī)為主控制單元,以ds18b20為溫度傳感器的溫度控制系統(tǒng)。該控制系統(tǒng)可以實(shí)時(shí)存儲(chǔ)相關(guān)的溫度數(shù)據(jù)并記錄當(dāng)前的時(shí)間。其主要包括:電源模塊、溫度采集模塊、按鍵處理模塊、實(shí)時(shí)時(shí)鐘模塊、數(shù)據(jù)存儲(chǔ)模塊、lcd顯示模塊、通訊模塊以及單片機(jī)最小系統(tǒng)。圖1 系統(tǒng)設(shè)計(jì)框架(二)單片機(jī)最小系統(tǒng)電路在課題設(shè)計(jì)的溫度控制系統(tǒng)設(shè)計(jì)中,控制核心是stc89c52單片機(jī),該單片機(jī)為51系列增強(qiáng)型8位單片機(jī),它有32個(gè)i/o口,片內(nèi)含4k flash工藝的程序存儲(chǔ)器,便于用電的方式瞬間擦除和改寫,而且價(jià)格便宜,其外部晶振為12mhz

6、,一個(gè)指令周期為1s。使用該單片機(jī)完全可以完成設(shè)計(jì)任務(wù),其最小系統(tǒng)主要包括:復(fù)位電路、震蕩電路以及存儲(chǔ)器選擇模式(ea腳的高低電平選擇),電路如下圖2所示:圖2 單片機(jī)最小系統(tǒng)(三)單片機(jī)的選型本課題設(shè)計(jì)的溫度控制系統(tǒng)主控制芯片選型為stc89c52單片機(jī),其特點(diǎn)如下:1.stc89c52單片機(jī)簡(jiǎn)介目前,51系列單片機(jī)在工業(yè)檢測(cè)領(lǐng)域中得到了廣泛的應(yīng)用,因此我們可以在許多單片機(jī)應(yīng)用領(lǐng)域中,配接各種類型的語(yǔ)音接口,構(gòu)成具有合成語(yǔ)音輸出能力的綜合應(yīng)用系統(tǒng),以增強(qiáng)人機(jī)對(duì)話的功能。stc89c52單片機(jī)是深圳宏晶科技有限公司生產(chǎn)的一種單片機(jī),在一小塊芯片上集成了一個(gè)微型計(jì)算機(jī)的各個(gè)組成部分。每一個(gè)單片機(jī)

7、包括:一個(gè)8位的微型處理器cpu;一個(gè)512k的片內(nèi)數(shù)據(jù)存儲(chǔ)器ram;4k片內(nèi)程序存儲(chǔ)器;四個(gè)8位并行的i/o接口p0-p3,每個(gè)接口既可以輸入,也可以輸出;兩個(gè)定時(shí)器/記數(shù)器;五個(gè)中斷源的中斷控制系統(tǒng);一個(gè)全雙工uart的串行i/o口;片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。最高允許振蕩頻率是12mhz。以上各個(gè)部分通過(guò)內(nèi)部總線相連接。2.stc89c52單片機(jī)時(shí)序 stc89c52單片機(jī)的一個(gè)執(zhí)器周期由6個(gè)狀態(tài)(s1s6)組成,每個(gè)狀態(tài)又持續(xù)2個(gè)震蕩周期,分為p1和p2兩個(gè)節(jié)拍。這樣,一個(gè)機(jī)器周期由12個(gè)振蕩周期組成。若采用12mhz的晶體振蕩器,則每個(gè)機(jī)器周期為1us,每

8、個(gè)狀態(tài)周期為16us;在一數(shù)情況下,算術(shù)和邏輯操作發(fā)生在n期間,而內(nèi)部寄存器到寄存器的傳輸發(fā)生在p2期間。對(duì)于單周期指令,當(dāng)指令操作碼讀人指令寄存器時(shí),使從s1p2開始執(zhí)行指令。如果是雙字節(jié)指令,則在同一機(jī)器周期的s4讀人第二字節(jié)。若為單字節(jié)指令,則在51期間仍進(jìn)行讀,但所讀入的字節(jié)操作碼被忽略,且程序計(jì)數(shù)據(jù)也不加1。在加結(jié)束時(shí)完成指令操作。多數(shù)stc89c52指令周期為12個(gè)機(jī)器周期,只有乘法和除法指令需要兩個(gè)以上機(jī)器周期的指令,它們需4個(gè)機(jī)器周期。 對(duì)于雙字節(jié)單機(jī)器指令,通常是在一個(gè)機(jī)器周期內(nèi)從程序存儲(chǔ)器中讀人兩個(gè)字節(jié),但movx指令例外,movx指令是訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器的單字節(jié)雙機(jī)器周期

9、指令,在執(zhí)行movx指令期間,外部數(shù)據(jù)存儲(chǔ)器被訪問(wèn)且被選通時(shí)跳過(guò)兩次取指操作。3.stc89c52單片機(jī)引腳介紹stc89c52單片機(jī)的40個(gè)引腳中有2個(gè)專用于主電源引腳,2個(gè)外接晶振的引腳,4個(gè)控制或與其它電源復(fù)用的引腳,以及32條輸入輸出i/o引腳。下面按引腳功能分為4個(gè)部分?jǐn)⑹鰝€(gè)引腳的功能。(1)電源引腳vcc和vssvcc(40腳):接+5v電源正端;vss(20腳):接+5v電源正端。(2)外接晶振引腳xtal1和xtal2xtal1(19腳):接外部石英晶體的一端。在單片機(jī)內(nèi)部,它是一個(gè)反相放大器的輸入端,這個(gè)放大器構(gòu)成采用外部時(shí)鐘時(shí),對(duì)于hmos單片機(jī),該引腳接地;對(duì)于choms

10、單片機(jī),該引腳作為外部振蕩信號(hào)的輸入端。xtal2(18腳):接外部晶體的另一端。在單片機(jī)內(nèi)部,接至片內(nèi)振蕩器的反相放大器的輸出端。當(dāng)采用外部時(shí)鐘時(shí),對(duì)于hmos單片機(jī),該引腳作為外部振蕩信號(hào)的輸入端。對(duì)于chmos芯片,該引腳懸空不接。(3)控制信號(hào)或與其它電源復(fù)用引腳 控制信號(hào)或與其它電源復(fù)用引腳有rst/vpd、ale/p、psen和ea/vpp等4種形式。(a)rst/vpd(9腳):rst即為reset,vpd為備用電源,所以該引腳為單片機(jī)的上電復(fù)位或掉電保護(hù)端。當(dāng)單片機(jī)振蕩器工作時(shí),該引腳上出現(xiàn)持續(xù)兩個(gè)機(jī)器周期的高電平,就可實(shí)現(xiàn)復(fù)位操作,使單片機(jī)復(fù)位到初始狀態(tài)。當(dāng)vcc發(fā)生故障,降

11、低到低電平規(guī)定值或掉電時(shí),該引腳可接上備用電源vpd(+5v)為內(nèi)部ram供電,以保證ram中的數(shù)據(jù)不丟失。(b)ale/ p (30腳):當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),ale(允許地址鎖存信號(hào))以每機(jī)器周期兩次的信號(hào)輸出,用于鎖存出現(xiàn)在p0口的低(c)psen(29腳):片外程序存儲(chǔ)器讀選通輸出端,低電平有效。當(dāng)從外部程序存儲(chǔ)器讀取指令或常數(shù)期間,每個(gè)機(jī)器周期pesn兩次有效,以通過(guò)數(shù)據(jù)總線口讀回指令或常數(shù)。當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器期間,pesn信號(hào)將不出現(xiàn)。(d)ea/vpp(31腳):ea為訪問(wèn)外部程序儲(chǔ)器控制信號(hào),低電平有效。當(dāng)ea端保持高電平時(shí),單片機(jī)訪問(wèn)片內(nèi)程序存儲(chǔ)器4kb(ms52子系列為8k

12、b)。若超出該范圍時(shí),自動(dòng)轉(zhuǎn)去執(zhí)行外部程序存儲(chǔ)器的程序。當(dāng)ea端保持低電平時(shí),無(wú)論片內(nèi)有無(wú)程序存儲(chǔ)器,均只訪問(wèn)外部程序存儲(chǔ)器。對(duì)于片內(nèi)含有eprom的單片機(jī),在eprom編程期間,該引腳用于接21v的編程電源vpp。 (4)輸入/輸出(i/o)引腳p0口、p1口、p2口及p3口(a).p0口(39腳22腳):p0.0p0.7統(tǒng)稱為p0口。當(dāng)不接外部存儲(chǔ)器與不擴(kuò)展i/o接口時(shí),它可作為準(zhǔn)雙向8位輸入/輸出接口。當(dāng)接有外部程序存儲(chǔ)器或擴(kuò)展i/o口時(shí),p0口為地址/數(shù)據(jù)分時(shí)復(fù)用口。它分時(shí)提供8位雙向數(shù)據(jù)總線。對(duì)于片內(nèi)含有eprom的單片機(jī),當(dāng)eprom編程時(shí),從p0口輸入指令字節(jié),而當(dāng)檢驗(yàn)程序時(shí),則

13、輸出指令字節(jié)。(b).p1口(1腳8腳):p1.0p1.7統(tǒng)稱為p1口,可作為準(zhǔn)雙向i/o接口使用。對(duì)于mcs52子系列單片機(jī),p1.0和p1.1還有第2功能:p1.0口用作定時(shí)器/計(jì)數(shù)器2的計(jì)數(shù)脈沖輸入端t2;p1.1用作定時(shí)器/計(jì)數(shù)器2的外部控制端t2ex。對(duì)于eprom編程和進(jìn)行程序校驗(yàn)時(shí),p0口接收輸入的低8位地址。(c).p2口(21腳28腳):p2.0p2.7統(tǒng)稱為p2口,一般可作為準(zhǔn)雙向i/o接口。當(dāng)接有外部程序存儲(chǔ)器或擴(kuò)展i/o接口且尋址范圍超過(guò)256個(gè)字節(jié)時(shí),p2口用于高8位地址總線送出高8位地址。對(duì)于eprom編程和進(jìn)行程序校驗(yàn)時(shí),p2口接收輸入的8位地址。(d).p3口(

14、10腳17腳):p3.0p3.7統(tǒng)稱為p3口。它為雙功能口,可以作為一般的準(zhǔn)雙向i/o接口,也可以將每1位用于第2功能,而且p3口的每一條引腳均可獨(dú)立定義為第1功能的輸入輸出或第2功能。p3口的第2功能見(jiàn)下表 表1 單片機(jī)p3.0管腳含義引腳第2功能p3.0rxd(串行口輸入端0)p3.1txd(串行口輸出端)p3.2int0(部中斷0請(qǐng)求輸入端,低電平有效)p3.3int1(中斷1請(qǐng)求輸入端,低電平有效)p3.4t0(時(shí)器/計(jì)數(shù)器0計(jì)數(shù)脈沖端)p3.5t1(時(shí)器/計(jì)數(shù)器1數(shù)脈沖端)p3.6wr(部數(shù)據(jù)存儲(chǔ)器寫選通信號(hào)輸出端,低電平有效)p3.7rd(部數(shù)據(jù)存儲(chǔ)器讀選通信號(hào)輸出端,低電平有效)

15、綜上所述,mcs51系列單片機(jī)的引腳作用可歸納為以下兩點(diǎn):1).單片機(jī)功能多,引腳數(shù)少,因而許多引腳具有第2功能;2).單片機(jī)對(duì)外呈3總線形式,由p2、p0口組成16位地址總線;由p0口分時(shí)復(fù)用作為數(shù)據(jù)總線。(四)溫度傳感器電路采用一線制數(shù)字溫度傳感器ds18b20來(lái)作為本課題的溫度傳感器。傳感器輸出信號(hào)進(jìn)4.7k的上拉電阻直接接到單片機(jī)的p1.0引腳上。ds18b20溫度傳感器是美國(guó)達(dá)拉斯(dallas)半導(dǎo)體公司推出的應(yīng)用單總線技術(shù)的數(shù)字溫度傳感器。該器件將半導(dǎo)體溫敏器件、a/d轉(zhuǎn)換器、存儲(chǔ)器等做在一個(gè)很小的集成電路芯片上。本設(shè)計(jì)中溫度傳感器之所以選擇單線數(shù)字器件ds18b20,是在經(jīng)過(guò)多

16、方面比較和考慮后決定的,主要有以下幾方面的原因:(1)系統(tǒng)的特性:測(cè)溫范圍為-55+125 ,測(cè)溫精度為士0.5;溫度轉(zhuǎn)換精度912位可變,能夠直接將溫度轉(zhuǎn)換值以16位二進(jìn)制數(shù)碼的方式串行輸出;12位精度轉(zhuǎn)換的最大時(shí)間為750ms;可以通過(guò)數(shù)據(jù)線供電,具有超低功耗工作方式。(2)系統(tǒng)成本:由于計(jì)算機(jī)技術(shù)和微電子技術(shù)的發(fā)展,新型大規(guī)模集成電路功能越來(lái)越強(qiáng)大,體積越來(lái)越小,而價(jià)格也越來(lái)越低。一支ds18b20的體積與普通三極管相差無(wú)幾,價(jià)格只有十元人民幣左右。(3)系統(tǒng)復(fù)雜度:由于ds18b20是單總線器件,微處理器與其接口時(shí)僅需占用1個(gè)i/o端口且一條總線上可以掛接幾十個(gè)ds18b20,測(cè)溫時(shí)無(wú)

17、需任何外部元件,因此,與模擬傳感器相比,可以大大減少接線的數(shù)量,降低系統(tǒng)的復(fù)雜度,減少工程的施工量。(4)系統(tǒng)的調(diào)試和維護(hù):由于引線的減少,使得系統(tǒng)接口大為簡(jiǎn)化,給系統(tǒng)的調(diào)試帶來(lái)方便。同時(shí)因?yàn)閐s18b20是全數(shù)字元器件,故障率很低,抗干擾性強(qiáng),因此,減少了系統(tǒng)的日常維護(hù)工作。ds18b20溫度傳感器只有三根外引線:?jiǎn)尉€數(shù)據(jù)傳輸總線端口dq ,外供電源線vdd,共用地線gnd。ds18b20有兩種供電方式:一種為數(shù)據(jù)線供電方式,此時(shí)vdd接地,它是通過(guò)內(nèi)部電容在空閑時(shí)從數(shù)據(jù)線獲取能量,來(lái)完成溫度轉(zhuǎn)換,相應(yīng)的完成溫度轉(zhuǎn)換的時(shí)間較長(zhǎng)。這種情況下,用單片機(jī)的一個(gè)i/o口來(lái)完成對(duì)ds18b20總線的上

18、拉。另一種是外部供電方式(vdd接+5v),相應(yīng)的完成溫度測(cè)量的時(shí)間較短。在本設(shè)計(jì)中采用外部供電方式實(shí)現(xiàn)ds18b20傳感器與單片機(jī)的連接,其接口電路如圖4所示。圖4 溫度傳感器接口(五)系統(tǒng)電源電路的設(shè)計(jì)本系統(tǒng)采用電源穩(wěn)壓芯片是lm2596,該開關(guān)電壓調(diào)節(jié)器是降壓型電源管理單片集成電路,能夠輸出3a的驅(qū)動(dòng)電流,輸入電壓是+5v,輸入電壓是+24v,同時(shí)具有很好的線性和負(fù)載調(diào)節(jié)特性。該器件內(nèi)部集成頻率補(bǔ)償和固定頻率發(fā)生器,開關(guān)頻率為150khz,與低頻開關(guān)調(diào)節(jié)器相比較,可以使用更小規(guī)格的濾波元件。 該器件還有其他一些特點(diǎn):在特定的輸入電壓和輸出負(fù)載的條件下,輸出電壓的誤差可以保證在±

19、4%的范圍內(nèi),振蕩頻率誤差在±15%的范圍內(nèi);可以用僅80a的待機(jī)電流,實(shí)現(xiàn)外部斷電;具有自我保護(hù)電路(一個(gè)兩級(jí)降頻限流保護(hù)和一個(gè)在異常情況下斷電的過(guò)溫完全保護(hù)電路)在該溫度控制系統(tǒng)中,其電源電路設(shè)計(jì)如下圖10所示。圖5 系統(tǒng)電源模塊(六)lcd顯示電路本課題設(shè)計(jì)的溫度控制系統(tǒng)是采用液晶屏128*64作為顯示模塊,其接口原理圖如下圖6所示:圖6 液晶顯示接口電路(七)串口通訊電路本課題設(shè)計(jì)的通訊采用的是常見(jiàn)的串口通訊,協(xié)議轉(zhuǎn)換芯片是采用max232a,其接口原理圖如下圖7所示:圖6 串口通訊接口電路(八)按鍵接口電路本課題設(shè)計(jì)采用的鍵盤模塊,其接口原理圖如下圖8所示:圖8 鍵盤模塊電

20、路(九)ds1302時(shí)鐘電路本課題設(shè)計(jì)的時(shí)鐘是采用時(shí)鐘芯片ds1302,其接口原理圖如下圖9所示:圖9 時(shí)鐘接口電路(十)存儲(chǔ)器接口電路本課題設(shè)計(jì)的存儲(chǔ)器采用的是at24c256,其接口原理圖如下圖十所示:圖10 存儲(chǔ)器電路三、系統(tǒng)軟件設(shè)計(jì)系統(tǒng)的軟件主要是采用c語(yǔ)言,對(duì)單片機(jī)進(jìn)行變成實(shí)現(xiàn)各項(xiàng)功能。主程序?qū)δK進(jìn)行初始化,而后調(diào)用讀溫度、處理溫度、顯示、鍵盤等模塊。用的是循環(huán)查詢方式,來(lái)顯示和控制溫度,主程序的主要功能是負(fù)責(zé)溫度的實(shí)時(shí)顯示、讀出并處理ds18b20的測(cè)量的當(dāng)前溫度值并負(fù)責(zé)調(diào)用各子程序,其程序流程如圖10系統(tǒng)程序流程圖。開始初始化啟動(dòng)db18b20讀溫度計(jì)算溫度lcd顯示圖10系統(tǒng)

21、程序流程圖(一)計(jì)算溫度子程序 讀出溫度子程序的主要功能包括初始化,判斷ds18b20是否存在,若存在則進(jìn)行一系列的讀操,作若不存在則返回。其程序流程圖如圖11所示。圖11 讀溫度流程圖 (二)按鍵處理子程序 按鍵處理子程序主要是負(fù)責(zé)參數(shù)的設(shè)置,主程序每循環(huán)一次都要對(duì)按鍵進(jìn)行掃描,判斷是否有輸入鍵按下則進(jìn)行一系列的按鍵輸入操作。其程序流程框圖如圖12所示。圖12 溫度轉(zhuǎn)換流程圖(三)計(jì)算溫度子程序計(jì)算溫度子程序?qū)am中讀取值進(jìn)行bcd碼的轉(zhuǎn)換運(yùn)算,并進(jìn)行溫度值正負(fù)的判定,其程序流程圖如圖13所示。 開始溫度零下?溫度值取補(bǔ)碼置“”標(biāo)志計(jì)算小數(shù)位溫度bcd值計(jì)算整數(shù)位溫度bcd值 結(jié)束置“+”

22、標(biāo)志ny圖13 計(jì)算溫度子程序(四)顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對(duì)顯示緩沖器中的顯示數(shù)據(jù)進(jìn)行刷新操作,當(dāng)最高顯示位為0時(shí)將符號(hào)顯示位移入下一位。程序流程圖如圖14。溫度數(shù)據(jù)移入顯示寄存器十位數(shù)0?百位數(shù)0?十位數(shù)顯示符號(hào)百位數(shù)不顯示百位數(shù)顯示數(shù)據(jù)(不顯示符號(hào)) 結(jié)束nnyy圖14 數(shù)據(jù)刷新子程序四、結(jié)束語(yǔ)通過(guò)此次畢業(yè)論文的課題設(shè)計(jì),我們學(xué)會(huì)了怎樣把所學(xué)的書本知識(shí)應(yīng)用于實(shí)踐中去,并學(xué)會(huì)了如何去思考整個(gè)控制系統(tǒng)的軟硬件設(shè)計(jì)。實(shí)踐過(guò)程中我們遇到了一些困難,但在解決問(wèn)題的過(guò)程中,我們學(xué)會(huì)了團(tuán)隊(duì)合作精神和怎樣發(fā)現(xiàn)問(wèn)題、分析問(wèn)題,進(jìn)而解決問(wèn)題。此次課程設(shè)計(jì)不僅增強(qiáng)了我們學(xué)習(xí)專業(yè)課的興趣,而且

23、給了我們勇氣和信心,更重要的是它為我們以后的學(xué)習(xí)指明了方向。參考文獻(xiàn)1 李廣弟,朱月秀,王秀山.單片機(jī)基礎(chǔ)北京航空航天大學(xué)出版社,2001(07).2 蔡美琴,張為民等.mcs-51系列單片機(jī)系統(tǒng)及其應(yīng)用高等教育出版社,2004(06).3 張毅剛,等.mcs-51單片機(jī)應(yīng)用設(shè)計(jì)m.哈爾濱工業(yè)大學(xué)出版社,1997.4 劉瑞星,胡健等.protel dxp 實(shí)用教程機(jī)械工業(yè)出版社,2003(04).5 于海生. 計(jì)算機(jī)控制技術(shù) 機(jī)械工業(yè)出版社 2007(05).6 譚浩強(qiáng). c程序設(shè)計(jì) 清華大學(xué)出版社.7 康華光. 電子技術(shù)基礎(chǔ) 模擬部分 高等教育出版社 1998(08).8 余錫存. 單片機(jī)原

24、理與接口技術(shù) 西安電子科技大學(xué)出版社,2003.致謝本論文是在我的指導(dǎo)老師密切關(guān)心和悉心指導(dǎo)下完成的。老師在課題開題期間和論文寫作的過(guò)程中給予了我許多指導(dǎo),導(dǎo)師總是以認(rèn)真負(fù)責(zé)、一絲不茍的工作態(tài)度閱讀并修改文章中不足的地方,他優(yōu)良的作風(fēng)和嚴(yán)謹(jǐn)治學(xué)的態(tài)度深深影響著我,至此,向恩師致以最真摯的感謝和最崇高的敬意!同時(shí)我要感謝我的同學(xué),特別是我的室友們,正是他們?cè)谶@幾年里陪我一起成長(zhǎng),一起學(xué)習(xí),才讓我有了今天的成績(jī)。他們?cè)谄綍r(shí)的學(xué)習(xí)和生活中他們給予了我無(wú)私的關(guān)懷和幫助,在此表示我最誠(chéng)摯的謝意。附件1:系統(tǒng)原理圖附件2:系統(tǒng)相關(guān)程序一、ds18b20底層驅(qū)動(dòng)程序/延時(shí) n ms/ds1820引腳定義sb

25、it tmdat =p10;void ds1820_delaycount (unsigned char coun) data unsigned char count; count=coun; while(count>0) count-; count=coun; while(count>0) count-;/復(fù)位ds18b20void ds1820_reset(void) tmdat=0; ds1820_delaycount(412); tmdat=1; ds1820_delaycount(16); /等待ds18b20應(yīng)答unsigned char ds1820_answer(vo

26、id)data unsigned int i;data unsigned char j; i=0xc000; while(tmdat) i-;if (i=0)return(aban_return); i=0xffff; j=3; while(tmdat) i-;if (i=0) if(j=0) return(aban_return); else j-; i=0xffff; ds1820_delaycount(16); return(done_return);/等待ds18b20應(yīng)答/讀取位bit ds1820_readbit(void) data int i=0; bit dat; tmdat

27、=0;i+;i+;i+;i+; tmdat=1;i+;i+;i+;i+;i+;i+;i+;i+; dat = tmdat;/ ds1820_delaycount(8); ds1820_delaycount(32); return dat;/讀取字節(jié)unsigned char ds1820_readbyte(void)data unsigned char i,j,dat=0; for(i=1;i<=8;i+) j=ds1820_readbit(); dat=(j<<7)|(dat>>1); return dat;/寫一個(gè)字節(jié)void ds1820_writebyte

28、(unsigned char dat) data signed char i=0; data unsigned char j; bit testb; for(j=1;j<=8;j+) testb=dat & 0x01; dat = dat>>1; if(testb) tmdat=0; i+;i+;i+;i+;i+;i+;i+;i+; tmdat=1; /ds1820_delaycount(8); ds1820_delaycount(32); else tmdat=0; /ds1820_delaycount(8); ds1820_delaycount(32); tmda

29、t=1; i+;i+;i+;i+;i+;i+;i+;i+; /讀操作開始unsigned char ds1820_starttem(void) ea=0; ds1820_reset(); if(ds1820_answer()=aban_return) ea=ea; return(aban_return); / ds1820_delayms(1); ds1820_delayms(4); ds1820_writebyte(0xcc); / ds1820_writebyte(0x55); / for(i=0;i<8;i+) /ds1820_writebyte(ds1820_tempi); ds

30、1820_writebyte(0x44); ea=ea; return(done_return);/讀所有傳感器int ds1820_readtem(void)data unsigned char a,b;data int y3;data float y4;data unsigned char i; ea=0; ds1820_reset(); if(ds1820_answer()=aban_return) ea=ea; return(0xffff); ds1820_delayms(4); ds1820_writebyte(0xcc); /跳過(guò)匹配傳感器 /ds1820_writebyte(0x

31、55); /匹配傳感器 / for(i=0;i<8;i+) /ds1820_writebyte(run_inf.system_index.ds1820_tempi); ds1820_writebyte(0xbe); /讀取溫度 for(i=0;i<9;i+) run_inf.system_index.ds1820_tempi=ds1820_readbyte(); if(crc(9)!=0) ea=1; return(0xffff); /計(jì)算crc a = run_inf.system_index.ds1820_temp0; b = run_inf.system_index.ds18

32、20_temp1; ds1820_reset(); y3 = (b<< 8)|a; y4=y3; y4=(y4*25)/4; ea=1; return(int)(y4);二、ds1302時(shí)鐘底層驅(qū)動(dòng)程序/ds1302引腳定義sbit rtc_sc=p34;sbit rtc_io=p35;sbit rst_1302=p36;bdata unsigned char temp;sbit temp_0 = temp0;sbit temp_7 = temp7;/*ds1302驅(qū)動(dòng)程序開始*/功能: 往ds1302寫入1byte數(shù)據(jù)void v_rtinputbyte(unsigned cha

33、r ucda) unsigned char i;temp = ucda;for(i=8; i>0; i-)rtc_io = temp_0; /*相當(dāng)于匯編中的 rrc */rtc_sc = 1;rtc_sc = 0;temp = temp >> 1; /功能: 從ds1302讀取1byte數(shù)據(jù)unsigned char uc_rtoutputbyte(void) unsigned char i;rtc_io=1;for(i=8; i>0; i-) temp = temp >>1; /*相當(dāng)于匯編中的 rrc */ temp_7 = rtc_io; rtc_s

34、c = 1; rtc_sc = 0; return(temp); /功能: 往ds1302寫入數(shù)據(jù)void write1302(unsigned char ucaddr,unsigned char ucda) bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */v_rtinputbyte(ucda); /* 寫1byte數(shù)據(jù)*/rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);e

35、a = ea; /功能: 讀取ds1302某地址的數(shù)據(jù)unsigned char read1302(unsigned char ucaddr)unsigned char ucda; bit ea; ea=ea; ea=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_rtinputbyte(ucaddr); /* 地址,命令 */ucda = uc_rtoutputbyte(); /* 讀1byte數(shù)據(jù) */rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);ea = ea;r

36、eturn(ucda);/功能: 設(shè)置初始時(shí)間void set1302(ptime_s time_temp) unsigned char i= 0x80; write1302(0x8e,0x00); /* 控制命令,wp=0,寫操作*/ write1302(i,time_temp->sec); i +=2; write1302(i,time_temp->min); i +=2; write1302(i,time_temp->hou); i +=2; write1302(i,time_temp->day); i +=2; write1302(i,time_temp->

37、;mon); i +=2; write1302(i,0x02); i +=2; write1302(i,time_temp->yea); i +=2; write1302(0x8e,0x80); /* 控制命令,wp=1,寫保護(hù)*/功能: 讀取ds1302當(dāng)前時(shí)間void get1302(void) unsigned char i,time_bcd_temp6;unsigned char ucaddr = 0x81;for (i=0;i<7;i+) time_bcd_tempi = read1302(ucaddr);/*格式為: 秒 分 時(shí) 日 月 星期 年 */ ucaddr +

38、= 2; sec=time_bcd_temp0;min=time_bcd_temp1;hou=time_bcd_temp2;day=time_bcd_temp3;mon=time_bcd_temp4;yea=time_bcd_temp6; /連續(xù)6字節(jié)讀出程序void ds1302_read(unsigned char *ptr,unsigned char addr) unsigned char i;addr=addr*2+0x0c1;for(i=0;i<6;i+) *(ptr+i)=read1302(addr); addr+=2; /連續(xù)6字節(jié)寫入程序void ds1302_write

39、(unsigned char *ptr,unsigned char addr)unsigned char i;addr=addr*2+0x0c0;write1302(0x8e,0x00); /寫保護(hù)置低(關(guān)閉)for(i=0;i<6;i+) write1302(addr,*(ptr+i); addr+=2; write1302(0x8e,0x80); /寫保護(hù)置高(打開) void start1302(void) unsigned char temp; bit ea; ea=ea; ea=0; temp=read1302(0x81); temp&=0x7f; write1302(

40、0x8e,0x00); /* 控制命令,wp=0,寫操作*/ write1302(0x80,temp); write1302(0x90,0); write1302(0x8e,0x80); /* 控制命令,wp=1,寫保護(hù)*/ ea=ea;/ds1302驅(qū)動(dòng)程序結(jié)束三、數(shù)據(jù)存儲(chǔ)底層驅(qū)動(dòng)程序/atc256引腳定義sbit epr_sd=p33;sbit epr_sc=p32;bdata unsigned char temp1;sbit temp1_0 = temp10;sbit temp1_7 = temp17;/存儲(chǔ)器驅(qū)動(dòng)程序開始void noack(void) epr_sd=1; epr_sc

41、=1; epr_sc=1; epr_sc=1; epr_sc=0;void ask()unsigned char i=0xff; epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1;doi-; if(epr_sd=0) epr_sc=0; i=0; while(i!=0);epr_sd=1;epr_sd=1;epr_sd=1;void stop() epr_sd=0; epr_sd=0; epr_sd=0; epr_sc=1; epr_sc=1; epr_sc=1; epr_sd=1; epr_sd=1; epr_sd=1; epr_sd=1;/24c256 star

42、tvoid start()epr_sc=1;epr_sd=1;epr_sd=1; epr_sd=0; epr_sd=0; epr_sc=0;void wrby(unsigned char x) unsigned char i; epr_sc=0;temp1=x;for(i=0;i<8;i+) /從高位開始傳送數(shù)據(jù) epr_sd=temp1_7; temp1=temp1<<1; /左移一位 epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0; /24c256 rdby unsigned char rdby() /從高位開始讀出數(shù)據(jù)

43、unsigned char i;epr_sd=1;epr_sd=1;epr_sd=1;for(i=0;i<8;i+) epr_sc=1;epr_sc=1; temp1=temp1<<1; temp1_0=epr_sd; epr_sc=0; epr_sc=0;epr_sc=0; return(temp1);/24c256 waddr void waddr() start(); wrby(0xa0); ask();/24c256 raddrunsigned char raddr() start(); wrby(0xa1); ask(); temp1=rdby(); noack()

44、; stop(); return(temp1);void w16addr(unsigned int x) union unsigned int int_type;unsigned char char_type1; u_int_char;unsigned m,n;u_int__type=x; /將x的高位賦給m,低位賦給nm=u_int_char.char_type0;n=u_int_char.char_type1; wrby(m ); ask(); wrby(n ); ask();/延時(shí)void d5ms() unsigned char a, b; for (a=0;a<

45、=15;a+) for (b=0;b<0x7f;b+) ; /24c256 讀出一字節(jié) unsigned char epr_read(unsigned int x) bit ea; ea=ea; ea=0; /關(guān)中斷 epr_wen; d5ms(); waddr(); w16addr(x); temp1=raddr(); ea=ea;/開中斷 return(temp1);/24c256 寫入一字節(jié)void epr_write(unsigned int f,unsigned char x) bit ea; ea=ea; ea=0 ; /關(guān)中斷 d5ms(); waddr(); w16add

46、r(f); wrby(x); ask(); stop(); d5ms();ea=ea; /開中斷/存儲(chǔ)器驅(qū)動(dòng)程序結(jié)束匯編部分:temperature_l data 31h ;ds18b20低8位buffertemperature_h data 30h ;ds18b20高8位buffer temperature_hc data 32h ;計(jì)算后的百位和十位的bcd碼存放;buffer temperature_lc data 33h ;計(jì)算后的個(gè)位和小數(shù)位的bcd碼存放 temperature_zh data 34h ; 計(jì)算后十位和個(gè)位hex碼的存放bufferdis_buf_x data 35

47、h ;數(shù)碼管小數(shù)位buffer dis_buf_g data 36h ;數(shù)碼管個(gè)位buffer dis_buf_s data 37h ;數(shù)碼管十位buffer dis_buf_b data 38h ;數(shù)碼管百位buffer key_buf_g data 39h ;鍵盤輸入后,的個(gè)位值 key_buf_s data 49h ;鍵盤輸入后,的十位值 key_buf_b data 41h ;鍵盤輸入后,的百位值 k_up equ p1.1 ;上調(diào)按鈕 k_down equ p1.2 ;下調(diào)按鈕 k_enter equ p1.0 ;輸入數(shù)據(jù)確認(rèn)按鈕 p_ds18b20 equ p3.0 ;讀取ds18b20的輸入端口 p_switch equ p3.1 ;可控硅控制 flag equ 20h.0 ;標(biāo)志位,確定是否存在ds18b20 enter_flag equ 20h.1 ;鍵盤輸入的標(biāo)志位, org 0000h ljmp main org 0100hmain: mov sp,#60h ;初始化 mov key_buf_g,#00h ;由于key

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論