![簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第1頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/0caf737e-b768-41ea-8c3e-e2d8aa7f0a16/0caf737e-b768-41ea-8c3e-e2d8aa7f0a161.gif)
![簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第2頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/0caf737e-b768-41ea-8c3e-e2d8aa7f0a16/0caf737e-b768-41ea-8c3e-e2d8aa7f0a162.gif)
![簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第3頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/0caf737e-b768-41ea-8c3e-e2d8aa7f0a16/0caf737e-b768-41ea-8c3e-e2d8aa7f0a163.gif)
![簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第4頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/0caf737e-b768-41ea-8c3e-e2d8aa7f0a16/0caf737e-b768-41ea-8c3e-e2d8aa7f0a164.gif)
![簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì)_第5頁(yè)](http://file2.renrendoc.com/fileroot_temp3/2021-7/7/0caf737e-b768-41ea-8c3e-e2d8aa7f0a16/0caf737e-b768-41ea-8c3e-e2d8aa7f0a165.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、漳州師范學(xué)院漳州師范學(xué)院 簡(jiǎn)易萬(wàn)年歷的設(shè)計(jì) 姓 名: 學(xué) 號(hào): 系 別: 物理與電子信息工程系 專 業(yè): 電子信息科學(xué)與技術(shù) 年 級(jí): 10 級(jí) 指導(dǎo)教師: 白炳良 2013 年 6 月 目錄目錄1. 設(shè)計(jì)任務(wù).51.1 設(shè)計(jì)任務(wù).51.2 設(shè)計(jì)要求.62.設(shè)計(jì)方案.62.1 設(shè)計(jì)思路 .62.2 方案比較與論證 .62.2.1 數(shù)碼管顯示模塊.62.2.2 溫度傳感器的選擇.62.2.3 時(shí)鐘計(jì)時(shí)的選擇.72.3 系統(tǒng)結(jié)構(gòu)框圖 .73.各功能模塊設(shè)計(jì).83.1 顯示模塊原理 .83.2 參數(shù)計(jì)算.93.3 獨(dú)立式按鍵模塊.93.4 時(shí)鐘模塊.103.4.1 ds1302特性介紹.103.4.
2、2 ds1302引腳介紹.103.4.3 ds1302有關(guān)日歷、時(shí)間的寄存器.103.4.4 ds1302控制字介紹.113.4.5 ds1302單字節(jié)讀寫(xiě)時(shí)序介紹.113.4.6 ds1302操作指令介紹.123.4.7 ds1302與單片機(jī)接口電路.133.5 溫測(cè)模塊.133.5.1 單總線介紹.133.5.2 ds18b20特性介紹.133.5.3 ds18b20管腳介紹.143.5.4 ds18b20內(nèi)部結(jié)構(gòu).143.5.5 ds18b20溫度轉(zhuǎn)化示例.143.5.6 ds18b20時(shí)序介紹.153.5.7 ds18b20操作步驟.163.5.8 ds18b20與單片機(jī)的接口電路.1
3、73.6 總系統(tǒng)原理圖.174.軟件設(shè)計(jì).184.1 i/o 口分配.184.2 按鍵掃描.185.流程圖.195.1 主程序流程圖 .195.2 work0 模塊流程圖.195.3 work1 模塊流程圖.205.4 work2 模塊流程圖.205.5 獲取溫度子程序流程圖.215.6 按鍵掃描.225.7 中斷服務(wù)子程序.225.8 顯示方式 1.225.9 初始化 ds1302 子程序流圖.235.10 溫顯模塊子程序流圖.245.11 讀取時(shí)間模塊子程序流圖.246.程序代碼.256.1 主程序部分.256.2 包含文件部分.336.3 包含文件部分.357.調(diào)試要點(diǎn).437.1 硬件
4、調(diào)試.437.2 軟件調(diào)試.437.3 結(jié)果分析及設(shè)計(jì)工作總結(jié).438.參考文獻(xiàn)及附件.438.1 參考文獻(xiàn).438.2 元器件清單.448.3 pcb 版圖.448.4 實(shí)物圖 正面.458.5 實(shí)物圖 背面.45摘要摘要:?jiǎn)纹瑱C(jī)就是微控制器,是面向應(yīng)用對(duì)象設(shè)計(jì)、突出控制功能的芯片。單片機(jī)接上晶振、復(fù)位電路和相應(yīng)的接口電路,裝載軟件后就可以構(gòu)成單片機(jī)應(yīng)用系統(tǒng)。將它嵌入到形形色色的應(yīng)用系統(tǒng)中,就構(gòu)成了眾多產(chǎn)品、設(shè)備的智能化核心。本設(shè)計(jì)就是應(yīng)用單片機(jī)強(qiáng)大的控制功能制作而成的電子萬(wàn)年歷,該電子萬(wàn)年歷包括兩大功能:可顯示年、月、日、時(shí)、分;實(shí)時(shí)監(jiān)測(cè)環(huán)境溫度(具有超低溫的報(bào)警功能,且報(bào)警的上下限值可由
5、用戶自定義設(shè)置),。關(guān)鍵字關(guān)鍵字:?jiǎn)纹瑱C(jī),ds18b20,ds1302,共陽(yáng)數(shù)碼管. 1. 設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù)1.1 設(shè)計(jì)任務(wù)設(shè)計(jì)任務(wù) 利用單片機(jī)、時(shí)鐘芯片 ds1302、溫度傳感器 ds18b20、數(shù)碼管等 實(shí)現(xiàn)日期、時(shí)間、溫度的顯示,即一個(gè)簡(jiǎn)單的萬(wàn)年歷。1.2 設(shè)計(jì)要求設(shè)計(jì)要求1. 通過(guò) ds1302 計(jì)時(shí),時(shí)間可調(diào)并在數(shù)碼管上顯示出來(lái)。2. 通過(guò) ds18b20 檢測(cè)當(dāng)前環(huán)境溫度,精讀為 0.5。3. 具有超溫報(bào)警功能2.設(shè)計(jì)方案2.1 設(shè)計(jì)思路設(shè)計(jì)思路本設(shè)計(jì)由 ds18b20 作為溫度檢測(cè)的核心,檢測(cè)一次當(dāng)前溫度所耗費(fèi)的時(shí)間大約在 100ms750ms 之間,隨著檢測(cè)精度的增加,耗費(fèi)時(shí)間
6、在方位內(nèi)逐漸增加,所以利用軟件延時(shí)的方法來(lái)實(shí)現(xiàn)溫檢,并且具有超溫和低溫的報(bào)警功能,其溫度報(bào)警的上下限值可根據(jù)用戶喜好進(jìn)行更改;時(shí)鐘部分使用專用計(jì)時(shí)芯片 ds1302,可精確顯示年、月、日、時(shí)、分、秒;2.2 方案比較與論證方案比較與論證2.2.1 數(shù)碼管顯示模塊數(shù)碼管顯示模塊方案一:?jiǎn)纹瑱C(jī)輸出數(shù)據(jù)經(jīng)譯碼芯片 cd4511 進(jìn)行譯碼后直接驅(qū)動(dòng)數(shù)碼管,數(shù)碼管公共端接 9012 三極管擴(kuò)流,并通過(guò)單片機(jī) i/o 口控制三極管的選通,實(shí)現(xiàn)動(dòng)態(tài)顯示。方案二:有單片機(jī)的 i/o 口直接驅(qū)動(dòng)數(shù)碼管的段碼,數(shù)碼管的公共端接 9012 三極管,通過(guò)灌電流的方式點(diǎn)亮數(shù)碼管,也需通過(guò)單片機(jī) i/o 口控制三極管的選
7、通,實(shí)現(xiàn)動(dòng)態(tài)顯示。由于所需 i/o 口由 at98s52 可直接提供,無(wú)須因?yàn)?i/o 口不夠而用 cd4511 來(lái)節(jié)省i/o 口,方案二又較方案一更容易實(shí)惠,所以,我選擇方案二。2.2.2 溫度傳感器的選擇溫度傳感器的選擇 方案一:采用熱敏電阻作為檢測(cè)溫度的核心元件,由于熱敏電阻會(huì)隨溫度變化而變化,進(jìn)而其阻值發(fā)生變化,再經(jīng) 555 振蕩器變化的脈沖數(shù)傳遞給單片機(jī)進(jìn)行處理。 方案二:采用數(shù)字式的集成溫度傳感器 ds18b20 作為溫度檢測(cè)的核心元件,由其檢測(cè)并直接輸出數(shù)字溫度信號(hào)給單片機(jī)進(jìn)行處理。 對(duì)于方案一,采用熱敏電阻作為溫度檢測(cè)元件,有價(jià)格便宜,元件易購(gòu)的優(yōu)點(diǎn),但熱敏電阻對(duì)溫度的細(xì)微變化
8、不太敏感,并且由于熱敏電阻的 r-t 關(guān)系的非線性,其自身電阻對(duì)溫度的變化存在較大誤差,而且在人體所處環(huán)境溫度變化過(guò)程中難以檢測(cè)到小的溫度變化。但作為本次設(shè)計(jì)雖已能滿足基本要求,但為了更深入的學(xué)習(xí),所以放棄該方案。 對(duì)于方案二,由于數(shù)字式集成溫度傳感器 ds18b20 的高度集成化,大大降低了外接放大轉(zhuǎn)化等電路的誤差因數(shù),溫度誤差變得很小,并且由于其檢測(cè)溫度的原理與熱敏電阻檢測(cè)的原理有著本質(zhì)的不同,使得其溫度分辨力極高。溫度值在器件內(nèi)部轉(zhuǎn)化成數(shù)字量直接輸出,簡(jiǎn)化了系統(tǒng)程序設(shè)計(jì),又由于該溫度傳感器采用先進(jìn)的單總線技術(shù),與單片機(jī)的接口變得非常簡(jiǎn)潔,抗干擾能力強(qiáng),雖然芯片原理復(fù)雜,但是可以對(duì)時(shí)序的理
9、解更深入一步,所以選擇此方案。2.2.3 時(shí)鐘計(jì)時(shí)的選擇時(shí)鐘計(jì)時(shí)的選擇 方案一:at89s52 單片機(jī)內(nèi)部帶有定時(shí)/計(jì)數(shù)功能,此定時(shí)功能是通過(guò)對(duì)外部晶振的脈沖進(jìn)行計(jì)數(shù),從而達(dá)到計(jì)時(shí)功能,只要使用 11.0592的晶振就能實(shí)現(xiàn)零誤差的計(jì)時(shí),因此可以利用此功能實(shí)現(xiàn)計(jì)時(shí),但因?yàn)橹挥袉我坏挠?jì)時(shí)功能要實(shí)現(xiàn)“萬(wàn)年歷”的功能需要較復(fù)雜的程序,而且如果單片機(jī)掉電無(wú)法繼續(xù)進(jìn)行計(jì)時(shí),所以使用不便。方案二:ds1302 是美國(guó) dallas 公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進(jìn)行通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 ram 數(shù)據(jù)
10、。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與 31 天時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá) 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功能就可實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)的功能,而且消耗的系統(tǒng)資源少,程序簡(jiǎn)單。綜合上述兩種方案,宜采用方案二實(shí)現(xiàn)實(shí)時(shí)計(jì)時(shí)功能。2.3 系統(tǒng)結(jié)構(gòu)框圖系統(tǒng)結(jié)構(gòu)框圖 at89s52 單片機(jī)在模式鍵、設(shè)置鍵的控制下,由 p0 口輸出數(shù)據(jù),通 過(guò) p2.0 、p2.1、p2.2、p2.3 進(jìn)行選通,用數(shù)碼管顯示信息。 系統(tǒng)框圖: 圖 2-3 系統(tǒng)總框圖3.各功能模塊設(shè)計(jì)各
11、功能模塊設(shè)計(jì) 3.1 顯示模塊顯示模塊原理原理 由單片機(jī)(at89s52)的引腳 p0 口輸出溫度、時(shí)間等數(shù)據(jù)信息,通過(guò)片選信號(hào) p2.0 、p2.1、p2.2、p2.3 就可在相應(yīng)的數(shù)碼管進(jìn)行顯示。當(dāng)位選信號(hào) p2.0 為低電平時(shí),p1 口送出數(shù)據(jù)也為低電平就點(diǎn)亮數(shù)碼管,電流灌進(jìn)單片機(jī)。多位 led 顯示,為了簡(jiǎn)化電路,降低成本,將所有位的段選線并聯(lián)在一起,由一個(gè) 8 位 i/o 口控制。而共陽(yáng)極公共端分別接一個(gè)9012,由相應(yīng)的 i/o 口線控制 9012,實(shí)現(xiàn)各位數(shù)碼管的分時(shí)選通。段選碼,位選碼每送入一次后延時(shí) 5ms,因人的視覺(jué)暫留時(shí)間為0.1s(100ms) ,所以每位顯示的時(shí)間不能
12、超過(guò) 20ms,并保持延時(shí)一段時(shí)間,以造成視覺(jué)暫留效果,給人看上去每個(gè)數(shù)碼管總在亮。電路如(圖 3-1)所示。 由于采用的是共陽(yáng)極數(shù)碼管,所以要讓段碼點(diǎn)亮需把 i/o 口置 0,例如:段碼 a 到 h 對(duì)應(yīng)的 i/o 口是 p0.0 到 p0.7,則要讓數(shù)碼管顯示 0 到9 對(duì)應(yīng)的 16 進(jìn)值如圖 3-2 所示at89s52鍵盤18b20ds1302晶振數(shù)碼管蜂鳴器led電源q 090 12q 190 12q 290 12q 390 12abr 047 0r 147 0r 247 0r 347 0r 447 0r 547 0r 647 0r 747 0v ccv ccv ccv ccr 84k
13、 7r 94k 7r 104k 7r 114k 7p 00p 01p 02p 03p 04p 05p 06p 07cdefghabcdefghabcdefghabcdefghc s0c s1c s2c s3位位位位位位abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u1sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u2sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u3sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8
14、sh u4sm 4 11 00 6abcdefgh圖 3-1 顯示電路圖 3-2 碼表3.2 參數(shù)計(jì)算參數(shù)計(jì)算 由于 i/o 口高電平約等于 5v,使用灌電流的方式驅(qū)動(dòng)數(shù)碼管,故選用 pnp 型三極管 9012;數(shù)碼管能正常工作的段電流為 3ma-10 ma,壓降為 1.7v,三極管發(fā)射極和集電極的壓降為0.3v,因此限流電阻的壓 降為 3.0v, 所以選用限流電阻的阻值 r=470 歐.3.3 獨(dú)立式按鍵模塊獨(dú)立式按鍵模塊 獨(dú)立式按鍵是直接用 i/o 口線構(gòu)成的單個(gè)按鍵電路,其特點(diǎn)是每個(gè)hgfedcba16 進(jìn)制0110000000xc0h1111110010xf9h2101001000xa
15、4h3101100000xb0h4100110010x99h5100100100x92h6100000100x82h7111110000xf8h8100000000x80h9100100000x90hc110001100xc6h-101111110xbfhl110001110xc7hh100010010x89h500105mavr按鍵單獨(dú)占用一根 i/o 口線,每個(gè)按鍵的工作不會(huì)影響其它 i/o 口線的狀態(tài)。獨(dú)立式按鍵的典型應(yīng)用如(圖 3-3)所示。 獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡(jiǎn)單,但每個(gè)按鍵必須占用一根 i/o 口線,因此,在按鍵較多時(shí),i/o 口線浪費(fèi)較大,但本設(shè)計(jì)只用到四個(gè)按鍵,顧
16、采用獨(dú)立式按鍵電路。k 0k 1k 2k 3p 24p 25p 26p 27位位位位圖 3-3 獨(dú)立式按鍵電路3.4 時(shí)鐘模塊時(shí)鐘模塊ds1302 通過(guò)三根口線實(shí)現(xiàn)與單片機(jī)的通信,因 ds1302 功耗很小,即使電源掉電后通過(guò) 3v 的紐扣電池仍能維持 ds1302 精確走時(shí)。3.4.1 ds1302 特性介紹特性介紹 ds1302 是美國(guó) dallas 公司推出的一種高性能、低功耗的實(shí)時(shí)時(shí)鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進(jìn)行通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)和 ram 數(shù)據(jù)。實(shí)時(shí)時(shí)鐘可提供秒、分、時(shí)、日、星期、月和年,一個(gè)月小與 31 天
17、時(shí)可以自動(dòng)調(diào)整,且具有閏年補(bǔ)償功能。工作電壓寬達(dá) 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力。3.4.2 ds1302 引腳介紹引腳介紹 各引腳的功能為: 1、vcc2:5v 電源。當(dāng) vcc2vcc1+0.2v 時(shí),由 vcc2 向 ds1302 供電, 當(dāng) vcc2 vcc1 時(shí),由 vcc1 向 ds1302 供電。 2 和和 3、x1、x2 是外接晶振腳 (32.768khz 的晶振) 4、地(gnd) 5、ce/rst:復(fù)位腳 6、i/o:數(shù)據(jù)輸入輸出口; 7、sclk:串行時(shí)鐘,輸入; 8、vcc1:備用電池
18、端;3.4.3 ds1302 有關(guān)日歷、時(shí)間的寄存器有關(guān)日歷、時(shí)間的寄存器 寄存器的說(shuō)明如下:1、秒寄存器(81h、80h)的位 7 定義為時(shí)鐘暫停標(biāo)志(ch) 。當(dāng)初始上電時(shí)該位置為 1,時(shí)鐘振蕩器停止,ds1302 處于低功耗狀態(tài);只有將秒寄存器的該位置改寫(xiě)為 0 時(shí),時(shí)鐘才能開(kāi)始運(yùn)行。2、小時(shí)寄存器(85h、84h)的位 7 用于定義 ds1302 是運(yùn)行于 12 小時(shí)模式還是 24 小時(shí)模式。當(dāng)為高時(shí),選擇 12 小時(shí)模式。在 12 小時(shí)模式時(shí),位 5 是 ,當(dāng)為 1 時(shí),表示 pm。在 24 小時(shí)模式時(shí),位 5 是第二個(gè) 10小時(shí)位3、控制寄存器(8fh、8eh)的位 7 是寫(xiě)保護(hù)位
19、(wp) ,其它 7 位均置為0。在對(duì)任何的時(shí)鐘和 ram 的寫(xiě)操作之前,wp 位必須為 0。當(dāng) wp位為 1 時(shí),寫(xiě)保護(hù)位防止對(duì)任一寄存器的寫(xiě)操作。也就是說(shuō)在電路上電的初始態(tài) wp 是 1,這時(shí)是不能改寫(xiě)上面任何一個(gè)時(shí)間寄存器的,只有首先將 wp 改寫(xiě)為 0,才能進(jìn)行其它寄存器的寫(xiě)操作。 3.4.4 ds1302 控制字介紹控制字介紹位位 7:必須是邏輯 1,如果它為 0,則不能把數(shù)據(jù)寫(xiě)入到 ds1302 中。位位 6:如果為 0,則表示存取日歷時(shí)鐘數(shù)據(jù),為 1 表示存取 ram 數(shù)據(jù);位位 5 至位至位 1(a4a0):):指示操作單元的地址;位位 0(最低有效位):(最低有效位):為 0
20、,表示要進(jìn)行寫(xiě)操作,為 1 表示進(jìn)行讀操作。讀數(shù)據(jù):讀數(shù)據(jù): 讀數(shù)據(jù)時(shí)在緊跟 8 位的控制字指令后的下一個(gè) sclk 脈沖的下降沿,讀出 ds1302 的數(shù)據(jù),讀出的數(shù)據(jù)是從最低位到最高位。寫(xiě)數(shù)據(jù):寫(xiě)數(shù)據(jù): 控制字總是從最低位開(kāi)始輸出。在控制字指令輸入后的下一個(gè)sclk 時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫(xiě)入 ds1302,數(shù)據(jù)輸入也是從最低位(0 位)開(kāi)始。位 0(最低有效位):為 1 表示進(jìn)行讀操作。 如為0,表示要進(jìn)行寫(xiě)操作,控制字后 sclk 下降沿 讀數(shù)據(jù) sclk 上升沿寫(xiě)數(shù)據(jù)。3.4.5 ds1302 單字節(jié)讀寫(xiě)時(shí)序介紹單字節(jié)讀寫(xiě)時(shí)序介紹 ds1302 的數(shù)據(jù)讀寫(xiě)是通過(guò) i/o 串行進(jìn)行的。
21、當(dāng)進(jìn)行一次讀寫(xiě)操作時(shí)最少得讀寫(xiě)兩個(gè)字節(jié),第一個(gè)字節(jié)是控制字節(jié),就是一個(gè)命令,告訴ds1302 是讀還是寫(xiě)操作,是對(duì) ram 還是對(duì) clok 寄存器操作,以及操作的址。第二個(gè)字節(jié)就是要讀或?qū)懙臄?shù)據(jù)了。 單字節(jié)寫(xiě):在進(jìn)行操作之前先得將 ce(也可說(shuō)是 rst)置高電平,然后單片機(jī)將控制字的位 0 放到 i/o 上,當(dāng) i/o 的數(shù)據(jù)穩(wěn)定后,將 sclk置高電平,ds1302 檢測(cè)到 sclk 的上升沿后就將 i/o 上的數(shù)據(jù)讀取,然后單片機(jī)將 sclk 置為低電平,再將控制字的位 1 放到 i/o 上,如此反復(fù),將一個(gè)字節(jié)控制字的 8 個(gè)位傳給 ds1302。接下來(lái)就是傳一個(gè)字節(jié)的數(shù)據(jù)給 ds1
22、302,當(dāng)傳完數(shù)據(jù)后,單片機(jī)將 ce 置為低電平,操作結(jié)束。 單字節(jié)讀操作的一開(kāi)始寫(xiě)控制字的過(guò)程和上面的單字節(jié)寫(xiě)操作是一樣,但是單字節(jié)讀操作在寫(xiě)控制字的最后一個(gè)位,sclk 還在高電平時(shí),ds1302 就將數(shù)據(jù)放到 i/o 上,單片機(jī)將 sclk 置為低電平后數(shù)據(jù)鎖存, 單機(jī)機(jī)就可以讀取 i/o 上的數(shù)據(jù)。如此反復(fù),將一個(gè)字節(jié)的數(shù)據(jù)讀入單片機(jī)。 讀與寫(xiě)操作的不同就在于,寫(xiě)操作是在 sclk 低電平時(shí)單片機(jī)將數(shù)據(jù)放到 io 上,當(dāng) sclk 上升沿時(shí),ds1302 讀取。而讀操作是在 sclk高電平時(shí) ds1302 放數(shù)據(jù)到 io 上,將 sclk 置為低電平后,單片機(jī)就可從 io 上讀取數(shù)據(jù)。
23、3.4.6 ds1302 操作指令介紹操作指令介紹操作說(shuō)明:操作說(shuō)明:1 首先要通過(guò) 8eh 將寫(xiě)保護(hù)去掉,將日期,時(shí)間的初值寫(xiě)時(shí)各個(gè)寄器。 2 然后就可以對(duì) 80h、82h、84h、86h、88h、8ah、8ch 進(jìn)行初值的寫(xiě)入。同時(shí)也通過(guò)秒寄存器將位 7 的 ch 值改成 0,這樣 ds1302就開(kāi)始走時(shí)了。3 將寫(xiě)保護(hù)寄存器再寫(xiě)為 80h,防止誤改寫(xiě)寄存器的值。 4 不斷讀取 80h8ch 的值,將它們格式化后顯示到數(shù)碼管上3.4.7 ds1302 與單片機(jī)接口電路與單片機(jī)接口電路v cc21x 12x 23g nd4r st5i/o6sc l k7v cc8u 1d s1 30 2v
24、ccv ccx t232 76 8h zr 145kr 155kp 32p 33p 34+1-2jp13v位位位位 3.5 溫測(cè)模塊溫測(cè)模塊 ds18b20 通過(guò)單總線實(shí)現(xiàn)與單片機(jī)的通信,每個(gè) ds18b20 都有一個(gè)唯一的序列號(hào),可以方便的實(shí)現(xiàn)組網(wǎng)檢測(cè)。3.5.1 單總線介紹單總線介紹 1.單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。 2.單總線通常要求外接一個(gè)約為 4.7k10k 的上拉電阻,這樣,當(dāng)總線 閑置時(shí)其狀態(tài)為高電平。3.5.2 ds18b20 特性介紹特性介紹 ds18b20 單線數(shù)字溫度傳感器,即“一線器件” ,其具有獨(dú)特的優(yōu)點(diǎn): 1. 采用單總線的接口方式
25、 與微處理器連接時(shí) 僅需要一條口線即可實(shí)現(xiàn) 微處理器與 ds18b20 的雙向通訊。 單總線具有經(jīng)濟(jì)性好,抗干擾能 力強(qiáng),適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,使用方便等優(yōu)點(diǎn),使用戶可輕 松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念。 2. 測(cè)量溫度范圍寬,測(cè)量精度高 ds18b20 的測(cè)量范圍為 -55 + 125 ; 在 -10+ 85c 范圍內(nèi),精度為 0.5c 。 3. 在使用中不需要任何外圍元件。 4. 支持多點(diǎn)組網(wǎng)功能 多個(gè) ds18b20 可以并聯(lián)在惟一的單線上,實(shí)現(xiàn)多 點(diǎn)測(cè)溫。 5. 供電方式靈活 ds18b20 可以通過(guò)內(nèi)部寄生電路從數(shù)據(jù)線上獲取電 源。因此,當(dāng)數(shù)據(jù)線上的時(shí)序滿足
26、一定的要求時(shí),可以不接外部電源, 從而使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單,可靠性更高。 6. 測(cè)量參數(shù)可配置 ds18b20 的測(cè)量分辨率可通過(guò)程序設(shè)定 912 位。 7. 負(fù)壓特性電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常作。 8. 掉電保護(hù)功能 ds18b20 內(nèi)部含有 eeprom ,在系統(tǒng)掉電以后,它 仍可保存分辨率及報(bào)警溫度的設(shè)定值。 9. ds18b20 具有體積更小、適用電壓更寬、更經(jīng)濟(jì)、可選更小的封裝方 式,更寬的電壓適用范圍,適合于構(gòu)建自己的經(jīng)濟(jì)的測(cè)溫系統(tǒng),因此也 就被設(shè)計(jì)者們所青睞。3.5.3 ds18b20 管腳介紹管腳介紹 ds18b20 的管腳排列1 . gnd 為電源 地;
27、2. dq 為數(shù)字信號(hào)輸入輸出端;3. vdd 為外接供電電源輸入端,在寄生 電源接線方式時(shí)接地; 3.5.4 ds18b20 內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu) ds18b20 內(nèi)部結(jié)構(gòu)主要由四部分組成: 64 位光刻 rom 、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器 th 和 tl 、配置寄存器。 光刻 rom 中的 64 位序列號(hào)是出廠前被光刻好的,它可以看作是該 ds18b20 的地址序列碼。 64 位光刻 rom 的排列是:開(kāi)始 8 位(地址: 28h )是產(chǎn)品類型標(biāo)號(hào),接著的 48 位是該 ds18b20 自身的序列號(hào),并且每個(gè) ds18b20 的序列號(hào)都不相同,因此它可以看作是該 ds18b20 的地
28、址序列碼;最后 8 位則是前面 56 位的循環(huán)冗余校驗(yàn)碼( crc=x8+x5+x4+1 ) 。由于每一個(gè) ds18b20 的 rom 數(shù)據(jù)都各不相同,因此微控制器就可以通過(guò)單總線對(duì)多個(gè) ds18b20 進(jìn)行尋址,從而實(shí)現(xiàn)一根總線上掛接多個(gè) ds18b20 的目的。ds18b20 中的溫度傳感器完成對(duì)溫度的測(cè)量,用 16 位二進(jìn)制形式提供,形式表達(dá),其中 s 為符號(hào)位。3.5.5 ds18b20 溫度轉(zhuǎn)化示例溫度轉(zhuǎn)化示例3.5.6 ds18b20 時(shí)序介紹時(shí)序介紹ds18b20 的一線工作協(xié)議流程是:初始化rom 操作指令存儲(chǔ)器操作指令數(shù)據(jù)傳輸。其工作時(shí)序包括:1. 初始化時(shí)序2. 寫(xiě)時(shí)序3.
29、 讀時(shí)序 初始化時(shí)序:初始化時(shí)序: 主機(jī)首先發(fā)出一個(gè) 480960 微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖剑⒃陔S后的 480 微秒時(shí)間內(nèi)對(duì)總線進(jìn)行檢測(cè),如果有低電平出現(xiàn)說(shuō)明總線上有器件已做出應(yīng)答。若無(wú)低電平出現(xiàn)一直都是高電平說(shuō)明總線上無(wú)器件應(yīng)答。做為從器件的 ds18b20 在一上電后就一直在檢測(cè)總線上是否有480960 微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待 1560微秒后將總線電平拉低 60240 微秒做出響應(yīng)存在脈沖,告訴主機(jī)本器件已做好準(zhǔn)備。若沒(méi)有檢測(cè)到就一直在檢測(cè)等待。 寫(xiě)操作:寫(xiě)操作: 寫(xiě)操作就是主機(jī)發(fā)出各種操作命令,但各種操作命令都是向ds18b20 寫(xiě) 0 和寫(xiě)
30、1 組成的命令字節(jié),接收數(shù)據(jù)時(shí)也是從 ds18b20 讀取 0 或 1 的過(guò)程。寫(xiě)周期最少為 60 微秒,最長(zhǎng)不超過(guò) 120 微秒。寫(xiě)周期一開(kāi)始做為主機(jī)先把總線拉低 1 微秒表示寫(xiě)周期開(kāi)始。隨后若主機(jī)想寫(xiě)0,則繼續(xù)拉低電平最少 60 微秒直至寫(xiě)周期結(jié)束,然后釋放總線為高電平。若主機(jī)想寫(xiě) 1,在一開(kāi)始拉低總線電平 1 微秒后就釋放總線為高電平,一直到寫(xiě)周期結(jié)束。而做為從機(jī)的 ds18b20 則在檢測(cè)到總線被拉底后等待 15 微秒然后從 15us 到 45us 開(kāi)始對(duì)總線采樣,在采樣期內(nèi)總線為高電平則為 1,若采樣期內(nèi)總線為低電平則為 0。 讀操作:讀操作: 對(duì)于讀數(shù)據(jù)操作時(shí)序也分為讀 0 時(shí)序和
31、讀 1 時(shí)序兩個(gè)過(guò)程。讀時(shí)序是從主機(jī)把單總線拉低之后,在 1 微秒之后就得釋放單總線為高電平,以讓 ds18b20 把數(shù)據(jù)傳輸?shù)絾慰偩€上。ds18b20 在檢測(cè)到總線被拉低1 微秒后,便開(kāi)始送出數(shù)據(jù),若是要送出 0 就把總線拉為低電平直到讀周期結(jié)束。若要送出 1 則釋放總線為高電平。主機(jī)在一開(kāi)始拉低總線 1微秒后釋放總線,然后在包括前面的拉低總線電平 1 微秒在內(nèi)的 15 微秒時(shí)間內(nèi)完成對(duì)總線進(jìn)行采樣檢測(cè),采樣期內(nèi)總線為低電平則確認(rèn)為 0。采樣期內(nèi)總線為高電平則確認(rèn)為 1。完成一個(gè)讀時(shí)序過(guò)程,至少需要60us 才能完成。3.5.7 ds18b20 操作步驟操作步驟1. 每次讀寫(xiě)前對(duì) ds18b
32、20 進(jìn)行復(fù)位初始化。復(fù)位要求主 cpu 將數(shù)據(jù)線下拉 500us ,然后釋放, ds18b20 收到信號(hào)后等待 16us60us 左右,然后發(fā)出 60us240us 的存在低脈沖,主 cpu 收到此信號(hào)后表示復(fù)位成功。2. 發(fā)送一條 rom 指令3. 發(fā)送存儲(chǔ)器指令3.5.8 ds18b20 與單片機(jī)的接口電路與單片機(jī)的接口電路v dd3i/o2g nd1u 3d s18b 20r 204k 7v ccc 10.1u fp31位位位位位位3.6 總系統(tǒng)原理圖總系統(tǒng)原理圖 單片機(jī)(at89s52)9 腳為復(fù)位輸入端。上電復(fù)位,只要 rst 引腳上有大于二個(gè)機(jī)器周期以上的高電平,單片機(jī)(at89
33、c2051)即復(fù)位。按鍵從單片機(jī)(at89s52)的 p2.4、p2.5、p2.6、p2.7 口接入,當(dāng)按鍵被按下時(shí),相應(yīng)的輸入口就會(huì)輸入低電平 0。單片機(jī)(at89s52)的 xtal1 腳、xtal2 腳接一個(gè)由 12m 晶振和10pf 組成的振蕩電路。為單片機(jī)提供相應(yīng)的時(shí)序。x t112 mc 810 pfc 910 pfe 110 ufs1sw -pbr 1810 kr 1733 0v dd3i/o2g nd1u 3d s1 8b 20r 204k 7c 10.1u fr esr esv ccv ccv ccc s0c s3c s1c s2q 490 12v ccr 193.3kp30
34、v cc12+l s1r 165.1kd 1l edq 090 12q 190 12q 290 12q 390 12123456789 10is p1m o s ir essc km isov cc位位位位位位位位位位位位位位位位位位位p 24p 25p 26p 27p 10p 11p 12p 13p 14p 15p 16p 17k 0k 1k 2k 3p 24p 25p 26p 27位位位位v ccv ccp 10p 11p 12p 13p 14p 15p 16p 17r 132kr 1210 0v ccp 30p 31p 36p 37v cc21x 12x 23g nd4r st5i/o6
35、sc l k7v cc8u 1d s1 30 2v ccv ccx t232 76 8h zr 145kr 155kp 35p 36p 37p 32p 33p 34+1-2jp13v位位位位位位位位位位位位位位usb位位p 00p 01p 02p 03p 04p 05p 06p 071234jp2帽帽d 2l edd 3l edabr 047 0r 147 0r 247 0r 347 0r 447 0r 547 0r 647 0r 747 0v ccv ccv ccv ccr 84k 7r 94k 7r 104k 7r 114k 7p 00p 01p 02p 03p 04p 05p 06p 0
36、7cdefghabcdefghabcdefghabcdefghc s0c s1c s2c s3位位位位位位cpu位位位位位abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u1sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u2sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u3sm 4 11 00 6abfcgdedpa7b6c4d2e1f9g10dp5com3com8sh u4sm 4 11 00 6abcdefghm o s im isosc kv cc1g
37、nd2pow e rr 214.7kg nd1v cc2v o3r s4r w5e6d b07d b18d b29d b310d b411d b512d b613d b714b g v c c15b g g n d16lcd 1602l cdl cd 16 02p 32p 33p 34p 35e a/v pp31x 119x 218r es et9r d/p3 717w r/p3 616p32/in t012p33/in t113p34/t014p35/t115p101p112p123p134p145p156p167p178p0039p0138p0237p0336p0435p0534p0633
38、p0732p2021p2122p2223p2324p2425p2526p2627p2728pse n29a le /prd g30p31/tx d11p30/rx d10v cc40g nd20ic 6a t8 9c 524.軟件設(shè)計(jì)軟件設(shè)計(jì)主程序主要起到一個(gè)導(dǎo)向和決策功能,控制程序的走向。本系統(tǒng)在主程序中運(yùn)用模塊化結(jié)構(gòu),所有控制量集中處理,提高了處理效率,并在ram 建立各控制量的映射,方便各功能模塊的編程及修改。運(yùn)用散轉(zhuǎn)結(jié)構(gòu),可實(shí)現(xiàn)無(wú)擾動(dòng)重入。本設(shè)計(jì)主要有以下幾個(gè)模塊:溫顯模塊、時(shí)鐘顯示模塊、時(shí)鐘修改模塊。操作說(shuō)明:上電復(fù)位后進(jìn)入溫顯模塊,按 k1 鍵可進(jìn)入溫度報(bào)警值上下限的設(shè)置;按 k0
39、 可進(jìn)行模塊間的轉(zhuǎn)換,按一次 k0 進(jìn)入時(shí)鐘模塊,按k0 兩次進(jìn)入時(shí)鐘修改模塊。4.1 i/o 口分配口分配1、p2.0、p2.1、p2.2、p2.3 作為個(gè)位、十位、百位、千位數(shù)碼管片選。2、p2.4、p2.5、p2.6、p2.7 作為按鍵接口。3、p0.0 到 p0.7 作為段碼 a 到 g 的輸出口。4.2 按鍵掃描按鍵掃描本設(shè)計(jì)采用定時(shí)器中斷延時(shí)去抖的方法來(lái)進(jìn)行按鍵的有效掃描判斷5.流程圖流程圖5.1 主程序流程圖主程序流程圖5.2 work0 模塊流程圖模塊流程圖mode=0mode=1獲取溫度根據(jù)鍵狀態(tài)進(jìn)行功能散轉(zhuǎn)work0,溫顯和溫報(bào)模塊,同時(shí)置位延時(shí)方式標(biāo)志位work1,時(shí)間顯
40、示,同時(shí)清零延時(shí)方式標(biāo)志位work2,調(diào)時(shí)模塊,在調(diào)整完畢后進(jìn)入work1按鍵掃描顯示方式 1清定時(shí)標(biāo)志位 重裝定時(shí)初值按鍵掃描顯示方式 2初始化 ds1302讀取時(shí)間開(kāi)始初始化延時(shí)方式標(biāo)志位=1?nyn5ms 到?ymode=2入口根據(jù)鍵狀態(tài)值進(jìn)行功能散轉(zhuǎn)溫顯模式修改高溫報(bào)警值修改低溫報(bào)警值返回cnt1=0cnt1=1cnt1=25.3 work1 模塊流程圖模塊流程圖5.4 work2 模塊流程圖模塊流程圖msta=0msta=1月份顯示模塊msta=2時(shí)間顯示模塊星期顯示模塊入口年份顯示模塊返回根據(jù)鍵狀態(tài)值進(jìn)行功能散轉(zhuǎn)msta=3設(shè)置時(shí)間預(yù)處理,即將當(dāng)前時(shí)間值送給修改緩沖單元入口根據(jù)鍵狀
41、態(tài)值進(jìn)行功能散轉(zhuǎn)msta1=2msta1=3msta1=0msta1=1返回修改小時(shí),高兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改分鐘,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改月份,高兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改日,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改年份,高兩位顯示 20低兩位數(shù)碼管位閃,按 k2與 k3 鍵修改修改星期,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改完畢,將修改信息寫(xiě)入到 ds1302 芯片中msta1=4msta1=5msta1=6msta1=75.5 獲取溫度子程序流程圖獲取溫度子程序流程圖入口初始化 ds18b20跳過(guò) ro
42、m溫度轉(zhuǎn)換初始化 ds18b20跳過(guò) rom讀取溫度讀低 8 位讀高 8 位將取出的數(shù)據(jù)轉(zhuǎn)換成溫度值,分為整數(shù)部分和小數(shù)部分將整數(shù)部分送顯緩存將小數(shù)部分按 0.5 精度處理將溫度值轉(zhuǎn)換為bcdma3,yongyu 溫度報(bào)警時(shí)溫度比較實(shí)用返回5.6 按鍵掃描按鍵掃描5.7 中斷服務(wù)子程序中斷服務(wù)子程序5.8 顯示方式顯示方式 1入口讀鍵,保存鍵值有鍵?開(kāi)定時(shí)中斷延時(shí)去抖提取鍵前沿關(guān)定時(shí)中斷返回ny入口重裝中斷定時(shí)初值保存變化的鍵狀態(tài)返回顯示個(gè)位,dsw=1關(guān)數(shù)碼管i3?根據(jù)狀態(tài)字進(jìn)行散轉(zhuǎn)入口i=0返回顯示十位,dsw=2顯示百位,dsw=3顯示千位,dsw=0dsw=0dsw=1dsw=2dsw
43、=35.9 初始化初始化 ds1302 子程序流圖子程序流圖yn入口允許初始化標(biāo)志位=1?寫(xiě)保護(hù)關(guān)寫(xiě)入年份寫(xiě)入月份寫(xiě)入日寫(xiě)入小時(shí)寫(xiě)入分鐘寫(xiě)保護(hù)開(kāi)允許初始化標(biāo)志位清零返回ny5.105.10 溫顯模塊子程序流圖溫顯模塊子程序流圖5.11 讀取時(shí)間模塊子程序流圖讀取時(shí)間模塊子程序流圖入口將溫度值送顯緩溫度值比較,超過(guò)上下限值,則報(bào)警返回讀取分鐘,將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)入口變量定義返回讀取小時(shí),將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)讀取日,將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)讀取月份,將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)讀取星期,將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)讀取年份,將數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)6.程序代碼程序代碼6.1 主程序部分主程序部分#inclu
44、de /52 單片機(jī)頭文件#include /52 單片機(jī)頭文件#include#include /52 單片機(jī)頭文件#define sm_port p0 /輸出口定義#define uint unsigned int#define uchar unsigned charuchar code table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99, /0,1,2,3.數(shù)碼管 /斷碼表,16 關(guān),17h,18,19l0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1, 0 x86,0 x8e,0 xff,0 x89,0 xb
45、f,0 xc7; uchar lbj_buf0,lbj_buf1,hbj_buf0,hbj_buf1;uchar h2_weishan,l2_weishan;uchar r0,delay_mode;uchar msta,bj_l,bj_h,cnt1,cnt;void rdkey() p2=0 xff; /掃描第 0 行(row0),即 k0-k3 鍵 r0=p2; r0=r0; r0&=0 xf0; /將讀取到的 k0-k3 鍵值保存于 key0 的低四位 if(r0!=key0) /判斷是否有鍵按下 tr0=1; ekey0=key0; /時(shí)間未到,沿用原來(lái)保留的鍵值 else /未有鍵按下
46、 tr0=0; ekey0=0 x00; ekey0=r0&(key0r0); /提取鍵前沿 key0=r0; void disp () uchar i; for(i=0;i3;i+) p2=0 xff; switch(dsw) case 0:cs0=0; sm_port=tablebuf0; /顯示個(gè)位 dsw=1; break; case 1:cs1=0; sm_port=tablebuf1; /顯示十位 dsw=2; break; case 2:if(!fh_300) cs2=0; else cs2=1; sm_port=tablebuf2; /顯示百位 if(point_flag) p
47、oint=0; else point=1; dsw=3; break; case 3: if(!fh_300) cs3=0; else cs3=1; sm_port=tablebuf3; /顯示千位 dsw=0; break; default:break; void disp1 () sm_port=0 xff; p2=0 xff; switch(dsw) case 0: if(!fl_300) cs0=0; else cs0=1; sm_port=tablebuf0; /顯示個(gè)位 dsw=1; break; case 1: if(!fl_300) cs1=0; else cs1=1; sm_
48、port=tablebuf1; /顯示十位 dsw=2; break; case 2: if(!fh_300) cs2=0; else cs2=1; sm_port=tablebuf2; /顯示百位 if(point_flag) point=0; else point=1; dsw=3; break; case 3: if(!fh_300) cs3=0; else cs3=1; sm_port=tablebuf3; /顯示千位 dsw=0; break; default:break; void init() tmod=0 x11;/設(shè)置定時(shí)器的工作方式 th0=(65536-20000)/25
49、6;/為定時(shí)器 0 裝載初值,用中斷方式進(jìn)行 /按鍵的去抖 tl0=(65536-20000)%256; th1=(65536-5000)/256;/為定時(shí)器 1 裝載初值 tl1=(65536-5000)%256; ea=1; /開(kāi)總中斷 et0=1; /開(kāi)定時(shí)器 0 中斷 tr1=1; /開(kāi)定時(shí)器 0 lbj_buf1=2; /為低溫報(bào)警值賦初值 22 度,在主程 /序中可修改 lbj_buf0=2; hbj_buf1=3; /為高溫報(bào)警值賦初值 35 度,在主程 /序中可修改 hbj_buf0=5; fmq=1; /關(guān)閉蜂鳴器和 led delay_mode=1; /工作模式賦初值 1(
50、其中/mode=1 表示,程序使用軟件延時(shí),此時(shí)使用 ds18b20 進(jìn)行溫度測(cè)量, /作為溫度計(jì)使用;mode=0 時(shí),使用/定時(shí)器延時(shí),程序每隔 5ms 執(zhí)行一次,此時(shí)作為時(shí)鐘 tztime_flag1=0; second_buf=0 x00; minute_buf=0 x00; hour_buf=0 x12; day_buf=0 x16; week_buf=0 x01; month_buf=0 x06; year_buf=0 x13;void wenxian() delay_mode=1; bj_l=lbj_buf1; bj_l=4; bj_l&=0 xf0; bj_l+=lbj_buf
51、0&0 x0f; bj_h=hbj_buf1; bj_h=bj_h|temp16h=bj_l) cnt+; if(cnt=50) fmq=fmq;cnt=0; else fmq=1;void xg_lbj() /修改低溫報(bào)警值 delay_mode=1; point_flag=0; buf3=19; buf2=18; buf1=lbj_buf1; buf0=lbj_buf0; fl_300=0; h2_weishan+; if(h2_weishan=60) h2_weishan=0; fh_300=fh_300; if(ek2) if(lbj_buf0) -lbj_buf0; else if(
52、lbj_buf1) -lbj_buf1;lbj_buf0=9; if(ek3) if(lbj_buf0!=9) +lbj_buf0; else if(lbj_buf1!=9) +lbj_buf1;lbj_buf0=0; void xg_hbj() /修改高溫報(bào)警值 delay_mode=1; point_flag=0; buf3=17; buf2=18; buf1=hbj_buf1; buf0=hbj_buf0; fl_300=0; h2_weishan+; if(h2_weishan=60) h2_weishan=0; fh_300=fh_300; if(ek2) if(hbj_buf0)
53、-hbj_buf0; else if(hbj_buf1) -hbj_buf1;hbj_buf0=9; if(ek3) if(hbj_buf0!=9) +hbj_buf0; else if(hbj_buf1!=9) +hbj_buf1;hbj_buf0=0; void work0() if(ek1) cnt1+; if(cnt1=3)cnt1=0; switch(cnt1) case 0:fh_300=0; wenxian(); /溫度顯示子程序,具有超溫和低溫報(bào)警功能 break; case 1:xg_lbj(); /修改低溫報(bào)警值 break; case 2:xg_hbj(); /修改高溫報(bào)
54、警值 break; default:break; void work1() if(ek1) msta+; if(msta=4) msta=0; fh_300=0; fl_300=0; switch(msta) case 0: time_show(); break; case 1: month_show(); break; case 2: year_show(); break; case 3: week_show(); break; default:break; void work2() if(ek1) msta1+; if(msta1=8) msta1=0; f300+; switch(mst
55、a1) case 0: set_begin(); break; case 1: hour_set(); break; case 2: minute_set(); break; case 3: month_set(); break; case 4: day_set(); break; case 5: year_set(); break; case 6: week_set(); break; case 7: set_over(); break; default:break; void main() init(); /程序的初始化 while(1) if(delay_mode) get_temper
56、ature(); rdkey(); disp(); /獲得溫度 else while(!tf1); tf1=0; th1=(65536-5000)/256; tl1=(65536-5000)%256; rdkey(); disp1(); initial_ds1302(); ds1302_gettime(); if(ek0) mode+; if(mode=3) mode=0; switch(mode) case 0:work0();break; case 1:msta1=0; delay_mode=0;point_flag=0; work1(); break; case 2:work2(); d
57、elay_mode=0; break; default:break; void exter0() interrupt 1 / 定時(shí)器 0 中斷 th0=(65536-20000)/256; /送初值 tl0=(65536-20000)%256; key0=r0; /時(shí)間到,保存鍵值于 key0,和 key16.2 包含文件包含文件部分部分#ifndef _ds18b20_h_#define_ds18b20_h_#define uint unsigned int /宏定義#define uchar unsigned char /宏定義sbit ds18b20_dq=p31;uchar a1,a2
58、,a3;uchar temp_l,temp_h; /用于讀取 18b20 中溫度 /的高 8 位和低八位數(shù)值uchar tempint,tempdf,temp16h; /溫度整數(shù)部分和小數(shù)部分void delay_us(uchar i) /延時(shí)時(shí)間為 2*i 微秒; while(-i);void init_ds18b20() ds18b20_dq=1; /先將數(shù)據(jù)線置高電平 1 delay_us(1); /稍微延時(shí) ds18b20_dq=0; /先將數(shù)據(jù)線置低電平 0 delay_us(250); /延時(shí) 500us,該時(shí)間范圍可以在 480960us /之間 ds18b20_dq=1; /數(shù)
59、據(jù)線拉到高電平 1 delay_us(30); /延時(shí)等待,如果初始化成功則在 1560us /內(nèi)由 18b20 產(chǎn)生一個(gè)低電平 0 if(ds18b20_dq=0) /如果 18b20 存在 delay_us(240); /再延時(shí) 480us void write_ds18b20_data(uchar value) uchar i; for(i=0;i=1; /數(shù)據(jù)右移位 ds18b20_dq=1; uchar read_ds18b20_data()uchar i;uchar dat; for(i=0;i=1; /數(shù)據(jù)右移位 ds18b20_dq=0; delay_us(1); ds18b2
60、0_dq=1; /數(shù)據(jù)線置低電平 delay_us(4); /延時(shí) 7us if(ds18b20_dq) dat|=0 x80; /一位一位地讀取數(shù)據(jù),對(duì)18b20 /來(lái)說(shuō)要,寫(xiě)數(shù)據(jù)也是由低位到高位 delay_us(25); return dat;void get_temperature() /溫度轉(zhuǎn)換、獲得溫度子程序init_ds18b20(); /初始化 ds18b20write_ds18b20_data(0 xcc); /發(fā)跳過(guò) rom 匹配命令write_ds18b20_data(0 x44); /發(fā)溫度轉(zhuǎn)換命令init_ds18b20(); /初始化 ds18b20write_ds
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高強(qiáng)4號(hào)玻璃纖維合作協(xié)議書(shū)
- 2025年汽配壓鑄產(chǎn)品合作協(xié)議書(shū)
- 部編版四年級(jí)上冊(cè)語(yǔ)文第五單元《交流平臺(tái)初試身手》教案及教學(xué)反思
- 八年級(jí)下冊(cè)英語(yǔ)期中考試試卷分析卷面分析及反思
- 2025年中班幼兒教學(xué)總結(jié)范例(二篇)
- 2025年五年級(jí)語(yǔ)文教學(xué)工作總結(jié)例文(2篇)
- 2025年個(gè)人租房合同協(xié)議合同范文(2篇)
- 2025年五年級(jí)語(yǔ)文教學(xué)工作總結(jié)參考(2篇)
- 2025年個(gè)人投資理財(cái)委托合同(4篇)
- 2025年二年級(jí)下冊(cè)英語(yǔ)教學(xué)工作總結(jié)模版(2篇)
- 山東省食用油(植物油)生產(chǎn)企業(yè)名錄496家
- GB∕T 33047.1-2016 塑料 聚合物熱重法(TG) 第1部分:通則
- 電力業(yè)務(wù)許可證豁免證明
- 特發(fā)性肺纖維化IPF
- FIDIC國(guó)際合同條款中英文對(duì)照.doc
- 建筑工程資料歸檔立卷分類表(全)
- 個(gè)人勞動(dòng)仲裁申請(qǐng)書(shū)
- 國(guó)籍狀況聲明書(shū)
- 溢流堰穩(wěn)定計(jì)算
- 馬曉宏_《法語(yǔ)》_第一冊(cè)復(fù)習(xí)(課堂PPT)
- 道路環(huán)衛(wèi)清掃保潔項(xiàng)目應(yīng)急處置預(yù)案
評(píng)論
0/150
提交評(píng)論