版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于51單片機(jī)課程設(shè)計(jì)報(bào)告</p><p> 院 系: 電子通信工程 </p><p> 團(tuán) 組: 電子設(shè)計(jì)大賽1組</p><p> 姓 名: </p><p> 指導(dǎo)老師: </p><p><b> 2012/8/
2、15</b></p><p> 目錄一、摘要……………………………… 3</p><p> 二、系統(tǒng)方案的設(shè)計(jì)………………… 3</p><p> 三、硬件資源………………………… 5</p><p> 四、 硬件總體電路搭建…………… 13</p><p> 五、程序流程圖……………………
3、……14</p><p> 六、設(shè)計(jì)感想…………………………… 14</p><p> 七、參考文獻(xiàn)…………………………… 16</p><p> 附錄………………………………………17</p><p> 附錄 1 程序代碼………………………………17</p><p><b> 一、摘要<
4、/b></p><p> 本設(shè)計(jì)以STC89C51單片機(jī)為核心的溫度控制系統(tǒng)的工作原理和設(shè)計(jì)方法。溫度信號(hào)由溫度芯片DS18B20采集,并以數(shù)字信號(hào)的方式傳送給單片機(jī)。文中介紹了該控制系統(tǒng)的硬件部分,包括:溫度檢測(cè)電路、溫度控制電路。單片機(jī)通過(guò)對(duì)信號(hào)進(jìn)行相應(yīng)處理,從而實(shí)現(xiàn)溫度控制的目的。文中還著重介紹了軟件設(shè)計(jì)部分,在這里采用模塊化結(jié)構(gòu),主要模塊有:數(shù)碼管顯示程序、鍵盤(pán)掃描及按鍵處理程序、溫度信號(hào)處理程序
5、、led控制程序、超溫報(bào)警程序。</p><p> 關(guān)鍵詞:STC89C51單片機(jī) DS18B20溫度芯片 溫度控制 ,LED報(bào)警提示.</p><p><b> 二、系統(tǒng)方案的設(shè)計(jì)</b></p><p><b> 1、設(shè)計(jì)要求</b></p><p><b> 基本功能:<
6、;/b></p><p> 不加熱時(shí)實(shí)時(shí)顯示時(shí)間,并可手動(dòng)設(shè)置時(shí)間;</p><p> 設(shè)定加熱水溫功能。人工設(shè)定熱水器燒水的溫度,范圍在20~70度之間,打開(kāi)開(kāi)關(guān)后,根據(jù)設(shè)定溫度與水溫確定是否加熱,及何時(shí)停止加熱,可實(shí)時(shí)顯示溫度;</p><p> 設(shè)定加熱時(shí)間功能。限定燒水時(shí)間,加熱時(shí)間內(nèi)超過(guò)溫度上限或低于溫度下限報(bào)警,并可實(shí)時(shí)顯示溫度。</p
7、><p><b> 2、系統(tǒng)設(shè)計(jì)的框架</b></p><p> 本課題設(shè)計(jì)的是一種以STC89C51單片機(jī)為主控制單元,以DS18B20為溫度傳感器的溫度控制系統(tǒng)。該控制系統(tǒng)可以實(shí)時(shí)存儲(chǔ)相關(guān)的溫度數(shù)據(jù)并記錄當(dāng)前的時(shí)間。其主要包括:電源模塊、溫度測(cè)量及調(diào)理電路、鍵盤(pán)、數(shù)碼管顯示、指示燈、報(bào)警、繼電器及單片機(jī)最小系統(tǒng)。</p><p><b
8、> 圖1 系統(tǒng)設(shè)計(jì)框架</b></p><p><b> 3 工作原理</b></p><p> 溫度傳感器 DS18B20 從設(shè)備環(huán)境的不同位置采集溫度,單片機(jī)STC8951 獲</p><p> 取采集的溫度值,經(jīng)處理后得到當(dāng)前環(huán)境中一個(gè)比較穩(wěn)定的溫度值,再根據(jù)當(dāng)前設(shè)定的溫度上下限值,通過(guò)加熱和降溫對(duì)當(dāng)前溫度進(jìn)行調(diào)
9、整。當(dāng)采集的溫度經(jīng)處理后超過(guò)設(shè)定溫度的上限時(shí),單片機(jī)通過(guò)三極管驅(qū)動(dòng)繼電器開(kāi)啟降溫設(shè)備 (壓縮制冷器) ,當(dāng)采集的溫度經(jīng)處理后低于設(shè)定溫度的下時(shí) , 單片機(jī)通過(guò)三極管驅(qū)動(dòng)繼電器開(kāi)啟升溫設(shè)備 (加熱器) ,這里采用通過(guò)LED1和LED2取代?。。?lt;/p><p> 當(dāng)由于環(huán)境溫度變化太劇烈或由于加熱或降溫設(shè)備出現(xiàn)故障,或者溫度傳感頭出現(xiàn)故障導(dǎo)致在一段時(shí)間內(nèi)不能將環(huán)境溫度調(diào)整到規(guī)定的溫度限內(nèi)的時(shí)候,單片機(jī)通過(guò)三極管驅(qū)
10、動(dòng)揚(yáng)聲器發(fā)出警笛聲,這里采用HLLED提示。</p><p><b> 三、硬件資源</b></p><p><b> 1、器件選擇:</b></p><p> 1.51單片機(jī)一塊STC89c51</p><p> STC8951 是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含8k Byt
11、es ISP(In-system programmable)的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及STC8951引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的STC8951可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。STC8951具有如下特點(diǎn):40個(gè)引腳,8k Bytes Flash片內(nèi)程序
12、存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信,片內(nèi)時(shí)鐘振蕩器。</p><p> 此外,STC8951設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式??臻e模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其
13、它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p> 由于系統(tǒng)控制方案簡(jiǎn)單 ,數(shù)據(jù)量也不大 ,考慮到電路的簡(jiǎn)單和成本等因素 ,因此在本設(shè)計(jì)中選用 STC8951單片機(jī)作為主控芯片。主控模塊采用單片機(jī)最小系統(tǒng)是由于STC8951芯片內(nèi)含有8 kB的 E2PROM ,無(wú)需外擴(kuò)存儲(chǔ)器 ,電路簡(jiǎn)單可靠 ,其時(shí)鐘頻率為 0~24 MHz ,并
14、且價(jià)格低廉 ,批量?jī)r(jià)在 10元以內(nèi)。</p><p> 其單片機(jī)的外圍引腳有40個(gè),分別是:第20腳和40腳分別是電源,即GND和Vcc;第9腳是復(fù)位腳RST;第18腳是時(shí)鐘XTAL2腳,片內(nèi)振蕩電路的輸出端;第19腳是時(shí)鐘XTAL1腳,片內(nèi)振蕩電路的輸入端;第29腳:~PSEN腳,當(dāng)訪問(wèn)外部程序存儲(chǔ)器時(shí),此引腳輸出負(fù)脈沖選通信號(hào),PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上;第30腳:ALE/~PROG,當(dāng)訪問(wèn)
15、外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存)的輸出用于鎖存地址的低字節(jié);第31腳:~EA/Vpp為程序存儲(chǔ)器內(nèi)外部選通信號(hào);P0^0-P0^7.P1^0-P1^7.P2^0-P2^7.P3^0-P3^7.這32個(gè)引腳為數(shù)據(jù)的輸出及輸入引腳,即I/0口;單片機(jī)圖如下:</p><p> 2、8位7段共陰數(shù)碼管一個(gè)</p><p> 7段數(shù)碼管一般由8個(gè)發(fā)光二極管組成,其中由7個(gè)細(xì)長(zhǎng)的發(fā)光二極管組
16、成數(shù)字顯示,另外一個(gè)圓形的發(fā)光二極管顯示小數(shù)點(diǎn)。</p><p> 當(dāng)發(fā)光二極管導(dǎo)通時(shí),相應(yīng)的一個(gè)點(diǎn)或一個(gè)筆畫(huà)發(fā)光??刂葡鄳?yīng)的二極管導(dǎo)通,就能顯示出各種字符,盡管顯示的字符形狀有些失真,能顯示的數(shù)符數(shù)量也有限,但其控制簡(jiǎn)單,使有也方便。發(fā)光二極管的陽(yáng)極連在一起的稱為共陽(yáng)極數(shù)碼管,陰極連在一起的稱為共陰極數(shù)碼管,如圖4.9所示。</p><p> 共陰數(shù)碼管的編碼為:0x3F,0x0C,
17、0x76,0x5E,0x4D,0x5B,0x7B,0x0E,0x7F,0x5F,0x6F,0x79,0x33,0x7C,0x73,0x63</p><p> 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,A , B, C, D, E, F </p><p> 3、溫度顯示DS18B20一個(gè)</p&g
18、t;<p> DS18B20采用3腳TO-92封裝或8腳的SOIC封裝,如圖1所示。各引腳的功能:GND為電壓地;DQ為單數(shù)據(jù)總線;V為電源電壓;NC為空引腳。</p><p> 圖1DS18B20引腳圖</p><p> DS18B20的DQ單數(shù)據(jù)總線與單片機(jī)P3.7連接,GND電壓地、V電源電壓分別和電壓地和5伏直流電源連接。本文設(shè)計(jì)的系統(tǒng)主機(jī)只對(duì)一個(gè)DS18B20
19、進(jìn)行操作,因此不需要讀取ROM編碼以及匹配ROM編碼,只要跳過(guò)ROM命令,就可以進(jìn)行如下溫度轉(zhuǎn)換和讀取操作。</p><p> (1)CCH—跳過(guò)ROM,直接向DS18B20發(fā)送溫度變換命令。</p><p> (2)44H—讀暫存器。讀內(nèi)部RAM中9字節(jié)的溫度數(shù)據(jù)。</p><p> (3)BEH—寫(xiě)暫存器。發(fā)出向內(nèi)部RAM的第2、3字節(jié)寫(xiě)上、下限溫度數(shù)據(jù)命
20、令,緊跟該命令之后,再傳送兩字節(jié)數(shù)據(jù)。</p><p> DS18B20在出廠時(shí)默認(rèn)配置為12位,其中最高位為符號(hào)位,即溫度值共11位,單片機(jī)在讀取數(shù)據(jù)時(shí),一次會(huì)讀兩字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制后再乘以0.0625變?yōu)樗鶞y(cè)的溫度值。另外,還需要判斷溫度的正負(fù)。前5個(gè)數(shù)字為符號(hào)位,這5位同時(shí)變化,我們只需判斷11位就可以了。前5位為1時(shí),讀取的溫度為負(fù)值,且測(cè)到的數(shù)值需要取反再加一再乘以0
21、.0625才可以得到實(shí)際的溫度值。前5位為0時(shí),讀取的溫度為正值,只要將測(cè)得的數(shù)值乘以0.0625即可得到實(shí)際溫度值。</p><p> 由于提前給DS18B20賦了上限、下限值,所以當(dāng)溫度超過(guò)上限或者不足下限時(shí),會(huì)伴有LED燈閃爍和蜂鳴器響作為警報(bào)。</p><p><b> 4、按鍵</b></p><p> 在按下鍵時(shí),實(shí)際情況下,
22、都會(huì)出現(xiàn)抖動(dòng)。其直觀圖如下:</p><p> 按鍵消抖一般采用硬件和軟件消抖兩種方法。硬件消抖是利用電路濾波的原理實(shí)現(xiàn),軟件消抖是通過(guò)按鍵延時(shí)來(lái)實(shí)現(xiàn)。在微機(jī)系統(tǒng)中一般都采用軟件延時(shí)的消抖方法,本文用的是軟件延時(shí)的消抖方法。</p><p> 5、74HC573鎖存器</p><p> 高性能硅門(mén) CMOS 器件</p><p> S
23、L74HC573 跟 LS/AL573 的管腳一樣。器件的輸入是和標(biāo)準(zhǔn) CMOS 輸出兼容的;加上拉電阻,他們能和 LS/ALSTTL 輸出兼容。</p><p> 當(dāng)鎖存使能端LE為高時(shí),這些器件的鎖存對(duì)于數(shù)據(jù)是透明的(也就是說(shuō)輸出同步)相當(dāng)于圖上的Dx-Qx相通,I/0口可以進(jìn)行數(shù)據(jù)交換。當(dāng)鎖存使能變低時(shí),符合建立時(shí)間和保持時(shí)間的數(shù)據(jù)會(huì)被鎖存。在這里我們是將LE接高電平,把鎖存器當(dāng)作驅(qū)動(dòng)器,驅(qū)動(dòng)數(shù)碼管的顯示
24、;</p><p><b> 6、晶振</b></p><p> 其晶振的運(yùn)用,在這地方我們用的是12MHz,主要用在單片機(jī)的最小系統(tǒng)中,參照單片機(jī)最小系統(tǒng)圖示;</p><p><b> 電阻.電容.導(dǎo)線等</b></p><p> (一)單片機(jī)最小系統(tǒng)電路</p><
25、p> 在課題設(shè)計(jì)的溫度控制系統(tǒng)設(shè)計(jì)中,控制核心是STC89C52單片機(jī),該單片機(jī)為51系列增強(qiáng)型8位單片機(jī),它有32個(gè)I/O口,片內(nèi)含4K FLASH工藝的程序存儲(chǔ)器,便于用電的方式瞬間擦除和改寫(xiě),而且價(jià)格便宜,其外部晶振為12MHz,一個(gè)指令周期為1μS。使用該單片機(jī)完全可以完成設(shè)計(jì)任務(wù),其最小系統(tǒng)主要包括:復(fù)位電路、震蕩電路以及存儲(chǔ)器選擇模式(EA腳的高低電平選擇),電路如下圖2所示:</p><p>
26、; 圖2 單片機(jī)最小系統(tǒng)</p><p> (二)溫度傳感器電路</p><p> 采用一線制數(shù)字溫度傳感器DS18B20來(lái)作為本課題的溫度傳感器。傳感器輸出信號(hào)進(jìn)4.7K的上拉電阻直接接到單片機(jī)的P1.0引腳上。</p><p> DS18B20溫度傳感器是美國(guó)達(dá)拉斯(DALLAS)半導(dǎo)體公司推出的應(yīng)用單總線技術(shù)的數(shù)字溫度傳感器。該器件將半導(dǎo)體溫敏器件、A
27、/D轉(zhuǎn)換器、存儲(chǔ)器等做在一個(gè)很小的集成電路芯片上。本設(shè)計(jì)中溫度傳感器之所以選擇單線數(shù)字器件DS18B20,是在經(jīng)過(guò)多方面比較和考慮后決定的,主要有以下幾方面的原因:</p><p> ?。?)系統(tǒng)的特性:測(cè)溫范圍為20℃~70℃ ,測(cè)溫精度為士0.5℃;溫度轉(zhuǎn)換精度9~12位可變,能夠直接將溫度轉(zhuǎn)換值以16位二進(jìn)制數(shù)碼的方式串行輸出;12位精度轉(zhuǎn)換的最大時(shí)間為750ms;可以通過(guò)數(shù)據(jù)線供電,具有超低功耗工作方式。
28、</p><p> ?。?)系統(tǒng)成本:由于計(jì)算機(jī)技術(shù)和微電子技術(shù)的發(fā)展,新型大規(guī)模集成電路功能越來(lái)越強(qiáng)大,體積越來(lái)越小,而價(jià)格也越來(lái)越低。一支DS18B20的體積與普通三極管相差無(wú)幾,價(jià)格只有十元人民幣左右。</p><p> (3)系統(tǒng)復(fù)雜度:由于DS18B20是單總線器件,微處理器與其接口時(shí)僅需占用1個(gè)I/O端口且一條總線上可以掛接幾十個(gè)DS18B20,測(cè)溫時(shí)無(wú)需任何外部元件,因此,
29、與模擬傳感器相比,可以大大減少接線的數(shù)量,降低系統(tǒng)的復(fù)雜度,減少工程的施工量。</p><p> (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ù)工作。</p><p> DS18B20溫度傳感器只有三根外引線:?jiǎn)尉€數(shù)據(jù)傳輸總線端口DQ ,外供電源線VDD,共用地
30、線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總線的上拉。另一種是外部供電方式(VDD接+5V),相應(yīng)的完成溫度測(cè)量的時(shí)間較短。</p><p> 在本設(shè)計(jì)中采用外部供電方式實(shí)現(xiàn)DS18B20傳感器與單片機(jī)的連接,其接口電路如圖4所示。&
31、lt;/p><p> 圖4 溫度傳感器接口</p><p><b> (三)按鍵接口電路</b></p><p> 本課題設(shè)計(jì)采用的鍵盤(pán)模塊,其接口原理圖如下圖8所示:</p><p><b> 圖8 鍵盤(pán)模塊電路</b></p><p> 四、 硬件總體電路搭建<
32、;/p><p><b> 五、程序流程圖</b></p><p><b> 六、設(shè)計(jì)感想</b></p><p> 首先通過(guò)此次課程設(shè)計(jì),讓我們對(duì)所學(xué)的計(jì)算機(jī)控制技術(shù)理論知識(shí)更加熟悉了解,對(duì)理論學(xué)習(xí)時(shí)沒(méi)有掌握牢固的一些知識(shí)以及一些在學(xué)習(xí)中存在的漏洞進(jìn)行學(xué)習(xí)并加以彌補(bǔ),也讓我們明白學(xué)習(xí)一門(mén)課程就要認(rèn)真地對(duì)待,掌握牢固,并要
33、在實(shí)踐中加以運(yùn)用。只有能運(yùn)用自如的知識(shí)才是屬于自己的東西。 </p><p> 比較熟練,在學(xué)習(xí)此軟件過(guò)程中其次,此次課程設(shè)計(jì)我們嘗試用proteus軟件進(jìn)行仿真設(shè)計(jì)。對(duì)于proteus,我們之前對(duì)它的一些應(yīng)用比較熟悉,所以此次運(yùn)用起來(lái)通過(guò)查找圖書(shū)館的資料以及在網(wǎng)上的學(xué)習(xí)讓我們意外收獲了一些其他的知識(shí),拓展了知識(shí)面,也豐富了自己的閱歷。 第三,通過(guò)這次課程設(shè)計(jì),我們學(xué)會(huì)了單片機(jī)完成某一項(xiàng)功能,需要從兩個(gè)方面入手
34、:一是軟件的實(shí)現(xiàn)即匯編語(yǔ)言程序的編寫(xiě),二是硬件電路的實(shí)現(xiàn)。兩方面比較,程序編寫(xiě)時(shí)相對(duì)較難的一部分。我們團(tuán)組認(rèn)為這是一個(gè)建模的過(guò)程,即將實(shí)際的控制問(wèn)題轉(zhuǎn)換成我們所熟悉的數(shù)學(xué)模型,這是一個(gè)很抽象的問(wèn)題,有時(shí)真的是難以想象。所以我們覺(jué)得這種困難最好的解決辦法就是通過(guò)平時(shí)的積累,多多學(xué)習(xí)。 此次設(shè)計(jì)培養(yǎng)了我們對(duì)于計(jì)算機(jī)控制設(shè)計(jì)的一些興趣,當(dāng)看著自己設(shè)計(jì)的東西,通過(guò)仿真可以出現(xiàn)自己期望的結(jié)果時(shí),那種愉悅的心情是前所未有的,同時(shí)當(dāng)出現(xiàn)問(wèn)題,通過(guò)自己
35、查找資料檢查電路之后排除問(wèn)題的過(guò)程也鍛煉了我們對(duì)于學(xué)習(xí)的一種深入和堅(jiān)持,鍛煉了我們獨(dú)立思考的能力和最初的創(chuàng)新意識(shí),讓我們真正體會(huì)到學(xué)習(xí)的樂(lè)趣。 </p><p> 第五,我們?cè)俅戊柟塘艘恍┮郧暗臇|西,仿真軟件的運(yùn)用,課程設(shè)計(jì)的書(shū)寫(xiě),計(jì)算機(jī)的一些應(yīng)用軟件的應(yīng)用,以及對(duì)word的了解也更深入了。 </p><p> 最后一點(diǎn),也使最深刻的體會(huì),就是在設(shè)計(jì)過(guò)程中,基本上用到的都是我們學(xué)過(guò)的一
36、些原理,所以學(xué)以致用在這次設(shè)計(jì)中可謂體現(xiàn)的淋漓盡致,要把所學(xué)的知識(shí)聯(lián)系起來(lái)綜合運(yùn)用。這些都將成為我們以后的工作學(xué)習(xí)的鋪路石,使我們?cè)诖髮W(xué)里收獲的最實(shí)用的東西,而不是僅僅只是紙上談兵,而是通過(guò)我們親自動(dòng)手來(lái)完成的經(jīng)驗(yàn)對(duì)每個(gè)人來(lái)說(shuō)都是一筆財(cái)富,所以這次《單片機(jī)控制技術(shù)》課程設(shè)計(jì)對(duì)我們來(lái)說(shuō)絕對(duì)是一次難得的鍛煉的機(jī)會(huì)。</p><p><b> 七、參考文獻(xiàn)</b></p><
37、;p> [1] 馬彪 《單片機(jī)應(yīng)用技術(shù)》 同濟(jì)大學(xué)出版社 </p><p> [2] 郭天祥 《 51單片機(jī)C語(yǔ)言教程》 電子工業(yè)出版社 </p><p> [3] 陳海宴 《51單片機(jī)原理及應(yīng)用》 北京航空航天大學(xué)出版社 </p><p> 附錄………………………………………</p&g
38、t;<p> 附錄 1 程序代碼………………………………</p><p><b> 1:main主函數(shù)</b></p><p> #include"ds18b.h"</p><p> #include<reg52.h></p><p> sbit add=P
39、3^0;//加</p><p> sbit cut=P3^1;//減</p><p> sbit set=P3^2;//設(shè)置 </p><p> sbit p00=P0^0; sbit p01=P0^1; sbit p02=P0^2; sbit p03=P0^3; // //位選控制 聲明</p>&
40、lt;p> sbit p04=P0^4; sbit p05=P0^5; sbit p06=P0^6; sbit p07=P0^7;</p><p> sbit Lled=P2^0;//低于溫度下限值 此燈點(diǎn)亮</p><p> sbit Hled=P2^1; //高于溫度上限值 此燈點(diǎn)亮</p><p> sbit LHle
41、d=P2^2; // 達(dá)到加熱預(yù)設(shè)時(shí)間此燈點(diǎn)亮</p><p> unsigned char tab4[4]={0}; // 定義一個(gè)tab4號(hào)數(shù)組用來(lái)存放溫度的上限值與下限值</p><p> unsigned char tab8[9]={0}; //</p><p> unsigned char tab9[
42、6]={0}; // 定義一個(gè)tab9號(hào)數(shù)組用來(lái)存放用戶的給定的加熱時(shí)間</p><p> unsigned char code tab7[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位選控制 查表的方法控制</p><p> unsigned char code tab[]={0xfc,0x60,0xda,0xf
43、2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//共陽(yáng)數(shù)碼管數(shù)字碼</p><p> uchar tab1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //定義一個(gè)tab1號(hào)數(shù)組用來(lái)存放溫度轉(zhuǎn)換值</p><p> unsigned char shi=10,fen=35,miao,L; //你懂得 不用多講</p>
44、<p> unsigned char LED; //定義一個(gè)char變量用來(lái)控制數(shù)碼管上的秒的閃爍</p><p> unsigned char tt,i,flag=0;</p><p> unsigned int wen; //定義一個(gè)無(wú)符號(hào)整形變量用來(lái)存放溫度返回值</p><p> unsigned char
45、 TH,TL; //存放用戶的設(shè)定的溫度上下限值</p><p> void delay (unsigned int Z)// 延時(shí)函數(shù)</p><p><b> {</b></p><p> unsigned int x,y;</p><p> for(x=Z;x>0;x--)</p
46、><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void init ()//初始化 </p><p><b> {</b></p><p><b> P2=0xff;</b>&
47、lt;/p><p><b> P3=0xff;</b></p><p> TMOD=0x11; //開(kāi)啟定時(shí)器 0,1</p><p> TH1=(65536-5000)/256;//5Ms</p><p> TL1=(65536-5000)%256;</p><p><b>
48、EA=1;</b></p><p> ET1=1;//你懂得不用多講</p><p><b> TR1=1;</b></p><p> TH0=(65536-50000)/256;//50Ms</p><p> TL0=(65536-50000)%256;</p><p>
49、 ET0=1; //你懂得不用多講</p><p><b> TR0=1;</b></p><p><b> }</b></p><p> void main ()</p><p><b> {</b></p><p> init ();
50、//初始化I/O端口即定時(shí)器0.1;</p><p><b> while(1)</b></p><p><b> { </b></p><p> if((flag==0)||(flag==1)) //當(dāng)?shù)谝淮伟聪略O(shè)置鍵 進(jìn)入手動(dòng)設(shè)置當(dāng)前時(shí)間</p><p><b> {&l
51、t;/b></p><p> tab8[4]=fen/10; tab8[5]=fen%10; tab8[6]=shi/10;tab8[7]=shi%10;</p><p> wen=dispaly();</p><p> tab1[2]=wen/100;</p><p> tab1[1]=wen%100/10; //你懂得不
52、用多講</p><p> tab1[0]=wen%10;</p><p> tab8[8]=tab1[2]*10+tab1[1];</p><p> for(L=0;L<50;L++)</p><p> for(i=0;i<8;i++)</p><p><b> {</b>&
53、lt;/p><p><b> P1=0;</b></p><p> P1=tab[tab1[1]];p00=0;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=1;delay_ms(2);</p><p> P1=tab[tab1[2]]; p00=1;p01=0;p02=1;p03=1;p04=1;p0
54、5=1;p06=1;p07=1; delay_ms(2);</p><p> if(LED>=20) { P1=0x02; p00=1;p01=1;p02=1;p03=1;p04=1;p05=0;p06=1;p07=1; delay_ms(2); }</p><p> if(LED>=40) { LED=0; P1=0x02; p00=
55、1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=1; delay_ms(2); }</p><p> if(flag==1) { P1=0x02; p00=1;p01=1;p02=1;p03=1;p04=1;p05=0;p06=1;p07=1; delay_ms(2); }</p><p> P1=tab[tab8[6]];
56、p00=1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=0; delay_ms(2); </p><p> P1=tab[tab8[7]];p00=1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=0;p07=1; delay_ms(2); </p><p> P1=0x9c; p00=1;p01=1;p02=
57、0;p03=1;p04=1;p05=1;p06=1;p07=1; delay_ms(2);</p><p> P1=tab[tab8[4]];p00=1;p01=1;p02=1;p03=1;p04=0;p05=1;p06=1;p07=1; delay_ms(2); </p><p> P1=tab[tab8[5]];p00=1;p01=1;p02=1;p03=0;p04=1;p05
58、=1;p06=1;p07=1; delay_ms(2); </p><p><b> } </b></p><p><b> }</b></p><p> if((flag==2)|(flag==3))//當(dāng)?shù)诙蛘叩谌伟聪略O(shè)置鍵 進(jìn)入溫度上下限門(mén)檻設(shè)置</p><p><b>
59、 {</b></p><p> tab4[2]=tab8[2]/100; tab4[1]=tab8[2]%100/10; tab4[0]=tab8[2]%10; //Htab[2]</p><p> tab4[6]=tab8[3]/100; tab4[5]=tab8[3]%100/10; tab4[4]=tab8[3]%10;//L tab[3]</p
60、><p> for(i=0;i<8;i++)</p><p> { //動(dòng)態(tài)掃描</p><p> P1=tab[tab4[i]]; if(i==3) P1=0x6e ; if(i==7) P1=0x1c ;</p><p> P0=tab7[i];</p><p><b> del
61、ay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p> if(flag==4)//當(dāng)?shù)谒拇伟聪略O(shè)置鍵 進(jìn)入用戶給定加熱時(shí)間設(shè)置</p><p><b> {</b></p><
62、p> tab9[1]=TL%10;tab9[2]=TL/10;tab9[4]=TH%10;tab9[5]=TH/10; </p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> P1=tab[tab9[i]]; if((i==3)||(i==0)) P1=0x02; if(
63、(i==7)||(i==6)) P1=0x02;</p><p> P0=tab7[i];</p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p><
64、;b> }</b></p><p><b> }</b></p><p> void timer1() interrupt 3</p><p><b> {</b></p><p> TH0=(65536-5000)/256;//5Ms</p><p&
65、gt; TL0=(65536-5000)%256; </p><p> //開(kāi)辟一個(gè)每隔5Ms掃描按鍵 檢測(cè)是否郵件按下</p><p> if(add==0) { delay(10); if(add==0){ while(!add) ; if(flag==4)TL++;if(flag==1) {fen++; i
66、f(fen==60) fen=0;}if (flag==2)tab8[2]++;if(flag==3)tab8[3]++;} }</p><p><b> //你懂得不用多講</b></p><p> if(cut==0) { delay(10); if(cut==0){ while(!cut) ; if(flag==4)TH++;if(flag==1)
67、{shi++; if(shi==24) shi=0;}if (flag==2)tab8[2]--; if(flag==3)tab8[3]--;} }</p><p><b> //你懂得不用多講</b></p><p> if(set==0) { delay(10); if(set==0){ while(!set) ;flag++;if(flag==
68、5)flag=0; } } </p><p> if(flag==1) { TR0=0; } if(flag==3) { TR0=1; }//當(dāng)?shù)谝淮伟聪略O(shè)置鍵關(guān)閉定時(shí)器0,</p><p> if(tab8[8]<=tab8[3]) Lled=0; else Lled =1; //判斷當(dāng)前溫度是否低于預(yù)設(shè)溫度 若是開(kāi)
69、啟LED提示</p><p> if(tab8[8]>=tab8[2])Hled=0; else Hled =1; ////你懂得不用多講</p><p> if(TL>=60) TL=0; if(TH>=24) TH=0;</p><p> if((fen>=TL)&&(shi>=TH)) LHled=
70、0; else LHled=1; //判斷用戶預(yù)設(shè)加熱時(shí)間是否達(dá)到 若是 開(kāi)啟LED</p><p><b> }</b></p><p> void timer0() interrupt 1</p><p><b> { </b></p><p> TH1=(65536-
71、50000)/256;</p><p> TL1=(65536-50000)%256;//你懂得不用多講 </p><p> tt++; LED++;</p><p> if(tt>=18) {tt=0;miao++; }</p><p> if(miao==6
72、0) {fen++; miao=0;}</p><p> if(fen==60){shi++; fen=0;} </p><p> if(shi==24) shi=0; </p><p><b> }</b></p><p> 2:ds18B20.h庫(kù)文件 </p><p>
73、#include"ds18b.h"</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> #define uchar unsigned char </p><p> #define uint unsigned in
74、t </p><p> sbit DQ=P3^7; //// 定義p37用來(lái)操控DS18B20</p><p> void delay_us(uint a) //微妙機(jī)延時(shí)子函數(shù)</p><p><b> {</b></p><p><b> do</b></p><
75、;p><b> {</b></p><p> _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); </p><p> }while(--a);</p><p><b> }</b></p><p&
76、gt; void delay_ms(uint a) //毫秒級(jí)延時(shí)子函數(shù)</p><p><b> {</b></p><p> uchar x,y;</p><p> for(x=a;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p&g
77、t;<b> }</b></p><p> uchar ds18b20_reset()//復(fù)位DS18B20</p><p><b> {</b></p><p><b> uchar a;</b></p><p><b> DQ=0;</b>&
78、lt;/p><p> delay_us(60);</p><p><b> DQ=1;</b></p><p> delay_us(9);</p><p><b> if(DQ)</b></p><p><b> a=1;</b></p>
79、;<p> delay_ms(2);</p><p><b> return a;</b></p><p><b> }</b></p><p> void ds18b20_write(uchar a) //寫(xiě)</p><p><b> {</b>&l
80、t;/p><p><b> uchar i;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> DQ=0;</b></p><p> if(a&0x01)<
81、;/p><p><b> DQ=1;</b></p><p><b> else</b></p><p><b> DQ=0;</b></p><p> delay_us(5);</p><p> DQ=1;//至高下一位數(shù)據(jù)準(zhǔn)備</p>
82、;<p><b> a>>=1;</b></p><p><b> }</b></p><p><b> }</b></p><p> uchar ds18b20_read() //讀</p><p><b> {</b>
83、;</p><p> uchar j,b;</p><p> for(j=0;j<8;j++)</p><p><b> {</b></p><p><b> DQ=0;</b></p><p><b> b>>=1;</b>
84、</p><p><b> DQ=1;</b></p><p><b> if(DQ)</b></p><p><b> b=b|0x80;</b></p><p> delay_us(2);</p><p> DQ=1;//至高為下一位數(shù)據(jù)
85、 準(zhǔn)備</p><p><b> }</b></p><p><b> return b;</b></p><p><b> }</b></p><p> unsigned int dispaly() ///啟動(dòng)溫度轉(zhuǎn)化 并返回溫度轉(zhuǎn)換至</p>
86、<p><b> {</b></p><p><b> uint H,L;</b></p><p> ds18b20_reset();</p><p> ds18b20_write(0xcc);</p><p> ds18b20_write(0x44);</p>&
87、lt;p> delay_ms(20);</p><p> ds18b20_reset();</p><p> ds18b20_write(0xcc);</p><p> ds18b20_write(0xbe);</p><p> L= ds18b20_read();</p><p> H= ds18b
88、20_read();</p><p> H=H*256+L;</p><p> H=H*0.625;</p><p> return H;</p><p><b> }</b></p><p> 3:18B20頭文件</p><p> #ifndef __D
89、S18B20_H__</p><p> #define __DS18B20_H__</p><p> #define uchar unsigned char </p><p> #define uint unsigned int </p><p> uint output(void);</p><p>
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 51單片機(jī)課程設(shè)計(jì)
- 基于51單片機(jī)課程設(shè)計(jì)報(bào)告
- 基于51單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的紅外線設(shè)計(jì)
- 基于51單片機(jī)的課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的定時(shí)鬧鐘設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)題目
- 51單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)溫度傳感器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于51單片機(jī)的電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)—基于51單片機(jī)的溫度監(jiān)控系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的交通燈
- 單片機(jī)課程設(shè)計(jì)-- 基于51單片機(jī)的電子時(shí)鐘系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的簡(jiǎn)易電子琴
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)開(kāi)發(fā)系統(tǒng)的pcb電路板
- 單片機(jī)課程設(shè)計(jì)---基于51單片機(jī)的電子顯示屏設(shè)計(jì)
- 51單片機(jī)多機(jī)通信課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于51單片機(jī)的溫度控制系統(tǒng)設(shè)計(jì)
- c51單片機(jī)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論