版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、漳州師范學院漳州師范學院 簡易萬年歷的設計 姓 名: 學 號: 系 別: 物理與電子信息工程系 專 業(yè): 電子信息科學與技術 年 級: 10 級 指導教師: 白炳良 2013 年 6 月 目錄目錄1. 設計任務.51.1 設計任務.51.2 設計要求.62.設計方案.62.1 設計思路 .62.2 方案比較與論證 .62.2.1 數(shù)碼管顯示模塊.62.2.2 溫度傳感器的選擇.62.2.3 時鐘計時的選擇.72.3 系統(tǒng)結構框圖 .73.各功能模塊設計.83.1 顯示模塊原理 .83.2 參數(shù)計算.93.3 獨立式按鍵模塊.93.4 時鐘模塊.103.4.1 ds1302特性介紹.103.4.
2、2 ds1302引腳介紹.103.4.3 ds1302有關日歷、時間的寄存器.103.4.4 ds1302控制字介紹.113.4.5 ds1302單字節(jié)讀寫時序介紹.113.4.6 ds1302操作指令介紹.123.4.7 ds1302與單片機接口電路.133.5 溫測模塊.133.5.1 單總線介紹.133.5.2 ds18b20特性介紹.133.5.3 ds18b20管腳介紹.143.5.4 ds18b20內(nèi)部結構.143.5.5 ds18b20溫度轉(zhuǎn)化示例.143.5.6 ds18b20時序介紹.153.5.7 ds18b20操作步驟.163.5.8 ds18b20與單片機的接口電路.1
3、73.6 總系統(tǒng)原理圖.174.軟件設計.184.1 i/o 口分配.184.2 按鍵掃描.185.流程圖.195.1 主程序流程圖 .195.2 work0 模塊流程圖.195.3 work1 模塊流程圖.205.4 work2 模塊流程圖.205.5 獲取溫度子程序流程圖.215.6 按鍵掃描.225.7 中斷服務子程序.225.8 顯示方式 1.225.9 初始化 ds1302 子程序流圖.235.10 溫顯模塊子程序流圖.245.11 讀取時間模塊子程序流圖.246.程序代碼.256.1 主程序部分.256.2 包含文件部分.336.3 包含文件部分.357.調(diào)試要點.437.1 硬件
4、調(diào)試.437.2 軟件調(diào)試.437.3 結果分析及設計工作總結.438.參考文獻及附件.438.1 參考文獻.438.2 元器件清單.448.3 pcb 版圖.448.4 實物圖 正面.458.5 實物圖 背面.45摘要摘要:單片機就是微控制器,是面向應用對象設計、突出控制功能的芯片。單片機接上晶振、復位電路和相應的接口電路,裝載軟件后就可以構成單片機應用系統(tǒng)。將它嵌入到形形色色的應用系統(tǒng)中,就構成了眾多產(chǎn)品、設備的智能化核心。本設計就是應用單片機強大的控制功能制作而成的電子萬年歷,該電子萬年歷包括兩大功能:可顯示年、月、日、時、分;實時監(jiān)測環(huán)境溫度(具有超低溫的報警功能,且報警的上下限值可由
5、用戶自定義設置),。關鍵字關鍵字:單片機,ds18b20,ds1302,共陽數(shù)碼管. 1. 設計任務設計任務1.1 設計任務設計任務 利用單片機、時鐘芯片 ds1302、溫度傳感器 ds18b20、數(shù)碼管等 實現(xiàn)日期、時間、溫度的顯示,即一個簡單的萬年歷。1.2 設計要求設計要求1. 通過 ds1302 計時,時間可調(diào)并在數(shù)碼管上顯示出來。2. 通過 ds18b20 檢測當前環(huán)境溫度,精讀為 0.5。3. 具有超溫報警功能2.設計方案2.1 設計思路設計思路本設計由 ds18b20 作為溫度檢測的核心,檢測一次當前溫度所耗費的時間大約在 100ms750ms 之間,隨著檢測精度的增加,耗費時間
6、在方位內(nèi)逐漸增加,所以利用軟件延時的方法來實現(xiàn)溫檢,并且具有超溫和低溫的報警功能,其溫度報警的上下限值可根據(jù)用戶喜好進行更改;時鐘部分使用專用計時芯片 ds1302,可精確顯示年、月、日、時、分、秒;2.2 方案比較與論證方案比較與論證2.2.1 數(shù)碼管顯示模塊數(shù)碼管顯示模塊方案一:單片機輸出數(shù)據(jù)經(jīng)譯碼芯片 cd4511 進行譯碼后直接驅(qū)動數(shù)碼管,數(shù)碼管公共端接 9012 三極管擴流,并通過單片機 i/o 口控制三極管的選通,實現(xiàn)動態(tài)顯示。方案二:有單片機的 i/o 口直接驅(qū)動數(shù)碼管的段碼,數(shù)碼管的公共端接 9012 三極管,通過灌電流的方式點亮數(shù)碼管,也需通過單片機 i/o 口控制三極管的選
7、通,實現(xiàn)動態(tài)顯示。由于所需 i/o 口由 at98s52 可直接提供,無須因為 i/o 口不夠而用 cd4511 來節(jié)省i/o 口,方案二又較方案一更容易實惠,所以,我選擇方案二。2.2.2 溫度傳感器的選擇溫度傳感器的選擇 方案一:采用熱敏電阻作為檢測溫度的核心元件,由于熱敏電阻會隨溫度變化而變化,進而其阻值發(fā)生變化,再經(jīng) 555 振蕩器變化的脈沖數(shù)傳遞給單片機進行處理。 方案二:采用數(shù)字式的集成溫度傳感器 ds18b20 作為溫度檢測的核心元件,由其檢測并直接輸出數(shù)字溫度信號給單片機進行處理。 對于方案一,采用熱敏電阻作為溫度檢測元件,有價格便宜,元件易購的優(yōu)點,但熱敏電阻對溫度的細微變化
8、不太敏感,并且由于熱敏電阻的 r-t 關系的非線性,其自身電阻對溫度的變化存在較大誤差,而且在人體所處環(huán)境溫度變化過程中難以檢測到小的溫度變化。但作為本次設計雖已能滿足基本要求,但為了更深入的學習,所以放棄該方案。 對于方案二,由于數(shù)字式集成溫度傳感器 ds18b20 的高度集成化,大大降低了外接放大轉(zhuǎn)化等電路的誤差因數(shù),溫度誤差變得很小,并且由于其檢測溫度的原理與熱敏電阻檢測的原理有著本質(zhì)的不同,使得其溫度分辨力極高。溫度值在器件內(nèi)部轉(zhuǎn)化成數(shù)字量直接輸出,簡化了系統(tǒng)程序設計,又由于該溫度傳感器采用先進的單總線技術,與單片機的接口變得非常簡潔,抗干擾能力強,雖然芯片原理復雜,但是可以對時序的理
9、解更深入一步,所以選擇此方案。2.2.3 時鐘計時的選擇時鐘計時的選擇 方案一:at89s52 單片機內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進行計數(shù),從而達到計時功能,只要使用 11.0592的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時,但因為只有單一的計時功能要實現(xiàn)“萬年歷”的功能需要較復雜的程序,而且如果單片機掉電無法繼續(xù)進行計時,所以使用不便。方案二:ds1302 是美國 dallas 公司推出的一種高性能、低功耗的實時時鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)
10、。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與 31 天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。利用單片機強大的控制功能就可實現(xiàn)實時計時的功能,而且消耗的系統(tǒng)資源少,程序簡單。綜合上述兩種方案,宜采用方案二實現(xiàn)實時計時功能。2.3 系統(tǒng)結構框圖系統(tǒng)結構框圖 at89s52 單片機在模式鍵、設置鍵的控制下,由 p0 口輸出數(shù)據(jù),通 過 p2.0 、p2.1、p2.2、p2.3 進行選通,用數(shù)碼管顯示信息。 系統(tǒng)框圖: 圖 2-3 系統(tǒng)總框圖3.各功能模塊設計各
11、功能模塊設計 3.1 顯示模塊顯示模塊原理原理 由單片機(at89s52)的引腳 p0 口輸出溫度、時間等數(shù)據(jù)信息,通過片選信號 p2.0 、p2.1、p2.2、p2.3 就可在相應的數(shù)碼管進行顯示。當位選信號 p2.0 為低電平時,p1 口送出數(shù)據(jù)也為低電平就點亮數(shù)碼管,電流灌進單片機。多位 led 顯示,為了簡化電路,降低成本,將所有位的段選線并聯(lián)在一起,由一個 8 位 i/o 口控制。而共陽極公共端分別接一個9012,由相應的 i/o 口線控制 9012,實現(xiàn)各位數(shù)碼管的分時選通。段選碼,位選碼每送入一次后延時 5ms,因人的視覺暫留時間為0.1s(100ms) ,所以每位顯示的時間不能
12、超過 20ms,并保持延時一段時間,以造成視覺暫留效果,給人看上去每個數(shù)碼管總在亮。電路如(圖 3-1)所示。 由于采用的是共陽極數(shù)碼管,所以要讓段碼點亮需把 i/o 口置 0,例如:段碼 a 到 h 對應的 i/o 口是 p0.0 到 p0.7,則要讓數(shù)碼管顯示 0 到9 對應的 16 進值如圖 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ù)計算參數(shù)計算 由于 i/o 口高電平約等于 5v,使用灌電流的方式驅(qū)動數(shù)碼管,故選用 pnp 型三極管 9012;數(shù)碼管能正常工作的段電流為 3ma-10 ma,壓降為 1.7v,三極管發(fā)射極和集電極的壓降為0.3v,因此限流電阻的壓 降為 3.0v, 所以選用限流電阻的阻值 r=470 歐.3.3 獨立式按鍵模塊獨立式按鍵模塊 獨立式按鍵是直接用 i/o 口線構成的單個按鍵電路,其特點是每個hgfedcba16 進制0110000000xc0h1111110010xf9h2101001000xa
15、4h3101100000xb0h4100110010x99h5100100100x92h6100000100x82h7111110000xf8h8100000000x80h9100100000x90hc110001100xc6h-101111110xbfhl110001110xc7hh100010010x89h500105mavr按鍵單獨占用一根 i/o 口線,每個按鍵的工作不會影響其它 i/o 口線的狀態(tài)。獨立式按鍵的典型應用如(圖 3-3)所示。 獨立式按鍵電路配置靈活,軟件結構簡單,但每個按鍵必須占用一根 i/o 口線,因此,在按鍵較多時,i/o 口線浪費較大,但本設計只用到四個按鍵,顧
16、采用獨立式按鍵電路。k 0k 1k 2k 3p 24p 25p 26p 27位位位位圖 3-3 獨立式按鍵電路3.4 時鐘模塊時鐘模塊ds1302 通過三根口線實現(xiàn)與單片機的通信,因 ds1302 功耗很小,即使電源掉電后通過 3v 的紐扣電池仍能維持 ds1302 精確走時。3.4.1 ds1302 特性介紹特性介紹 ds1302 是美國 dallas 公司推出的一種高性能、低功耗的實時時鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與 31 天
17、時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。3.4.2 ds1302 引腳介紹引腳介紹 各引腳的功能為: 1、vcc2:5v 電源。當 vcc2vcc1+0.2v 時,由 vcc2 向 ds1302 供電, 當 vcc2 vcc1 時,由 vcc1 向 ds1302 供電。 2 和和 3、x1、x2 是外接晶振腳 (32.768khz 的晶振) 4、地(gnd) 5、ce/rst:復位腳 6、i/o:數(shù)據(jù)輸入輸出口; 7、sclk:串行時鐘,輸入; 8、vcc1:備用電池
18、端;3.4.3 ds1302 有關日歷、時間的寄存器有關日歷、時間的寄存器 寄存器的說明如下:1、秒寄存器(81h、80h)的位 7 定義為時鐘暫停標志(ch) 。當初始上電時該位置為 1,時鐘振蕩器停止,ds1302 處于低功耗狀態(tài);只有將秒寄存器的該位置改寫為 0 時,時鐘才能開始運行。2、小時寄存器(85h、84h)的位 7 用于定義 ds1302 是運行于 12 小時模式還是 24 小時模式。當為高時,選擇 12 小時模式。在 12 小時模式時,位 5 是 ,當為 1 時,表示 pm。在 24 小時模式時,位 5 是第二個 10小時位3、控制寄存器(8fh、8eh)的位 7 是寫保護位
19、(wp) ,其它 7 位均置為0。在對任何的時鐘和 ram 的寫操作之前,wp 位必須為 0。當 wp位為 1 時,寫保護位防止對任一寄存器的寫操作。也就是說在電路上電的初始態(tài) wp 是 1,這時是不能改寫上面任何一個時間寄存器的,只有首先將 wp 改寫為 0,才能進行其它寄存器的寫操作。 3.4.4 ds1302 控制字介紹控制字介紹位位 7:必須是邏輯 1,如果它為 0,則不能把數(shù)據(jù)寫入到 ds1302 中。位位 6:如果為 0,則表示存取日歷時鐘數(shù)據(jù),為 1 表示存取 ram 數(shù)據(jù);位位 5 至位至位 1(a4a0):):指示操作單元的地址;位位 0(最低有效位):(最低有效位):為 0
20、,表示要進行寫操作,為 1 表示進行讀操作。讀數(shù)據(jù):讀數(shù)據(jù): 讀數(shù)據(jù)時在緊跟 8 位的控制字指令后的下一個 sclk 脈沖的下降沿,讀出 ds1302 的數(shù)據(jù),讀出的數(shù)據(jù)是從最低位到最高位。寫數(shù)據(jù):寫數(shù)據(jù): 控制字總是從最低位開始輸出。在控制字指令輸入后的下一個sclk 時鐘的上升沿時,數(shù)據(jù)被寫入 ds1302,數(shù)據(jù)輸入也是從最低位(0 位)開始。位 0(最低有效位):為 1 表示進行讀操作。 如為0,表示要進行寫操作,控制字后 sclk 下降沿 讀數(shù)據(jù) sclk 上升沿寫數(shù)據(jù)。3.4.5 ds1302 單字節(jié)讀寫時序介紹單字節(jié)讀寫時序介紹 ds1302 的數(shù)據(jù)讀寫是通過 i/o 串行進行的。
21、當進行一次讀寫操作時最少得讀寫兩個字節(jié),第一個字節(jié)是控制字節(jié),就是一個命令,告訴ds1302 是讀還是寫操作,是對 ram 還是對 clok 寄存器操作,以及操作的址。第二個字節(jié)就是要讀或?qū)懙臄?shù)據(jù)了。 單字節(jié)寫:在進行操作之前先得將 ce(也可說是 rst)置高電平,然后單片機將控制字的位 0 放到 i/o 上,當 i/o 的數(shù)據(jù)穩(wěn)定后,將 sclk置高電平,ds1302 檢測到 sclk 的上升沿后就將 i/o 上的數(shù)據(jù)讀取,然后單片機將 sclk 置為低電平,再將控制字的位 1 放到 i/o 上,如此反復,將一個字節(jié)控制字的 8 個位傳給 ds1302。接下來就是傳一個字節(jié)的數(shù)據(jù)給 ds1
22、302,當傳完數(shù)據(jù)后,單片機將 ce 置為低電平,操作結束。 單字節(jié)讀操作的一開始寫控制字的過程和上面的單字節(jié)寫操作是一樣,但是單字節(jié)讀操作在寫控制字的最后一個位,sclk 還在高電平時,ds1302 就將數(shù)據(jù)放到 i/o 上,單片機將 sclk 置為低電平后數(shù)據(jù)鎖存, 單機機就可以讀取 i/o 上的數(shù)據(jù)。如此反復,將一個字節(jié)的數(shù)據(jù)讀入單片機。 讀與寫操作的不同就在于,寫操作是在 sclk 低電平時單片機將數(shù)據(jù)放到 io 上,當 sclk 上升沿時,ds1302 讀取。而讀操作是在 sclk高電平時 ds1302 放數(shù)據(jù)到 io 上,將 sclk 置為低電平后,單片機就可從 io 上讀取數(shù)據(jù)。
23、3.4.6 ds1302 操作指令介紹操作指令介紹操作說明:操作說明:1 首先要通過 8eh 將寫保護去掉,將日期,時間的初值寫時各個寄器。 2 然后就可以對 80h、82h、84h、86h、88h、8ah、8ch 進行初值的寫入。同時也通過秒寄存器將位 7 的 ch 值改成 0,這樣 ds1302就開始走時了。3 將寫保護寄存器再寫為 80h,防止誤改寫寄存器的值。 4 不斷讀取 80h8ch 的值,將它們格式化后顯示到數(shù)碼管上3.4.7 ds1302 與單片機接口電路與單片機接口電路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 溫測模塊溫測模塊 ds18b20 通過單總線實現(xiàn)與單片機的通信,每個 ds18b20 都有一個唯一的序列號,可以方便的實現(xiàn)組網(wǎng)檢測。3.5.1 單總線介紹單總線介紹 1.單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換,控制都由這根線完成。 2.單總線通常要求外接一個約為 4.7k10k 的上拉電阻,這樣,當總線 閑置時其狀態(tài)為高電平。3.5.2 ds18b20 特性介紹特性介紹 ds18b20 單線數(shù)字溫度傳感器,即“一線器件” ,其具有獨特的優(yōu)點: 1. 采用單總線的接口方式
25、 與微處理器連接時 僅需要一條口線即可實現(xiàn) 微處理器與 ds18b20 的雙向通訊。 單總線具有經(jīng)濟性好,抗干擾能 力強,適合于惡劣環(huán)境的現(xiàn)場溫度測量,使用方便等優(yōu)點,使用戶可輕 松地組建傳感器網(wǎng)絡,為測量系統(tǒng)的構建引入全新概念。 2. 測量溫度范圍寬,測量精度高 ds18b20 的測量范圍為 -55 + 125 ; 在 -10+ 85c 范圍內(nèi),精度為 0.5c 。 3. 在使用中不需要任何外圍元件。 4. 支持多點組網(wǎng)功能 多個 ds18b20 可以并聯(lián)在惟一的單線上,實現(xiàn)多 點測溫。 5. 供電方式靈活 ds18b20 可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取電 源。因此,當數(shù)據(jù)線上的時序滿足
26、一定的要求時,可以不接外部電源, 從而使系統(tǒng)結構更趨簡單,可靠性更高。 6. 測量參數(shù)可配置 ds18b20 的測量分辨率可通過程序設定 912 位。 7. 負壓特性電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常作。 8. 掉電保護功能 ds18b20 內(nèi)部含有 eeprom ,在系統(tǒng)掉電以后,它 仍可保存分辨率及報警溫度的設定值。 9. ds18b20 具有體積更小、適用電壓更寬、更經(jīng)濟、可選更小的封裝方 式,更寬的電壓適用范圍,適合于構建自己的經(jīng)濟的測溫系統(tǒng),因此也 就被設計者們所青睞。3.5.3 ds18b20 管腳介紹管腳介紹 ds18b20 的管腳排列1 . gnd 為電源 地;
27、2. dq 為數(shù)字信號輸入輸出端;3. vdd 為外接供電電源輸入端,在寄生 電源接線方式時接地; 3.5.4 ds18b20 內(nèi)部結構內(nèi)部結構 ds18b20 內(nèi)部結構主要由四部分組成: 64 位光刻 rom 、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器 th 和 tl 、配置寄存器。 光刻 rom 中的 64 位序列號是出廠前被光刻好的,它可以看作是該 ds18b20 的地址序列碼。 64 位光刻 rom 的排列是:開始 8 位(地址: 28h )是產(chǎn)品類型標號,接著的 48 位是該 ds18b20 自身的序列號,并且每個 ds18b20 的序列號都不相同,因此它可以看作是該 ds18b20 的地
28、址序列碼;最后 8 位則是前面 56 位的循環(huán)冗余校驗碼( crc=x8+x5+x4+1 ) 。由于每一個 ds18b20 的 rom 數(shù)據(jù)都各不相同,因此微控制器就可以通過單總線對多個 ds18b20 進行尋址,從而實現(xiàn)一根總線上掛接多個 ds18b20 的目的。ds18b20 中的溫度傳感器完成對溫度的測量,用 16 位二進制形式提供,形式表達,其中 s 為符號位。3.5.5 ds18b20 溫度轉(zhuǎn)化示例溫度轉(zhuǎn)化示例3.5.6 ds18b20 時序介紹時序介紹ds18b20 的一線工作協(xié)議流程是:初始化rom 操作指令存儲器操作指令數(shù)據(jù)傳輸。其工作時序包括:1. 初始化時序2. 寫時序3.
29、 讀時序 初始化時序:初始化時序: 主機首先發(fā)出一個 480960 微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖?,并在隨后的 480 微秒時間內(nèi)對總線進行檢測,如果有低電平出現(xiàn)說明總線上有器件已做出應答。若無低電平出現(xiàn)一直都是高電平說明總線上無器件應答。做為從器件的 ds18b20 在一上電后就一直在檢測總線上是否有480960 微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待 1560微秒后將總線電平拉低 60240 微秒做出響應存在脈沖,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待。 寫操作:寫操作: 寫操作就是主機發(fā)出各種操作命令,但各種操作命令都是向ds18b20 寫 0 和寫
30、1 組成的命令字節(jié),接收數(shù)據(jù)時也是從 ds18b20 讀取 0 或 1 的過程。寫周期最少為 60 微秒,最長不超過 120 微秒。寫周期一開始做為主機先把總線拉低 1 微秒表示寫周期開始。隨后若主機想寫0,則繼續(xù)拉低電平最少 60 微秒直至寫周期結束,然后釋放總線為高電平。若主機想寫 1,在一開始拉低總線電平 1 微秒后就釋放總線為高電平,一直到寫周期結束。而做為從機的 ds18b20 則在檢測到總線被拉底后等待 15 微秒然后從 15us 到 45us 開始對總線采樣,在采樣期內(nèi)總線為高電平則為 1,若采樣期內(nèi)總線為低電平則為 0。 讀操作:讀操作: 對于讀數(shù)據(jù)操作時序也分為讀 0 時序和
31、讀 1 時序兩個過程。讀時序是從主機把單總線拉低之后,在 1 微秒之后就得釋放單總線為高電平,以讓 ds18b20 把數(shù)據(jù)傳輸?shù)絾慰偩€上。ds18b20 在檢測到總線被拉低1 微秒后,便開始送出數(shù)據(jù),若是要送出 0 就把總線拉為低電平直到讀周期結束。若要送出 1 則釋放總線為高電平。主機在一開始拉低總線 1微秒后釋放總線,然后在包括前面的拉低總線電平 1 微秒在內(nèi)的 15 微秒時間內(nèi)完成對總線進行采樣檢測,采樣期內(nèi)總線為低電平則確認為 0。采樣期內(nèi)總線為高電平則確認為 1。完成一個讀時序過程,至少需要60us 才能完成。3.5.7 ds18b20 操作步驟操作步驟1. 每次讀寫前對 ds18b
32、20 進行復位初始化。復位要求主 cpu 將數(shù)據(jù)線下拉 500us ,然后釋放, ds18b20 收到信號后等待 16us60us 左右,然后發(fā)出 60us240us 的存在低脈沖,主 cpu 收到此信號后表示復位成功。2. 發(fā)送一條 rom 指令3. 發(fā)送存儲器指令3.5.8 ds18b20 與單片機的接口電路與單片機的接口電路v dd3i/o2g nd1u 3d s18b 20r 204k 7v ccc 10.1u fp31位位位位位位3.6 總系統(tǒng)原理圖總系統(tǒng)原理圖 單片機(at89s52)9 腳為復位輸入端。上電復位,只要 rst 引腳上有大于二個機器周期以上的高電平,單片機(at89
33、c2051)即復位。按鍵從單片機(at89s52)的 p2.4、p2.5、p2.6、p2.7 口接入,當按鍵被按下時,相應的輸入口就會輸入低電平 0。單片機(at89s52)的 xtal1 腳、xtal2 腳接一個由 12m 晶振和10pf 組成的振蕩電路。為單片機提供相應的時序。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.軟件設計軟件設計主程序主要起到一個導向和決策功能,控制程序的走向。本系統(tǒng)在主程序中運用模塊化結構,所有控制量集中處理,提高了處理效率,并在ram 建立各控制量的映射,方便各功能模塊的編程及修改。運用散轉(zhuǎn)結構,可實現(xiàn)無擾動重入。本設計主要有以下幾個模塊:溫顯模塊、時鐘顯示模塊、時鐘修改模塊。操作說明:上電復位后進入溫顯模塊,按 k1 鍵可進入溫度報警值上下限的設置;按 k0
39、 可進行模塊間的轉(zhuǎn)換,按一次 k0 進入時鐘模塊,按k0 兩次進入時鐘修改模塊。4.1 i/o 口分配口分配1、p2.0、p2.1、p2.2、p2.3 作為個位、十位、百位、千位數(shù)碼管片選。2、p2.4、p2.5、p2.6、p2.7 作為按鍵接口。3、p0.0 到 p0.7 作為段碼 a 到 g 的輸出口。4.2 按鍵掃描按鍵掃描本設計采用定時器中斷延時去抖的方法來進行按鍵的有效掃描判斷5.流程圖流程圖5.1 主程序流程圖主程序流程圖5.2 work0 模塊流程圖模塊流程圖mode=0mode=1獲取溫度根據(jù)鍵狀態(tài)進行功能散轉(zhuǎn)work0,溫顯和溫報模塊,同時置位延時方式標志位work1,時間顯
40、示,同時清零延時方式標志位work2,調(diào)時模塊,在調(diào)整完畢后進入work1按鍵掃描顯示方式 1清定時標志位 重裝定時初值按鍵掃描顯示方式 2初始化 ds1302讀取時間開始初始化延時方式標志位=1?nyn5ms 到?ymode=2入口根據(jù)鍵狀態(tài)值進行功能散轉(zhuǎn)溫顯模式修改高溫報警值修改低溫報警值返回cnt1=0cnt1=1cnt1=25.3 work1 模塊流程圖模塊流程圖5.4 work2 模塊流程圖模塊流程圖msta=0msta=1月份顯示模塊msta=2時間顯示模塊星期顯示模塊入口年份顯示模塊返回根據(jù)鍵狀態(tài)值進行功能散轉(zhuǎn)msta=3設置時間預處理,即將當前時間值送給修改緩沖單元入口根據(jù)鍵狀
41、態(tài)值進行功能散轉(zhuǎn)msta1=2msta1=3msta1=0msta1=1返回修改小時,高兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改分鐘,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改月份,高兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改日,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改年份,高兩位顯示 20低兩位數(shù)碼管位閃,按 k2與 k3 鍵修改修改星期,低兩位數(shù)碼管位閃,按 k2 與 k3 鍵修改修改完畢,將修改信息寫入到 ds1302 芯片中msta1=4msta1=5msta1=6msta1=75.5 獲取溫度子程序流程圖獲取溫度子程序流程圖入口初始化 ds18b20跳過 ro
42、m溫度轉(zhuǎn)換初始化 ds18b20跳過 rom讀取溫度讀低 8 位讀高 8 位將取出的數(shù)據(jù)轉(zhuǎn)換成溫度值,分為整數(shù)部分和小數(shù)部分將整數(shù)部分送顯緩存將小數(shù)部分按 0.5 精度處理將溫度值轉(zhuǎn)換為bcdma3,yongyu 溫度報警時溫度比較實用返回5.6 按鍵掃描按鍵掃描5.7 中斷服務子程序中斷服務子程序5.8 顯示方式顯示方式 1入口讀鍵,保存鍵值有鍵?開定時中斷延時去抖提取鍵前沿關定時中斷返回ny入口重裝中斷定時初值保存變化的鍵狀態(tài)返回顯示個位,dsw=1關數(shù)碼管i3?根據(jù)狀態(tài)字進行散轉(zhuǎn)入口i=0返回顯示十位,dsw=2顯示百位,dsw=3顯示千位,dsw=0dsw=0dsw=1dsw=2dsw
43、=35.9 初始化初始化 ds1302 子程序流圖子程序流圖yn入口允許初始化標志位=1?寫保護關寫入年份寫入月份寫入日寫入小時寫入分鐘寫保護開允許初始化標志位清零返回ny5.105.10 溫顯模塊子程序流圖溫顯模塊子程序流圖5.11 讀取時間模塊子程序流圖讀取時間模塊子程序流圖入口將溫度值送顯緩溫度值比較,超過上下限值,則報警返回讀取分鐘,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)入口變量定義返回讀取小時,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)讀取日,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)讀取月份,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)讀取星期,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)讀取年份,將數(shù)據(jù)轉(zhuǎn)換為十進制數(shù)據(jù)6.程序代碼程序代碼6.1 主程序部分主程序部分#inclu
44、de /52 單片機頭文件#include /52 單片機頭文件#include#include /52 單片機頭文件#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 關,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; /時間未到,沿用原來保留的鍵值 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; /顯示個位 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; /顯示個位 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;/設置定時器的工作方式 th0=(65536-20000)/25
49、6;/為定時器 0 裝載初值,用中斷方式進行 /按鍵的去抖 tl0=(65536-20000)%256; th1=(65536-5000)/256;/為定時器 1 裝載初值 tl1=(65536-5000)%256; ea=1; /開總中斷 et0=1; /開定時器 0 中斷 tr1=1; /開定時器 0 lbj_buf1=2; /為低溫報警值賦初值 22 度,在主程 /序中可修改 lbj_buf0=2; hbj_buf1=3; /為高溫報警值賦初值 35 度,在主程 /序中可修改 hbj_buf0=5; fmq=1; /關閉蜂鳴器和 led delay_mode=1; /工作模式賦初值 1(
50、其中/mode=1 表示,程序使用軟件延時,此時使用 ds18b20 進行溫度測量, /作為溫度計使用;mode=0 時,使用/定時器延時,程序每隔 5ms 執(zhí)行一次,此時作為時鐘 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() /修改低溫報警值 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() /修改高溫報警值 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(); /溫度顯示子程序,具有超溫和低溫報警功能 break; case 1:xg_lbj(); /修改低溫報警值 break; case 2:xg_hbj(); /修改高溫報
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 / 定時器 0 中斷 th0=(65536-20000)/256; /送初值 tl0=(65536-20000)%256; key0=r0; /時間到,保存鍵值于 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) /延時時間為 2*i 微秒; while(-i);void init_ds18b20() ds18b20_dq=1; /先將數(shù)據(jù)線置高電平 1 delay_us(1); /稍微延時 ds18b20_dq=0; /先將數(shù)據(jù)線置低電平 0 delay_us(250); /延時 500us,該時間范圍可以在 480960us /之間 ds18b20_dq=1; /數(shù)
59、據(jù)線拉到高電平 1 delay_us(30); /延時等待,如果初始化成功則在 1560us /內(nèi)由 18b20 產(chǎn)生一個低電平 0 if(ds18b20_dq=0) /如果 18b20 存在 delay_us(240); /再延時 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); /延時 7us if(ds18b20_dq) dat|=0 x80; /一位一位地讀取數(shù)據(jù),對18b20 /來說要,寫數(shù)據(jù)也是由低位到高位 delay_us(25); return dat;void get_temperature() /溫度轉(zhuǎn)換、獲得溫度子程序init_ds18b20(); /初始化 ds18b20write_ds18b20_data(0 xcc); /發(fā)跳過 rom 匹配命令write_ds18b20_data(0 x44); /發(fā)溫度轉(zhuǎn)換命令init_ds18b20(); /初始化 ds18b20write_ds
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024跨境電商服務平臺居間合同
- 二零二四年中英文教育培訓機構合作服務合同3篇
- 2025年度物流倉儲場地租賃及供應鏈管理合同6篇
- 2025年度航空航天產(chǎn)業(yè)技術工人勞動合同3篇
- 2025年度網(wǎng)絡安全監(jiān)測預警服務合同6篇
- 2025年度大型企業(yè)員工培訓服務采購合同范本3篇
- 二零二四年A公司網(wǎng)站開發(fā)合同協(xié)議書
- 二零二五年度大廈商場租賃合同(含節(jié)假日營業(yè)規(guī)定)3篇
- 2025年度餐廚廢棄物處置與廢棄物處理設施運營管理合同3篇
- 2025版煤礦安全生產(chǎn)責任險投保合同3篇
- 春節(jié)文化常識單選題100道及答案
- 12123交管學法減分考試題及答案
- 2024年杭州師范大學附屬醫(yī)院招聘高層次緊缺專業(yè)人才筆試真題
- 制造業(yè)BCM業(yè)務連續(xù)性管理培訓
- 商場停車場管理制度
- 24年追覓在線測評28題及答案
- TGDNAS 043-2024 成人靜脈中等長度導管置管技術
- 《陸上風電場工程概算定額》NBT 31010-2019
- 皮帶輸送機工程施工電氣安裝措施要點
- 藥房(冰柜)溫濕度表
- QJ903.9A-1995航天產(chǎn)品工藝文件管理制度管理用工藝文件編制規(guī)則
評論
0/150
提交評論