畢業(yè)設計---基于單片機萬年歷的設計_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  基于單片機萬年歷的設計</p><p>  畢業(yè)設計項目: 基于單片機萬年歷的設計 </p><p>  專 業(yè): 計 算 機 應 用 技 術 </p><p>  年 級: </p><p>  學

2、 號: </p><p>  姓 名: </p><p>  指 導 老 師: </p><p><b>  摘 要</b>

3、;</p><p>  本文借助電路仿真軟件Protues對基于AT89S51單片機的電子萬年歷的設計方法及仿真進行了全面的闡述。該電子萬年歷在硬件方面主要采用AT89C51單片機作為主控核心,由DS1302時鐘芯片提供時鐘、1602LCM點陣液晶顯示屏顯示。AT89C51單片機是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電;DS1302時鐘芯片是美國DALLAS公司推出的具有涓細電流充電功能的低功

4、耗實時時鐘芯片,它可以對年、月、日、星期、時、分、秒進行計時,還具有閏年補償等多種功能,而且DS1302的使用壽命長,誤差??;數字顯示是采用的LED液晶顯示屏來顯示,可以同時顯示年、月、日、星期、時、分、秒等信息。此外,該電子萬年歷還具有時間校準等功能。在軟件方面,主要包括日歷程序、時間調整程序,顯示程序等。所有程序編寫完成后,在Keil軟件中進行調試,確定沒有問題后,在Proteus軟件中嵌入單片機內進行仿真。</p>

5、<p>  論文主要研究了液晶顯示器LCM及時鐘芯片DS1302,溫度傳感器DS18B20與單片機之間的硬件互聯及通信,對數種硬件連接方案進行了詳盡的比較,在軟件方面對日歷算法也進行了論述。</p><p>  研究結果表明,由于萬年歷的應用相當普遍,所以其設計的核心在于硬件成本的節(jié)約軟件算法的優(yōu)化,力求做到物美價廉,才能擁有更廣闊的市場前景。</p><p>  關鍵詞:單片機

6、;DS1302;DS18B20;LCM1602</p><p><b>  Abstract</b></p><p>  This paper mainly discuss the design and simulation of electronic calender based on AT89S51 with the help of Protues.On the

7、hardware side, the electronic calendar using AT89C51 microcontroller as the main control center, clock provided by the DS1302 clock chip , 1602LED dot matrix LCD display.Atmel Corporation AT89C51 microcontroller is produ

8、cted by Atmel Corporation, low power consumption, voltage can be selected 4V~ 6V voltage power supply; DS1302 clock chip, launched in the United States with</p><p>  This article focus on liquid crystal scre

9、en LCM1602 and clock chip DS1302,temperature sensor DS18B20 which connected and communicated with Microcontroller.Several solutions will also compared with each other.On software side,calender calculation will be discuss

10、ed as well.</p><p>  The results are as follows:as electronic calender are widely used in our daily life.It should</p><p>  be chip and convenient so as to win more profit. </p><p&g

11、t;  Keywords:Microcontroller,DS1302;DS18B20;LCD1602</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p><b>  緒論1</b&

12、gt;</p><p>  第一章 方案設計2</p><p>  第一節(jié) 系統基本方案選擇和論證2</p><p>  1.1 單片機芯片的選擇2</p><p>  1.2 顯示模塊選擇方案和論證2</p><p>  1.3 時鐘芯片的選擇方案和論證2</p><p> ?。?

13、4 溫度傳感器的選擇方案與論證3</p><p>  第二節(jié) 電路設計最終方案決定3</p><p>  第二章 系統的硬件設計與實現4</p><p>  第一節(jié) 電路設計框圖4</p><p>  第二節(jié) 系統硬件概述4</p><p>  第三節(jié) 主要單元電路的設計5</p><p

14、>  3.1 AT89S51單片機主控制模塊的設計5</p><p>  3.2 單片機中斷系統7</p><p>  3.3時鐘電路模塊的設計9</p><p>  3.4溫度采集模塊設計10</p><p>  3.5 顯示模塊的設計11</p><p>  3.6 DS1302原理及說明11&l

15、t;/p><p>  3.7 LCM1602工作原理及說明14</p><p>  3.8 系統仿真電路14</p><p>  第三章 系統的軟件設計16</p><p>  第一節(jié) 程序流程框圖16</p><p>  第二節(jié) 子程序18</p><p>  第四章 系統測試19&l

16、t;/p><p>  4.1 硬件測試19</p><p>  4.2 軟件測試19</p><p><b>  結束語20</b></p><p><b>  致謝21</b></p><p><b>  參考文獻22</b></p>

17、<p><b>  附錄:程序24</b></p><p><b>  緒論</b></p><p>  隨著社會、科技的發(fā)展,人類得知時間,從觀太陽、擺鐘到現在電子鐘,不斷研究、創(chuàng)新。為了在觀測時間的同時,能夠了解其它與人類密切相關的信息,比如溫度、星期、日期等,電子萬年歷誕生了,它集時間、日期、星期和溫度功能于一身,具有讀取方

18、便、顯示直觀、功能多樣、電路簡潔等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢。伴隨著電子技術的迅速發(fā)展,特別是隨大規(guī)模集成電路出現,給人類生活帶來了根本性的改變。由其是單片機技術的應用產品已經走進了千家萬戶。電子萬年歷的出現給人們的生活帶來的諸多方便,作為一種附加功能,現在越來越廣泛的被應用于各種電子產品中,具有廣闊的市場前景。</p><p>  通過以往對工業(yè)自動化的相關課程學習和理解獨立完成制作電子萬年歷的設計。

19、電子萬年歷作為電子類小產品不僅是市場上的寵兒,也是是單片機設計培訓中一個很實用的題目。因為這個課題有很好的開放性和可發(fā)揮性,對制作者的要求比較高,不僅考察了對單片機的掌握能力更加強調了對單片機擴展的應用。而且要求設計的電子萬年歷在操作上力求簡潔,功能上盡量齊全,顯示界面也要出色。所以,電子萬年歷制作無論從實用目的,還是從培養(yǎng)能力的角度來看都是很有價值的畢業(yè)設計課題。本電子萬年歷的設計在硬件方面主要采用AT89S51單片機作為主控核心,由

20、DS1302時鐘芯片提供時鐘、1602LCM點陣液晶顯示屏顯示。AT89S51單片機是由Atmel公司推出的,功耗小,電壓可選用4~6V電壓供電[1];DS1302時鐘芯片是美國DALLAS公司推出的具有涓細電流充電功能的低功耗實時時鐘芯片,它可以對年、月、日、星期、時、分、秒進行計時,還具有閏年補償等多種功能,而且DS1302的使用壽命長,誤差??;數字顯示是采用的LED液晶顯示屏來顯示,可以同時顯示年、月、日、星期、時、分、秒等信息。

21、此外,該電子萬年歷還具有時間校準等功能。在軟件方面</p><p><b>  第一章 方案設計</b></p><p>  第一節(jié) 系統基本方案選擇和論證</p><p>  1.1 單片機芯片的選擇</p><p>  本設計采用AT89S51芯片作為硬件核心,該芯片采用Flash ROM,內部具有4KB ROM存儲

22、空間,相對于本設計而言程序空間完全夠用。能于3V的超低壓工作,而且與MCS-51系列單片機完全兼容,而且運用于電路設計中時具備ISP在線編程技術,當在對電路進行調試時,由于程序的錯誤修改或對程序的新增功能需要燒入程序時,避免芯片的多次拔插對芯片造成的損壞。</p><p>  1.2 顯示模塊選擇方案和論證</p><p><b>  方案一:</b></p&g

23、t;<p>  采用點陣式數碼管顯示,點陣式數碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示。</p><p><b>  方案二:</b></p><p>  采用LED數碼管動態(tài)掃描,LED數碼管價格雖適中,對于顯示數字也最合適,而且采用動態(tài)掃描法與單片機連接時,占用的單片

24、機口線少。但是由于數碼管動態(tài)掃描需要借助74LS164移位寄存器進行移位,該芯片在電路調試時往往會有很多障礙,所以不采用LED數碼管作為顯示[2]。</p><p><b>  方案三:</b></p><p>  采用LCD液晶顯示屏,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見[3],對于電子萬年歷而言,一個1602的液晶屏即可,價格也還能接

25、受,需要的接口線較多,但會給調試帶來諸多方便,所以此設計中采用LCD1602液晶顯示屏作為顯示模塊。</p><p>  1.3 時鐘芯片的選擇方案和論證</p><p><b>  方案一:</b></p><p>  直接采用單片機定時計數器提供秒信號,使用程序實現年、月、日、星期、時、分、秒計數。采用此種方案雖然可以減少時鐘芯片的使用,

26、節(jié)約成本,但是,實現的時間誤差較大。所以不采用此方案。</p><p><b>  方案二:</b></p><p>  采用DS1302時鐘芯片實現時鐘,DS130是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可

27、采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數據。DS1302內部有一個31×8的用于臨時性存放數據的RAM寄存器。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。主要特點是采用串行數據傳輸,可為掉電保護電源提供可編程的充電功能,并且可以關閉充電功能。采用普通32.768kHz晶振[4]。因此,本設計中采用DS1302提供時鐘。<

28、/p><p> ?。?4 溫度傳感器的選擇方案與論證</p><p><b>  方案一:</b></p><p>  使用熱敏電阻作為傳感器,用熱敏電阻與一個相應阻值電阻相串聯分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個電阻變化的分壓值,并進行A/D轉換。此設計方案需用A/D轉換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴格線

29、性的,會產生較大的測量誤差[5]。</p><p><b>  方案二:</b></p><p>  采用數字式溫度傳感器DS18B20,此類傳感器為數字式傳感器而且僅需要一條數據線進行數據傳輸,易于與單片機連接,可以避免A/D模數轉換模塊,降低硬件成本,簡化系統電路[6]。另外,數字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點。因此,本設計DS18B20溫度傳感器

30、作為溫度采集模塊。</p><p>  第二節(jié) 電路設計最終方案決定</p><p>  綜上各模塊的選擇方案與論證,確定最后的主要硬件資源如下:采用AT89S51作為主控制系統;DS1302提供時鐘;DS18B20作為數字式溫度傳感器;LCD1602液晶屏作為顯示。</p><p>  第二章 系統的硬件設計與實現</p><p>  第一

31、節(jié) 電路設計框圖</p><p>  本系統的電路系統框圖如圖1所示。AT89S51單片機對DS1302和DS18B20寫入控制字并讀取相應的數據,繼而控制LCM1602作出對應的顯示。</p><p><b>  圖1 系統硬件框圖</b></p><p>  第二節(jié) 系統硬件概述</p><p>  本電路是由AT8

32、9S51單片機作為控制核心,能在3V超低壓工作,AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4kBytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌

33、入式控制應用系統提供高性價比的解決方案;時鐘電路由DS1302提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數據。DS1302內部有一個31*8的用于臨時性存放數據的RAM寄存器。可產生年、月、日、周、時、分、秒,具有使用壽命長,精度高和低功耗等特點,同時

34、具有掉電自動保存功能;溫度的采集由DS18B20完成,它具有獨特的單線接口方式,DS18B20在與微處理</p><p>  第三節(jié) 主要單元電路的設計</p><p>  3.1 AT89S51單片機主控制模塊的設計</p><p>  AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmab

35、le)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應用系統提供高性價比的解決方案。AT89S51具有如下特點:40個引腳,4kBytes Flash片內程序存儲器,128Bytes的隨機存取數據存儲器(RAM),32

36、個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數器,2個全雙工串行通信口,看門狗(WDT)電路,片內時鐘振蕩器。此外,AT89S51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續(xù)工作,掉電模式凍結振蕩器而保存RAM的數據,停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC<

37、/p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器

38、能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出

39、電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優(yōu)勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 </p><p>  P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后

40、,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  I/O口作為輸入口時有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時實際上并不從外部讀入數據,而是把端口鎖存器的內容讀入到內部總線,經過某種運算或變換后再寫回到端口鎖存器。只有讀端口時才真正地把外部的數據讀入到內部總線。輸入緩沖器CPU將根據不同的指令分別發(fā)出讀端口或讀引腳信號

41、以完成不同的操作。這是由硬件自動完成的,不需要我們操心,1然后再實行讀引腳操作,否則就可能讀入出錯,如果不對端口置1,端口鎖存器原來的狀態(tài)有可能為0Q端為0Q^為1加到場效應管柵極的信號為1,該場效應管就導通對地呈現低阻抗,此時即使引腳上輸入的信號為1,也會因端口的低阻抗而使信號變低使得外加的1信號讀入后不一定是1。若先執(zhí)行置1操作,則可以使場效應管截止引腳信號直接加到三態(tài)緩沖器中實現正確的讀入,由于在輸入操作時還必須附加一個準備動作,

42、所以這類I/O口被稱為準雙向口。89C51的P0/P1/P2/P3口作為輸入時都是準雙向口。</p><p>  單片機的最小系統如圖2所示:18引腳和19引腳接時鐘電路,XTAL1接外部晶振和微調電容的一端,在片內它是振蕩器倒相放大器的輸入,XTAL2接外部晶振和微調電容的另一端,在片內它是振蕩器倒相放大器的輸出.第9引腳為復位輸入端,接上電容,電阻及開關后夠上電復位電路,20引腳為接地端,40引腳為電源端.單

43、片機的最小系統如下圖所示:圖2中的晶振頻率為12MHz,復位方式為上電自動復位[8]-[9]。</p><p>  圖2 單片機最小系統</p><p>  3.2 單片機中斷系統</p><p>  在提及單片機的最小系統后,現對單片機的另一重要應用系統即中斷系統做一個比較詳細的介紹。</p><p>  在CPU 與外設交換信息時,存在著

44、一個快速CPU與慢速的外設之間的矛盾。為解決這個問題,發(fā)展了中斷的概念。單片機在某一時刻只能處理一個任務,當多個任務同時要求單片機處理時,這一要求應該怎么實現呢?通過中斷可以實現多個任務的資源共享。所謂的中斷就是,當CPU正在處理某項事務的時候,如果外界或者內部發(fā)生了緊急事件,要求CPU暫停正在處理工作而去處理這個緊急事件,待處理完后,再回到原來中斷的地方,繼續(xù)執(zhí)行原來被中斷的程序,這個過程稱作中斷。 </p><p

45、>  從中斷的定義我們可以看到中斷應具備中斷源、中斷響應、中斷返回這樣三個要素。中斷源發(fā)出中斷請求,單片機對中斷請求進行響應,當中斷響應完成后應進行中斷返回,返回被中斷的地方繼續(xù)執(zhí)行原來被中斷的程序。MCS-51單片機的中斷源共有兩類,它們分別是:外部中斷和內部中斷。外部中斷0(INT0)來自P3.2引腳,通過外部中斷0觸發(fā)方式控制位IT0(TCON.0),來決定中斷輸入信號是低電平有效還是負跳變有效。一旦輸入信號有效,便使IE0

46、標志置一,向CPU申請中斷;外部中斷1(INT1)來自P3.3引腳,通過外部中斷1觸發(fā)方式控制位IT1(TCON.2),來決定中斷輸入信號是低電平有效還是負跳變有效。一旦輸入信號有效,便使IE0標志置一,向CPU申請中斷。內部中斷有三個:TF0,TF1,RI或TI。TF0(TCON.5),片內定時/計數器T0溢出中斷請求標志。當定時/計數器T0發(fā)生溢出時,置位TF0,并向CPU申請中斷;TF1(TCON.7),片內定時/計數器T1溢出中

47、斷請求標志。當定時/計數器T1發(fā)生溢出時,置位TF1,并向CPU申請中斷;RI(SCON.0)或TI(SCON.1),串行口中斷請求</p><p>  MCS-51單片機為用戶提供了四個專用寄存器,來控制單片機的中斷系統。定時器控制寄存器(TCON),該寄存器用于保存外部中斷請求以及定時器的計數溢出。進行字節(jié)操作時,寄存器地址為88H。按位操作時,各位的地址為88H~8FH,當CPU采樣到INT0(或INT1)

48、端出現有效中斷請求時,IE0(IE1)位由硬件置“1”。當中斷響應完成轉向中斷服務程序時,由硬件把IE0(或IE1)清零, 當計數器產生計數溢出時,相應的溢出標志位由硬件置“1”。當轉向中斷服務時,再由硬件自動清“0”。計數溢出標志位的使用有兩種情況:采用中斷方式時,作中斷請求標志位來使用;采用查詢方式時,作查詢狀態(tài)位來使用;串行口控制寄存器(SCON),進行字節(jié)操作時,寄存器地址為98H。按位操作時,各位的地址為98H~9FH,當發(fā)送

49、完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,用軟件清“0”,當接收完一幀串行數據后,由硬件置“1”;在轉向中斷服務程序后,用軟件清“0”。串行中斷請求由TI和RI的邏輯或得到。就是說,無論是發(fā)送標志還是接收標志,都會產生串行中斷請求;中斷允許控制寄存器(IE),進行字節(jié)操作時,寄存器地</p><p>  MCS-51單片機復位后(IE)=00H,因此中斷系統處于禁止狀態(tài)。單片機在中斷響應后不會自動關

50、閉中斷。因此在轉中斷服務程序后,應根據需要使用有關指令禁止中斷,即以軟件方式關閉中斷。中斷優(yōu)先級控制寄存器(IP)MCS-51單片機的中斷優(yōu)先級控制比較簡單,因為系統只定義了高、低2個優(yōu)先級。高優(yōu)先級用“1”表示,低優(yōu)先級用“0”表示。各中斷源的優(yōu)先級由中斷優(yōu)先級寄存器(IP)進行設定。IP寄存器地址0B8H,位地址為0BFH~0B8H。</p><p>  3.3時鐘電路模塊的設計</p><

51、;p>  DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘芯片,它可以對年、月、日、周、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數據。DS1302內部有一個31×8的用于臨時性存放數據的RAM寄存器。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后背電

52、源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力[11]。</p><p>  DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關閉的情況下,也能保持時鐘的連續(xù)運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振

53、。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數據傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>2.0V之前,RST必須保持低電平。只有在SCLK為低電

54、平時,才能將RST置為高電平。I/O為串行數據輸入輸出端(雙向),SCLK為時鐘輸入端。DS1302的控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入DS1302中,位6如果為0,則表示存取日歷時鐘數據,為1表示存取</p><p>  圖3 DS1302與單片機的連接</p><p>  3.4溫度采集模塊設計</p><p>  采用數字式

55、溫度傳感器DS18B20,它是數字式溫度傳感器,具有測量精度高,電路連接簡單特點,此類傳感器僅需要一條數據線進行數據傳輸,使用P0.7與DS18B20的I/O口連接加一個上拉電阻,Vcc接電源,Vss接地。獨特的一線接口,只需要一條口線通信多點能力,簡化了分布式溫度傳感應用無需外部元件可用數據總線供電,電壓范圍為3.0V至5.5V無需備用電源 測量溫度范圍為-55度至+125度。-10度至+85度范圍內精度為±0.5度溫度傳感

56、器可編程的分辨率為9~12位[12]。DS18B20連線如圖4所示:</p><p>  圖4 DS18B20管腳連線</p><p>  3.5 顯示模塊的設計</p><p>  如下圖5所示,采用LCM1602液晶顯示器,單片機P1口作為數據輸出口,RS,R\W,E分別通過10K的上拉電阻連接到單片機的P0.0,P0.1,P0.2。VDD接5V電源,VSS接地

57、。VEE為液晶顯示器對比度調整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度)。RS為寄存器選擇,高電平1時選擇數據寄存器、低電平0時選擇指令寄存器。R/W為讀寫信號線,高電平(1)時進行讀操作,低電平(0)時進行寫操作。E(或EN)端為使能(enable)端,下降沿使能。DB0-DB7為雙向數據總線,同時最高位DB7也是忙信號檢測位。BLA、BLK分別為顯示器背光

58、燈的正、負極[13]。</p><p>  圖5 LCM1602與單片機的連接</p><p>  3.6 DS1302原理及說明 </p><p>  (1) 時鐘芯片DS1302的工作原理</p><p>  DS1302在每次進行讀、寫程序前都必須初始化,先把SCLK端置 “0”,接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫

59、時序如下圖7所示。圖6為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對DS1302進行讀寫數據。對于位6,若對程序進行讀/寫時RAM=1,對時間進行讀/寫時,CK=0。位1至位5指操作單元的地址。位0是讀/寫操作位,進行讀操作時,該位為1;該位為0則表示進行的是寫操作??刂谱止?jié)總是從最低位開始輸入/輸出的。表2為DS1302的日歷、時間寄存器內容:“CH”是時鐘暫停標志位,當該位為1時,時鐘振蕩器停止,DS1302處于低

60、功耗狀態(tài);當該位為0時,時鐘開始運行?!癢P”是寫保護位,在任何的對時鐘和RAM的寫操作之前,WP必須為0。當“WP”為1時,寫保護位防止對任一寄存器的寫操作。</p><p>  (2) DS1302的控制字</p><p>  DS1302的控制字如圖6所示??刂谱止?jié)的高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入DS1302中,位6如果0,則表示存取日歷時鐘數據,為1表示

61、存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。</p><p>  圖6 DS1302的控制字 </p><p>  (3) 數據輸入輸出</p>

62、<p>  在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7[14]。如下圖7所示:</p><p>  圖7 DS1302讀與寫的時序圖</p><p>  DS1302的寄存器</p><p>

63、;  DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式,其日歷、時間寄存器及其控制字見圖8。</p><p>  圖8 DS1302的日歷、時間寄存器 </p><p>  此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與RAM相關的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充

64、電寄存器外的所有寄存器內容。 DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數為讀操作,偶數為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節(jié),命令控制字為FEH(寫)、FFH(讀)。 </p><p>  3.7 LCM1602工作原理及說明</p><p>

65、;  (1)寄存器選擇控制</p><p>  1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經存儲了160個不同的點陣字符[15],圖形寄存器選擇控制表如表1所示:</p><p>  表1 1602寄存器選擇控制表 </p><p><b>  (2)指令集

66、</b></p><p>  1602通過D0~D7的8位數據端傳輸數據和指令。顯示模式設置(初始化)00111000[0x38]設置16×2顯示,5×7點陣,8位數據接口;顯示開關及光標設置:(初始化) 00001DCBD顯示(1有效)、C光標顯示(1有效)、B光標閃爍(1有效)。000001NS N=1(讀或寫一個字符后地址指針加1并且光標加1),N=0(讀或寫一個字符后地址指

67、針減1并且光標減1),S=1且N=1(當寫一個字符后,整屏顯示左移),S=0當寫一個字符后,整屏顯示不移動。數據指針設置:數據首地址為80H,所以數據地址為80H+地址碼(0-27H,40-67H)。其他設置:01H(顯示清屏,數據指針=0,所有顯示=0);02H(顯示回車,數據指針=0)[16]。</p><p>  3.8 系統仿真電路</p><p>  本次仿真使用軟件Protue

68、s7.0,該軟件元件庫豐富,元件封裝要求相對簡單且參數調整方便,除此之外,程序還可進行動態(tài)調試。系統仿真截圖如圖9所示:</p><p>  圖9 系統仿真電路圖</p><p>  如圖,左上角為顯示模塊LCM1602,U1是時鐘芯片DS1302,U2是主控模塊AT89C51,U3為溫度傳感器DS18B20,右下角是鍵盤控制模塊。第三章 系統的軟件設計</p><p&

69、gt;  第一節(jié) 程序流程框圖</p><p>  圖10 主程序流程圖</p><p>  主程序流程圖如上圖10所示。由于LCM1602,DS18B20,DS1302的數據讀取及指令寫入函數均已在各自的頭文件中完成,在主程序中只須引用即可。</p><p>  由于在硬件電路方面上設計了時間調整按鍵和開關,因此應有對應的時間調整程序。時間調整程序的流程圖如圖11

70、所示。</p><p>  圖11 時間調整程序流程圖</p><p><b>  第二節(jié) 子程序</b></p><p>  由于本系統程序涉及的可編程器件有LCM1602,DS18B20以及DS1302,各芯片的控制字及數據讀寫如果混雜,將會使程序可讀性大大降低,因此采用子程序的方法進行調用并將其封裝于各自的頭文件中。詳盡的程序設計見附錄。

71、</p><p><b>  第四章 系統測試</b></p><p><b>  4.1 硬件測試</b></p><p>  在Protues仿真結束后,于焊接板上完成了硬件組裝。在調試硬件時遇到過很多問題,但只要細心、認真檢查這些問題都是可以避免的,主要問題及解決辦法現列如下:</p><p>

72、;  接通電源后LCM1602沒有正確的顯示。在不通電狀態(tài)下用萬用表檢測電路是否正常連接,在檢查回路時發(fā)現有的點之間看似連接,但由于虛焊導致其并無電氣連接,只能對焊腳進行在加工直到解決問題。</p><p>  電路工作一段時間之后有的芯片發(fā)熱嚴重。經查發(fā)現原來是有尖銳的管腳刺破鄰近的漆包線造成短路,斷掉該線并再次連接可解決問題。</p><p><b>  4.2 軟件測試 &

73、lt;/b></p><p>  由于本系統涉及到多個子程序,多個芯片的編程。首先必須對可編程芯片的控制字即其控制指令要熟記于心。其次,芯片很多都有時鐘輸入端,需要晶振支持。對芯片的讀寫都需要在相應的觸發(fā)沿到來時才能進行。由于DS18B20是串行通信數據,只用一個口線傳輸,在處理采集的模擬信號時需要一定的時間,會對延時有較高要求。所以在調用溫度子程序時,先關閉定時器1中斷允許,在溫度子程序反回時再打開定時器

74、1中斷允許。</p><p><b>  結束語</b></p><p>  以上所述即是電子萬年歷的設計全過程,經過多次的反復測試與分析,對電路的原理及功能更加熟悉,同時提高了設計能力與及對電路的分析能力.經過此設計,基本完成了設計任務的要求。硬件層面而言操作相對簡單,界面比較友好。</p><p>  在硬件電路方面,詳盡解析了各個獨立元件

75、的選擇依據,對數種方案進行了全面的比較。在時鐘芯片的選擇上,若直接采用單片機定時計數器提供秒信號,使用程序實現年、月、日、星期、時、分、秒計數。采用此種方案雖然可以減少時鐘芯片的使用,節(jié)約成本,但是,實現的時間誤差較大。因此采用專業(yè)的時鐘芯片DS1302,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,主要特點是采用串行數據傳輸,可為掉電保護電源提供可編程的充電功能;在顯示模塊的選擇上,若采用LED數碼管動態(tài)掃描,LED

76、數碼管價格雖適中,對于顯示數字也最合適,而且采用動態(tài)掃描法與單片機連接時,占用的單片機口線少。但是由于數碼管動態(tài)掃描需要借助74LS164移位寄存器進行移位,該芯片在電路調試時往往會有很多障礙,因此本次設計選擇了LCM1602,液晶顯示屏的顯示功能強大,可顯示大量文字,圖形,顯示多樣,清晰可見;在溫度采集模塊的選擇上,沒有采用熱敏電阻,因為設計方案需用A/D轉換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴格線性的,會產生較大的測

77、量誤差。最后選擇了DS18B20,此類傳感器為數字式傳感器而且僅需要一條數據線進行</p><p>  在軟件設計方面,對日歷算法和時間調整算法都做了比較詳細的闡述,可讀性較強。</p><p>  美中不足的是并沒有給出與陽歷同步的陰歷算法,久經思索卻終究未能達成。</p><p>  綜上所述,本設計雖然實現了電子萬年歷的功能,但在硬件的選擇上應該更優(yōu)化,使成本

78、更低;在軟件方面也需要完善,一個真正實用的萬年歷應該具有計算陰歷歷法的功能。</p><p><b>  致謝</b></p><p>  在***學院的三年學習時間即將過去,三年時間并不算長,但對我而言,是磨礪青春、揮灑書生意氣的三年,也是承受師恩、增長才干、提高學識的三年。我將以積極的面貌重新投入到火熱的工作和事業(yè)中。在此,謹對培育我的母校、教導我的老師、幫助我的

79、同學們致予最誠摯的謝意和敬意。 </p><p>  這次課程設計,我一直很努力地去做,過程中得到了老師的悉心指導和同學們大力</p><p>  熱心幫助,并對我的設計提出許多有益的建議,在此對他們表示衷心的感謝。同時也要感謝學校能給我這次機會去嘗試自己設計一些東西,使自己所學專業(yè)知識與實踐相結合。最后也要感謝有關我參考過的文獻的作者,是他們?yōu)槲姨峁┲R的源泉,使我最終能順利地完成這次課

80、程設計。</p><p>  在畢業(yè)之際,我衷心地同學和朋友們在以后的人生道路上越走越寬廣,也深深相信在未來的日子里我們將一路攜手前行,會遇到很多的碰撞和交流,我們將始終記得我們曾在三門峽職業(yè)技術學院同窗學習,這將是我克服困難、不斷前進的精神動力。</p><p><b>  參考文獻</b></p><p>  [1]胡乾斌,李光斌,李玲,喻

81、紅.單片微型計算機原理與應用.華中科技大學出版社,1996.</p><p>  [2]劉勇.數字電路.電子工業(yè)出版社,2004.</p><p>  [3]陳正振.電子電路設計與制作.廣西交通職業(yè)技術學院信息工程系,2007.</p><p>  [4]楊子文.單片機原理及應用.西安電子科技大學出版社,2006.</p><p>  [5]

82、王萍.電子技術實驗教程.機械工業(yè)出版社,2009.</p><p>  [6]沈紅衛(wèi).單片機應用系統設計實例與分析,北京:北京航空航天大學出版社.2003</p><p>  [7]李光飛.單片機課程設計實例指導,北京:北京航空航天大學出版社. 2004</p><p>  [8]王法能.單片機原理及應用,科學出版社. 2004</p><p&g

83、t;  [9]樓然苗,李光飛.51系列單片機設計實例[M].北京航空航天大學出版社,2003.</p><p>  [10]朱定華,戴汝平.單片微機原理與應用[M].清華大學出版社,2003.</p><p>  [11]胡漢才.單片機原理與接口技術[M].清華大學出版社,2004.</p><p>  [12]余家春.Protel 99 SE電路設計實用教程[M]

84、.中國鐵道出版社,2004.</p><p>  [13]張培仁.基于匯編語言編程MCS-51單片機原理與應用.北京:清華大學出版社,2003.</p><p>  [14]T.Someya,J.Small,P.Kim,C.Nuckolls,J.T.Yardley.Alcohol vapor sensors</p><p>  based on single-wal

85、led carbon nanotube field effect transistors[M].Nano Letters,2003.</p><p>  [15]M.Penza et al.Alcohol detection using carbon nanotubes acoustic and optical </p><p>  sensors[M].Applied Physics L

86、etters,2004.</p><p>  [16]F.Rettig,R.Moos.Direct thermoelectric gas sensors Design aspects and first gas </p><p>  sensors[M].Sens Actuators B,2007.</p><p><b>  附錄:程序</b>

87、;</p><p><b>  主程序:</b></p><p>  #include<reg52.h></p><p>  #include"lcd1602.h"</p><p>  #include"ds1302.h"</p><p>  #

88、include"ds18b20.h"</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uint b[6];</p><p>  //年、月、日、時、分、秒</p><p>  uc

89、har code row1[]={"2009-01-01"};</p><p>  uchar code row2[]={"00:00:00"};</p><p>  uchar year1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年</p><p>  uchar year2

90、[12]={31,29,31,30,31,30,31,31,30,31,30,31};//潤年</p><p>  uchar j[6]={0x85,0x88,0x8b,0x84+0x40,0x87+0x40,0x8a+0x40};//LCD地址</p><p>  uchar i,k,jj=0,w,clock=0,bigclock=0,c=0,num;</p><p&

91、gt;  //i循環(huán)數,k溫度緩存,jj地址位</p><p>  uint temp;</p><p>  sbit b1=P3^0;//設置</p><p>  sbit b2=P3^1;//上調</p><p>  sbit b3=P3^2;//下調</p><p>  sbit b4=P3^3;//轉換<

92、/p><p>  sbit b5=P3^4;//鬧鐘</p><p>  sbit speaker=P3^5;</p><p><b>  lcdscan()</b></p><p>  {for(i=0;i<6;i++)</p><p>  { lcdwrite(j[i]);</p&

93、gt;<p>  lcdshuju(a[11-i*2]+0x30);</p><p>  lcdwrite(j[i]+0x01);</p><p>  lcdshuju(a[10-i*2]+0x30);</p><p><b>  }</b></p><p><b>  }</b>&l

94、t;/p><p>  void key()</p><p>  {if(b1==0)</p><p>  { dsaddshuju(0x80,(a[1]<<4)+a[0]+0x80);</p><p>  while(b1==0)</p><p><b>  {</b></p&

95、gt;<p>  for(i=0;i<6;i++)</p><p>  {b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];}</p><p><b>  if(b4==0)</b></p><p>  { delay(3);</p><p><b>  jj

96、++;</b></p><p><b>  if(jj==6)</b></p><p><b>  {jj=0;}</b></p><p><b>  }</b></p><p><b>  if(b2==0)</b></p>&

97、lt;p>  {delay(3);</p><p><b>  b[jj]++;</b></p><p>  if(b[5]==60)b[5]=0;</p><p>  if(b[4]==60)b[4]=0;</p><p>  if(b[3]==24)b[3]=0;</p><p>  

98、if((b[0]%4==0&&b[0]%100!=0)||b[0]%400==0){if(b[2]>year2[b[1]-1])b[2]=1;}</p><p>  else {if(b[2]>year1[b[1]-1])b[2]=1;}</p><p>  if(b[1]==13)b[1]=1;</p><p>  if(b[0]==1

99、00)b[0]=0;</p><p><b>  }</b></p><p><b>  if(b3==0)</b></p><p>  {delay(3);</p><p><b>  b[jj]--;</b></p><p>  if(b[5]

100、==-1)b[5]=59;</p><p>  if(b[4]==-1)b[4]=59;</p><p>  if(b[3]==-1)b[3]=23;</p><p>  if((b[0]%4==0&&b[0]%100!=0) || b[0]%400==0){if(b[2]<=0)b[2]=year2[b[1]-1];}</p>

101、<p>  else {if(b[2]<=0)b[2]=year1[b[1]-1];}</p><p>  if(b[1]==0)b[1]=12;</p><p>  if(b[0]==-1)b[0]=99;</p><p><b>  }</b></p><p>  for(i=0;i<6;i++

102、)</p><p>  { a[11-i*2+clock]=b[i]/10;</p><p>  a[10-i*2+clock]=b[i]%10;</p><p><b>  }</b></p><p>  lcdwrite(j[jj]);</p><p>  lcdshuju(0);<

103、/p><p>  lcdwrite(j[jj]+1);</p><p>  lcdshuju(0);</p><p>  delay(200);</p><p>  lcdwrite(j[jj]);</p><p>  lcdshuju(a[11-2*jj+clock]+0x30);</p><p>

104、;  lcdwrite(j[jj]+1);</p><p>  lcdshuju(a[10-2*jj+clock]+0x30);</p><p>  delay(200);</p><p><b>  if(b1==1)</b></p><p>  { dsaddshuju(0x80,(a[1]<<

105、4)+a[0]);</p><p><b>  dson();}</b></p><p>  if(b5==0)clock=12;}}}</p><p>  void main()</p><p>  {speaker=0;</p><p><b>  lcdrw=0;</b&

106、gt;</p><p><b>  dson();</b></p><p><b>  lcdon();</b></p><p>  lcdwrite(0x83);</p><p>  for(i=0;i<10;i++)</p><p>  {lcdshuju(row

107、1[i]);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p>  lcdwrite(0x84+0x40);</p><p>  for(i=0;i<8;i++)</p><p><b>  {&l

108、t;/b></p><p>  lcdshuju(row2[i]);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  dsrst=0;</b></p><p><b&

109、gt;  dssclk=0;</b></p><p><b>  while(1)</b></p><p>  {for(i=0;i<5;i++)</p><p>  {dsrst=1;</p><p>  dswrite(0x81+i*2);</p><p>  k=dsre

110、ad();</p><p><b>  dsrst=0;</b></p><p>  a[i*2]=k&0x0f;</p><p>  a[i*2+1]=(k>>4)&0x0f;</p><p><b>  }</b></p><p><

111、;b>  dsrst=1;</b></p><p>  dswrite(0x8d);</p><p>  k=dsread();</p><p><b>  dsrst=0;</b></p><p>  a[10]=k&0x0f;</p><p>  a[11]=(k&g

112、t;>4)&0x0f;</p><p>  delay(100);</p><p>  lcdscan();</p><p><b>  key();</b></p><p><b>  if(b5==0)</b></p><p>  {for(i=0;i

113、<12;i++)</p><p>  {if(a[i+12]==a[i])num++;}</p><p>  if(num==12)bigclock=1;</p><p>  else num=0;</p><p>  lcdwrite(0x8e);</p><p>  lcdshuju('&&

114、#39;);}</p><p><b>  else </b></p><p>  {lcdwrite(0x8e);</p><p>  lcdshuju(0x00);}</p><p>  if(bigclock==1)</p><p>  { speaker=1;</p>&

115、lt;p><b>  c++;</b></p><p>  if(c==100){bigclock=0;speaker=0;}</p><p><b>  }</b></p><p>  temp=readtemperature();//temp是uint型的。不然會出現溫度到25后回00的現象??赡苁怯捎谑M制與

溫馨提示

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

評論

0/150

提交評論