ATS單片機(jī)電子時鐘_第1頁
ATS單片機(jī)電子時鐘_第2頁
ATS單片機(jī)電子時鐘_第3頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘要:本設(shè)計以數(shù)字集成電路技術(shù)為基礎(chǔ),單片機(jī)技術(shù)為核心。軟件設(shè)計采用模塊化結(jié)構(gòu),C語言編程。系統(tǒng)通過LCD顯示數(shù)據(jù),可以顯示日期(年、月、日、時、分、秒)以及溫度。在內(nèi)容安排上首先描述系統(tǒng)硬件工作原理,著重介紹了各硬件接口技術(shù)和各個接口模塊的功能;其次,詳細(xì)的闡述了程序的各個模塊和實現(xiàn)過程。關(guān)鍵詞:單片機(jī);電子時鐘;溫度傳感器;DS1302;DS18B20;LCD1602基于AT89S51單片機(jī)的電子時鐘(帶溫度顯示)設(shè)計摘要 錯誤!未定義書簽。1設(shè)計要求22方案論證與設(shè)計22.1用可編程邏輯器件設(shè)計2控制器部分32.2顯示部分的方案選擇錯誤!未定義書簽。2.3系統(tǒng)設(shè)計錯誤!未定義書簽。晶體振

2、蕩器電路 .錯誤!未定義書簽。分頻器電路 .錯誤!未定義書簽。時間計數(shù)器電路 .錯誤!未定義書簽。時鐘電路 .錯誤!未定義書簽。2.3.5 復(fù)位電路 .錯誤!未定義書簽。復(fù)位電路的可靠性設(shè)計 .錯誤!未定義書簽。按鍵部分 .錯誤!未定義書簽。根據(jù)各模塊的功能互相連接成電子時鐘的控制電路 53各硬件介紹 錯誤!未定義書簽。3.1 AT89S51 的引腳說明73.2 發(fā)光二極管指示電路設(shè)計83.3 LCM1602 簡介 93.5 DS1302 簡介104系統(tǒng)硬件設(shè)計所需的器材,.115系統(tǒng)軟件總體設(shè)計 錯誤!未定義書簽。6主程序流程圖錯誤!未定義書簽。7安裝制作8調(diào)試與檢測安全9結(jié)束語.14.14

3、 錯誤!未定義書簽。前言電子時鐘是實現(xiàn)對年,月,日,時,分,秒數(shù)字顯示的計時裝置,廣泛用于個人家庭,車站,碼頭,辦公室,銀行大廳等場所, 成為人們?nèi)粘I钪械谋匦杵贰?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠(yuǎn)遠(yuǎn)超過老式鐘表。鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,在此基礎(chǔ)上完成的電子時鐘精度高,功能易于擴(kuò)展??蓴U(kuò)展成為諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、自動起閉路燈、定 時開關(guān)烘箱、通斷動力設(shè)備、甚至各種定時電氣的自動啟用等電路。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時鐘及擴(kuò)大其應(yīng)用有著非常現(xiàn)實的意義。本設(shè)計就是數(shù)字時鐘簡單的擴(kuò)展應(yīng)

4、用。1設(shè)計要求本設(shè)計準(zhǔn)備實現(xiàn)的功能:(1) 顯示日期功能(年、月、日、時、分、秒以及)(2) 可通過按鍵切換年、月、日及時、分、秒的顯示狀態(tài)(3) 可隨時調(diào)校年、月、日或時、分、秒(4) 可每次增減一進(jìn)行時間調(diào)節(jié)(5) 可動態(tài)完整顯示年份,實現(xiàn)真正的萬年歷顯示(6) 可顯示溫度2方案論證與設(shè)計2.1控制器部分方案論證方案一:可采用 ALTERA公司的FLEX10K系列PLD器件。設(shè)計起來結(jié)構(gòu)清晰,各個模塊,從硬件上設(shè)計起來 相對簡單,控制與顯示的模塊間的連接也會比較方便。但是考慮到本設(shè)計的特點,EDA在功能擴(kuò)展上比較受局限,而且EDA占用的資源也相對多一些。從成本上來講,用可編程邏輯器件來設(shè)計

5、也沒有什么優(yōu)勢。方案二:凌陽16位單片機(jī)有豐富的中斷源和時基。它的準(zhǔn)確度相當(dāng)高,并且C語言和匯編兼容的編程環(huán)境也很方便來實現(xiàn)一些遞歸調(diào)用。I/O 口功能也比較強(qiáng)大,方便使用。用凌陽16位單片機(jī)做控制器最有特色的就是它的可編程音頻處理,可完成語音的錄制播放和識別。這些都方便對設(shè)計進(jìn)行擴(kuò)展,使設(shè)計更加完善。成本也相對低一些。 但是,在控制與顯示的結(jié)合上有些復(fù)雜,顯示模組資源相對有限,而且單片機(jī)的穩(wěn)定性不是很高,而且就需要完成萬年歷這個不太復(fù)雜的設(shè)計可以不必用凌陽16位單片機(jī)來完成,采用 51單片機(jī)既能夠?qū)崿F(xiàn)既定功能,成本也不高。綜合考慮最后選擇用51單片機(jī)來作為中心控制器件。硬件控制電路主要用了

6、AT89S51芯片處理器、LCD顯示器等。根據(jù)各自芯片的功能互相連接成電子萬年歷的控 制電路。軟件控制程序主要有主控程序、電子萬年歷的時間控制程序、時間顯示及星期顯示程序等組成。主控程序 中對整個程序進(jìn)行控制,進(jìn)行了初始化程序及計數(shù)器、還有鍵盤功能程序、以及顯示程序等工作,時間控制程序是 電子萬年歷中比較重要的部分。時間控制程序體現(xiàn)了年、月、日、時、分、秒及星期的計算方法。時間控制程序主 要是定時器0計時中斷程序每隔10ms中斷一次當(dāng)作一個計數(shù),每中斷一次則計數(shù)加1,當(dāng)計數(shù)100次時,則表示1秒到了,秒變量加1,同理再判斷是否1分鐘到了,再判斷是否1小時到了,再判斷是否 1天到了,再判斷是否1

7、月 到了,再判斷是否1年到了,若計數(shù)到了則相關(guān)變量清除0。先給岀一般年份的每月天數(shù)。如果是閏年,第二個月天數(shù)不為28天,而是29天。再用公式s = v 1 + (y 1/4一(y 1/100+ (y 1/400+ d計算當(dāng)前顯示日期是 星期幾,當(dāng)調(diào)節(jié)日期時,星期自動的調(diào)整過來。閏年的判斷規(guī)則為,如果該年份是4或100的整數(shù)倍或者是400的整數(shù)倍,則為閏年;否則為非閏年。在我們的這個設(shè)計中由于只涉及100年范圍內(nèi),所以判斷是否閏年就只需要用該年份除4來判斷就行了。溫度的顯示主要是靠ds18b20采集現(xiàn)在的溫度數(shù)據(jù),CPU讀取數(shù)據(jù)進(jìn)行顯示,當(dāng)各自的條件得不到滿足時,對應(yīng)的顯示器狀態(tài)就不發(fā)生改變,只

8、是在滿足條件的情況下,顯示器的狀態(tài)才變化。圖1單片機(jī)控制電路Fig.1 SCM Control circuit2.2顯示部分的方案論證方案一:采用8段數(shù)碼管雖經(jīng)濟(jì)實惠,但操作比液晶顯示來說略顯繁瑣。方案二:液晶顯示方式。液晶顯示效果出眾,可以運用菜單項來方便操作,比較簡單,所以,最后選擇液晶顯示方案。圖2液晶顯示電路Fig.2 lcm1602 circuit2.3數(shù)字溫度計設(shè)計方案論證方案一由于本設(shè)計是測溫電路,可以使用熱敏電阻之類的器件利用其感溫效應(yīng),在將隨被測溫度變化的電壓或電流采 集過來,進(jìn)行 A/D轉(zhuǎn)換后,就可以用單片機(jī)進(jìn)行數(shù)據(jù)的處理,在顯示電路上,就可以將被測溫度顯示岀來,這種設(shè) 計

9、需要用到A/D轉(zhuǎn)換電路,感溫電路比較麻煩。2.3.2 方案二(1) .進(jìn)而考慮到用溫度傳感器,在單片機(jī)電路設(shè)計中,大多都是使用傳感器,所以這是非常容易想到的,所以 可以采用一只溫度傳感器DS18B20此傳感器,可以很容易直接讀取被測溫度值,進(jìn)行轉(zhuǎn)換,就可以滿足設(shè)計要求。從以上兩種方案,很容易看岀,采用方案二,電路比較簡單,軟件設(shè)計也比較簡單,故采用了方案二。(2) .方案二的總體設(shè)計框圖溫度計電路設(shè)計總體設(shè)計方框圖如圖1所示,控制器采用單片機(jī) AT89S51,溫度傳感器采用DS18B20用LCD1602顯示溫度2.4系統(tǒng)設(shè)計晶體振蕩器電路晶體振蕩器電路給數(shù)字鐘提供一個頻率穩(wěn)定準(zhǔn)確的32768H

10、z的方波信號,可保證數(shù)字鐘的走時準(zhǔn)確及穩(wěn)定。不管是指針式的電子鐘還是數(shù)字顯示的電子鐘都使用了晶體蕩器電路。Fig.3 ds1302 circuit分頻器電路分頻器電路將高頻方波信號經(jīng)分頻后得到1Hz的方波信號供秒計數(shù)器進(jìn)行計數(shù),分頻器實際上也就是計數(shù)器。時間計數(shù)器電路時間計數(shù)電路由秒個位和秒十位計數(shù)器,分個位和分十位計數(shù)器及時個位和時十位計數(shù)器電路構(gòu)成,其中秒個位和秒十位計數(shù)器,分個位和分十位計數(shù)器為60進(jìn)制計數(shù)器而根據(jù)設(shè)計要求,時個位和時十位計數(shù)器為12進(jìn)制計數(shù)器。2.4.4 時鐘電路內(nèi)部時鐘電路如圖所示,在 XTAL1和XTAL2引腳上外接定時元件,內(nèi)部振蕩電路就產(chǎn)生自激振蕩。定時元件通常

11、石英晶體和電容組成的并聯(lián)諧振回路,晶體振蕩器選擇12MHZ電容采用30PF。圖4 時鐘電路Fig.4Clock circuit2.4.5 復(fù)位電路影響單片機(jī)系統(tǒng)運行穩(wěn)定性的因素可大體分為外因和內(nèi)因兩部分:(1)外因射頻干擾,它是以空間電磁場的形式傳遞在機(jī)器內(nèi)部的導(dǎo)體(引線或零件引腳)感生岀相應(yīng)的干擾,可通過電 磁屏蔽和合理的布線/器件布局衰減該類干擾;電源線或電源內(nèi)部產(chǎn)生的干擾,它是通過電源線或電源內(nèi)的部件耦合或直接傳導(dǎo),可通過電源濾波、隔離等措 施來衰減該類干擾。(2)內(nèi)因振蕩源的穩(wěn)定性,主要由起振時間頻率穩(wěn)定度和占空比穩(wěn)定度決定起振時間可由電路參數(shù)整定穩(wěn)定度受振蕩器類型溫度和電壓等參數(shù)影響

12、復(fù)位電路的可靠性。復(fù)位電路的可靠性設(shè)計復(fù)位是單片機(jī)的初始化操作。單片機(jī)啟運運行時,都需要先復(fù)位,其作用是使CPU和系統(tǒng)中其他部件處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作。因而,復(fù)位是一個很重要的操作方式。但單片機(jī)本身是不能自動進(jìn)行復(fù) 位的,必須配合相應(yīng)的外部電路才能實現(xiàn)。復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源 穩(wěn)定后還要經(jīng)一定的延時才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分-合過程中引起的抖動而影響復(fù)位。圖5 RC復(fù)位電路Fig.5RC Reset Circuit按鍵部分本設(shè)計總的用了四個按扭開關(guān)作為鍵盤,其中一個是復(fù)位鍵,另三個中的

13、其中兩個是調(diào)整時間增加、減少的鍵,第三個是切換年、月、日及時、分、秒的顯示狀態(tài)并在所切換的顯示狀態(tài)下配合加減兩個鍵調(diào)整時間。圖6按鍵電路Fig.6 Key circuit3各硬件介紹3.1 AT89S51的引腳說明AT89S51系列單片機(jī)中有PDIP, PLCC TQFP多種封裝形式。本設(shè)計采用的是PDIP封裝40管腳的單片機(jī),各引PDIP腳如圖2-2所示P-l D C140 vecP1.1 匚230 PO.O ADOP1.2 匚338! PO.l (ADiP1.3 C437 P0.2 (AD2)P1.-4 亡e35 PO.3 AD35 Ee1 PO 4 (AD4) 匚73斗 P3 S IAO

14、5)CSCKl-7 匸a333(Aoe)RET C&32 PO-7 (AD7)(RXD:. PS CID311(TXD) P3 1 E1130 ALEROG2 匚1229 PSEN3 匚t3Z9 P2 7 (A 15CTO)Rg 4 匚14C7 F2-&(A14(T1) P3.5 匚1529 F2 E JA13)a 匚IB35J F2 4 (A 15両)P3 r1724 P2 3 (A11)XTAL2 匚t923 P2 2 (A 10KTAL1rID22H P3 t (AJJ)GNU L2321P2 0圖9 AT89S51的PDIP封裝引腳圖Fig.9 AT89S5140個引腳中,4組8位共3

15、2個I/O 口,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,現(xiàn)在對這些引腳的功能加以說明:(1)Pin9:RESET/Vpd復(fù)位信號復(fù)用腳,當(dāng) AT89S51通電,時鐘電路開始工作,在 RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)開始復(fù)位。而RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址單元開始執(zhí)行程序。(2) Pin29:PESN當(dāng)訪問外部程序存儲器時,此腳輸出負(fù)脈沖選通信號,外部程序存儲器則把指令數(shù)據(jù)放到P0 口上,由CPU讀入并執(zhí)行。(3) Pin30:ALE/PROG地址鎖存允許信號端。單片機(jī)上電后,ALE引腳不斷向外輸出正脈沖信號,ALE信號可以用作對外輸岀時鐘或

16、定時信號。(4)Pin31:EA/Vpp程序存儲器的內(nèi)外部選通線, 89S51單片機(jī),內(nèi)置有4kB的程序存儲器,當(dāng)EA為高電平并且 程序地址小于4kB時,讀取內(nèi)部程序存儲器指令數(shù)據(jù),而超過4kB地址則讀取外部指令數(shù)據(jù)。如 EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。3.2發(fā)光二極管指示電路設(shè)計發(fā)光二極管簡稱為LED。由鎵(Ga)與砷(AS、磷(P)的化合物制成的二極管,當(dāng)電子與空穴復(fù)合時能輻射出可見光,因而可以用來制成發(fā)光二極管,在電路及儀器中作為指示燈,或者組成文字或數(shù)字顯示。磷砷化鎵二極管 發(fā)紅光,磷化鎵二極管發(fā)綠光,碳化硅二極管發(fā)黃光。它是半導(dǎo)體二極管的一種,可以把電能轉(zhuǎn)化

17、成光能;常簡寫為LED發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦浴.?dāng)給發(fā)光二極管加上正向電壓后,從P區(qū)注入到N區(qū)的空穴和由N區(qū)注入到P區(qū)的電子,在PN結(jié)附近數(shù)微米內(nèi)分別與 N區(qū)的電子和P區(qū)的空穴復(fù)合,產(chǎn)生自發(fā)輻射的熒光。 不同的半導(dǎo)體材料中電子和 空穴所處的能量狀態(tài)不同。當(dāng)電子和空穴復(fù)合時釋放岀的能量多少不同,釋放岀的能量越多,則發(fā)岀的光的波長越短。常用的是發(fā)紅光、綠光或黃光的二極管。設(shè)計中,我使用了 1個發(fā)光二極管作為電源的指示。為了避免供給發(fā)光二極管的電流過大,使用1K的電阻進(jìn)行限流。3.3LCD1602 簡介U6COF-_LCM1602rM.J r圖 11LCM160

18、2Fig.11 LCM1602LCM1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:VSS為地電源 第2腳:VDD接5V正電源 第3腳:V0為液晶顯示 器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、 低電平時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RSRW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時可讀忙信號,當(dāng) RS為高電平RW為低電平時可以寫入數(shù)據(jù).第6腳:E端為使 能端,當(dāng)E端由高電平跳變成低電

19、平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第1516腳:空腳3.4 DS1302 簡介1 DS1302的結(jié)構(gòu)及工作原理DS13021是美國DALLAS公司推出的一種高性能、低功耗、帶 RA啲實時時鐘芯片,它可以對年、月、日周日、時、 分、秒進(jìn)行計時,且具有閏年補(bǔ)償功能,工作電壓寬達(dá)2.55.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內(nèi)部有一個31X8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流

20、充電的能力。1.1引腳功能表及內(nèi)部結(jié)構(gòu)圖1 I冊2管腳臥及內(nèi)部結(jié)叫DS1302的引腳及內(nèi)部結(jié)構(gòu)如圖1所示,引腳功能如表1所示表1 l)S 1302引腳功能表引即號引腳客稱1主電灌2.3XI, X24CND5RST劉W片選線6I/O申行數(shù)據(jù)靖人瀚山端恐向)7SCLK申行敵據(jù)輸人端8V肩備電源1.2 DS1302的控制字節(jié)說明DS1302的控制字如圖2所示??刂谱止?jié)的最高有效位(位 7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到 DS1302中位6如果為0,則表示存取 日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進(jìn)行寫操 作,為1表示進(jìn)行讀操

21、作,控制字節(jié)總是從最低位開始輸岀。65432101A4A3111A0IL.AW/L/ck圖2控制j節(jié)的含文1.3復(fù)位通過把 輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。輸入有兩種功能:首先,接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中置為低電平,則會終止此次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc2.5V之前,必須保持低電平。只有在 SCLK為低電平時,才能將 RST置為高電平。表2 M13O2的日歷、時忡寄存器艮其揑制字寄辛器名命令字取值范關(guān)各位內(nèi)密寫

22、抿作讀操作154T2 iO抄寄手蠟181 H00-59CHI0SECSEC分抑寄存器82 H 183H00-590MIK 小時寄存器84 H01-13 或 00-232/240WHKHRS6HH7M1()1-28,29.30,3100lODAThDATH月份寄存爲(wèi)88 HH9H0卜】20001CMMONTH周H奇#器&AHKB1101-U700 0 J DAY年盼寄存器8CHKDH00-9910 YLARYEAR1.4數(shù)據(jù)輸入輸岀SC1.Klobytt h data roarrF 在控制指令字輸入后的下一個 SCLK時鐘的上升沿時數(shù)據(jù)被寫入 DS1302數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟

23、8位的控制指令字后的下一個 SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時從低位 0位至高位7,數(shù)據(jù)讀寫時 序見圖3。1.5 DS1302 的寄存器DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時間寄存器及其控制字見表2。此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM目關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。DS1302與RAM相關(guān)的寄存器分為兩類,一類是單個RA單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為COHFDH其中奇數(shù)為讀操作, 偶數(shù)為寫

24、操作;再一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。3.5 DS1302 簡介3.5.1.溫度傳感器DS18B20DS18B20溫度傳感器是美國 DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀岀被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式。TO- 92封裝的DS18B20的引腳排列見下圖,其引腳功能描述見表1。(底視圖)9 / 35表1DS18B20詳細(xì)引腳功能描述序號名稱引腳功能描述1GND地信號2DQ數(shù)據(jù)輸入/輸岀引腳。開漏單總線接口引

25、腳。當(dāng)被用著在寄生電源下,也可以向器件提供 電源。3VDD可選擇的VDD引腳。當(dāng)工作于寄生電源時,此引腳必須接地。DS18B2 0的性能特點如下:獨特的單線接口僅需要一個端口引腳進(jìn)行通信;多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;無須外部器件;可通過數(shù)據(jù)線供電,電壓范圍為3.05.5 V;零待機(jī)功耗;溫度以9或12位數(shù)字;用戶可定義報警設(shè)置;報警搜索命令識別并標(biāo)志超過程序限定溫度(溫度報警條件)的器件;負(fù)電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;DS18B20采用3腳PR 35封裝或8腳SOIC封裝,其內(nèi)部結(jié)構(gòu)框圖如圖2所示圖2 DS18B20內(nèi)部結(jié)構(gòu)

26、64位ROM勺結(jié)構(gòu)開始8位是產(chǎn)品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前面 56位的CRC檢驗碼,這也是多個 DS18B20可以采用一線進(jìn)行通信的原因。溫度報警觸發(fā)器TH和TL,可通過軟件寫 入戶報警上下限。DS18B20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存RAM和一個非易失性的可電擦除的EERA高速暫存RAM勺結(jié)構(gòu)為8字節(jié)的存儲器,結(jié)構(gòu)如圖3所示。頭2個字節(jié)包含測得的溫度信息,第3和第4字節(jié)TH和TL的拷貝,是易失的,每次上電復(fù)位時被刷新。第5個字節(jié),為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。DS18B20工作時寄存器中的分辨率轉(zhuǎn)換為相應(yīng)精度的溫度數(shù)值

27、。該字節(jié)各位的定義如圖 3所示。低5位一直為1, TM是工作模式位,用于設(shè)置 DS18B20在工作模式還是在測試模式,DS18B20出廠時該位被設(shè)置為0,用戶要去改動,R1和R 0決定溫度轉(zhuǎn)換的精度位數(shù),來設(shè)置分辨率。溫度LSBTMR1R011111圖3DS18B20字節(jié)定義由表1可見,DS18B20溫度轉(zhuǎn)換的時間比較長,而且分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時間越長。因此,在實際應(yīng)用中要將分辨率和轉(zhuǎn)換時間權(quán)衡考慮。高速暫存RAM的第6、7、8字節(jié)保留未用,表現(xiàn)為全邏輯1。第9字節(jié)讀出前面所有8字節(jié)的CRC碼,可用來檢驗數(shù)據(jù),從而保證通信數(shù)據(jù)的正確性。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟

28、動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1、2字節(jié)。單片機(jī)可以通過單線接口讀岀該數(shù)據(jù),讀數(shù)據(jù)時低位在先,高位在后, 數(shù)據(jù)格式以0.0625 C/LSB形式表示。當(dāng)符號位S=0時,表示測得的溫度值為正值,可以直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)符號位S=1時,表示 測得的溫度值為負(fù)值,要先將補(bǔ)碼變成原碼,再計算十進(jìn)制數(shù)值。表2是一部分溫度值對應(yīng)的二進(jìn)制溫度數(shù)據(jù)。表1 DS18B20溫度轉(zhuǎn)換時間表R1R0分辨率/位溫度最大轉(zhuǎn)向時間/ms00993.750P 110187.5110113751112750DS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與RAM中

29、的TH TL字節(jié)內(nèi)容作比較。若TH或TvTL,則將該器件內(nèi)的報警標(biāo)志位置位,并對主機(jī)發(fā)出的報警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時測量溫度并進(jìn)行報警搜索。在64位ROM勺最高有效字節(jié)中存儲有循環(huán)冗余檢驗碼(CRC。主機(jī)ROM勺前56位來計算CRC1,并和存入DS18B20的CRC作比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。DS18B20的測溫原理是這這樣的,器件中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈 沖信號送給減法計數(shù)器1;高溫度系數(shù)晶振隨溫度變化其振蕩頻率明顯改變,所產(chǎn)生的信號作為減法計數(shù)器2的脈 沖輸入。器件中還有一個計數(shù)門,當(dāng)計數(shù)門打開時,DS18

30、B20就對低溫度系數(shù)振蕩器產(chǎn)生的時鐘脈沖進(jìn)行計數(shù)進(jìn)而完 成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,首先將-55 C所對應(yīng)的一個基數(shù)分別置入減法計數(shù)器1、溫度寄存器中,計數(shù)器1和溫度寄存器被預(yù)置在-55 C所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時,溫度寄存 器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行 計數(shù),如此循環(huán)直到減法計數(shù)器計數(shù)到0時,停止溫度寄存器的累加,此時溫度寄存器中的數(shù)值就是所測溫度值。 其輸岀用于修正減法計數(shù)器的預(yù)置值,只要計數(shù)器門仍未

31、關(guān)閉就重復(fù)上述過程,直到溫度寄存器值大致被測溫度值。表2 一部分溫度對應(yīng)值表溫度廠C二進(jìn)制表示十六進(jìn)制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110

32、 0110 1111FE6FH-551111 1100 1001 0000FC90H另外,由于DS18B20單線通信功能是分時完成的,它有嚴(yán)格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作按協(xié)議進(jìn)行。操作協(xié)議為:初使化DS18B20(發(fā)復(fù)位脈沖)-發(fā) ROM功能命令-發(fā)存儲器操作命令-處理數(shù)據(jù)。VCCo圖4 DS18B20與單片機(jī)的接口電路GND3.5.2 DS18B20 時序DS18B20的復(fù)位時序匸主機(jī)發(fā)岀復(fù)位林沖f J主機(jī)接收顱苗最規(guī)時間最小值,480U* 咗s VDS18B20發(fā)從 VIDGND “應(yīng)餡脈沖松3BusTDS18B20的讀時序?qū)τ贒S18B20的讀時序分為

33、讀0時序和讀1時序兩個過程。對于DS18B20的讀時隙是從主機(jī)把單總線拉低之后,在15秒之內(nèi)就得釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完成。DS18B20的寫時序?qū)τ贒S18B20的寫時序仍然分為寫 0時序和寫1時序兩個過程。對于DS18B20寫0時序和寫1時序的要求不同,當(dāng)要寫 0時序時,單總線要被拉低至少 60us,保證DS18B20能 夠在15us到45us之間能夠正確地采樣10總線上的“ 0”電平,當(dāng)要寫1時序時,單總線被拉低之后,在 15us之內(nèi) 就得釋放單總線。cra?i HJtU.如總Ous4系統(tǒng)硬件設(shè)計所需的

34、器材13 / 35AT89S51單片機(jī)1個液晶顯示器1個DS1302 1 個DS18B20 個電阻1 K的2個、4.7K的2個4.7歐排阻8550三極管晶振12M的一個32768K的一個電容(30P的兩個)LED二極管1個22卩f電容1個輕觸開關(guān)5個5系統(tǒng)軟件總體設(shè)計系統(tǒng)的軟件設(shè)計采用匯編語言,對單片機(jī)進(jìn)行編程實現(xiàn)各項功能。程序在WindowsXP環(huán)境下采用Keil軟件編寫 軟件控制程序主要有主控程序、電子時鐘的時間控制程序h和溫度顯示程序組成。主控程序中對整個程序進(jìn)行控制,進(jìn)行了初始化程序還有鍵盤功能程序、以及顯示程序和時間控制程序是電子時鐘中比較重要的部分。時間控制程序 體現(xiàn)了年、月、日、

35、時、分、秒的計算方法。6主程序流程圖圖16主流程框圖Fig.16 The processflow chart源程序/III/使用說明:按si進(jìn)入日期設(shè)置;進(jìn)入設(shè)置后進(jìn)行光標(biāo)左移;/按s2進(jìn)入時間設(shè)置;設(shè)置完成后進(jìn)行確認(rèn);按S3進(jìn)行減;按s4進(jìn)行加;/#includevreg52.h#define uint unsigned int#define uchar unsigned char/sbit rw = P2A6;/sbit rs = P2A5;/ 1602 IO 口位定義sbit en = 口2人7;/sbit rst = P3A5; /sbit sclk = P3A6;/1302 IO 口

36、位定義sbit io = P3A4;/sbit keyl = P1A0;/sbit key2 = 口1人1;獨立按鍵位定義sbit key3 = 口1人2;sbit key4 = PIA3;/sbit DQ = P2A2;/uchar tempL=0; 臨時變量低位uchar tempH=0; /臨時變量高位uint temperature;uint hour, minute, second, year, month, day;uint key = 0;uchar tab_num = 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,

37、0x2d; / 對應(yīng)字符為:0 1 uchar tab_time = 1,2,10,3,4,10,5,6;uchar tab_date| = 2,0,1,0,11,0,9,11,2,7;/延時函數(shù),延時 z毫秒*void delay(uint z)uint x, y;for(x=0;xvz;x+)for(y=0;yv110;y+);/*/* 函數(shù)功能:延時子程序入口參數(shù):k出口參數(shù):*/void dela y佃 b20(unsigned int k)unsigned int n;n=0;while(n v k)n+;return;/*函數(shù)功能:DS18B20初始化子程序入口參數(shù):出口參數(shù):*l

38、nit_DS 佃B20(void)unsigned char x=0;DQ=1; DQ先置高delay佃b20(8); / 延時DQ=0; II發(fā)送復(fù)位脈沖delay佃b20(85); II 延時(480ms)DQ=1; II拉高數(shù)據(jù)線delay佃b20(14); II 等待(1560ms)I*函數(shù)功能:向DS18B20讀一字節(jié)數(shù)據(jù)入口參數(shù):出口參數(shù):dat*IReadOneChar(void)unsigned char i=0;unsigned char dat=0;for (i=8;i0;i-)DQ=1;delay18b20(1);DQ=0;dat=1;DQ=1;if(DQ)dat|=0x

39、80;delay18b20(4);return(dat);/*函數(shù)功能:向DS18B20寫一字節(jié)數(shù)據(jù)入口參數(shù):dat出口參數(shù):*/WriteOneChar(unsigned char dat)unsigned char i=0;for(i=8;i0;i-)18 / 35DQ=dat&OxO1;delay18b20(5);DQ=1;dat=1;delay18b20(4);/*函數(shù)功能:向DS18B20讀溫度值入口參數(shù):出口參數(shù):temperature*/uint ReadTemperature(void)lnit_DS佃B20(); / 初始化WriteOneChar(Oxcc); /跳過讀序列

40、號的操作WriteOneChar(Ox44); / 啟動溫度轉(zhuǎn)換delay18b20(125); /轉(zhuǎn)換需要一點時間,延時Init_DS佃B20(); / 初始化WriteOneChar(Oxcc); /跳過讀序列號的操作WriteOneChar(Oxbe); /讀溫度寄存器(頭兩個值分別為溫度的低位和高位)tempL=ReadOneChar(); / 讀出溫度的低位 LSBtempH=ReadOneChar(); / 讀出溫度的高位 MSB /溫度轉(zhuǎn)換,把高低位做相應(yīng)的運算轉(zhuǎn)化為實際溫度temperature=(tempH*256)+tempL)*5/8;delay 佃b20(200); r

41、eturn(temperature);=1302 寫一個字節(jié)=void write_byte(uchar dat)uchar i, dat_w;dat_w = dat;for(i=0;iv8;i+)io = 0;if(dat_w & 0x01)io = 1;elseio = 0;dat_w = dat_w 1;scik = 0;scik = 1;scik = 0;/=/=1302 讀一個字節(jié)=uchar read_byte()uchar i, k;k = 0;for(i=0;i 1;if(io)k = k|0x80;scik = 1;scik = 0;return (k); /=1302把數(shù)據(jù)

42、寫入地址= void write_add(uchar add, uchar dat) rst = 0;sclk = 0;rst = 1;write_byte(add);write_byte(dat / 10 4) | (dat % 10); sclk = 0;rst = 0; /=1302從地址讀出數(shù)據(jù)= uchar read_add(uchar add)uchar temp, datl, dat2;rst = 0;sclk = 0;rst = 1;write_byte(add);temp = read_byte();sclk = 0;rst = 0;dat1 = temp / 16;dat2

43、 = temp % 16;temp = dat1 * 10 + dat2;return (temp); /=1302 時間初始化= void ds1302_init()write_add(0x8e,0x00);/打開寫保護(hù),寫入時間;write_add(0x80,50);初始化-秒50;write_add(0x82,59);初始化-分59;write_add(0x84,23);/初始化-時23;write_add(0x86,31);初始化-日31;write_add(0x88,12);/初始化-月12;write_add(0x8c,10); write_add(0x8e,0x80); /初始化

44、-年2010;II關(guān)閉寫保護(hù),禁止寫入/:/1302讀出時間void ds1302()write_add(0x8e,0x00);second = read_add(0x81);打開寫保護(hù),/從1302讀出時間讀出時間;-秒;minute = read_add(0x83);hour=read_add(0x85);/從1302讀出時間/從1302讀出時間-分;-時;day=read_add(0x87);month=read_add(0x89);year=read_add(0x8d);/從1302讀出時間-日;/從1302讀出時間/從1302讀出時間-月;-年;write_add(0x8e,0x80);/關(guān)閉寫保護(hù),禁止讀出;/ 寫命令函*void write_com(uchar com) rs = 0;rw = 0;en = 0;delay(5);P0 = com;d

溫馨提示

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

評論

0/150

提交評論