基于單片機的電子萬年歷_第1頁
基于單片機的電子萬年歷_第2頁
基于單片機的電子萬年歷_第3頁
基于單片機的電子萬年歷_第4頁
基于單片機的電子萬年歷_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

中文題目:基于單片機的電子萬年歷英文題目:TheElectronicCalendarBasedonSCM專業(yè)班級09電子信息工程2班提交日期2013-5-摘要隨著科學技術的不斷發(fā)展,人們的生活水平不斷提高,傳統(tǒng)的萬年歷已經不足以滿足人們的需求。隨著萬年歷的多功能化,社會上出現(xiàn)了各種各樣的電子萬年歷,其中,單片機的電子萬年歷有著巨大的市場潛力。本設計著重描述的就是基于AT89C52的單片機的電子萬年歷。本文首先論證各主要模塊芯片的選擇,隨后介紹了本系統(tǒng)所應用的各個接口模塊的主要功能及工作過程。本設計是通過軟硬件相結合來進行各模塊功能的實現(xiàn)。電子萬年歷以C語言為主體進行軟件編寫,使程序的可讀性和可移植性更高。系統(tǒng)通過DS18B20采集溫度信息、LCD1602小液晶顯示數(shù)據(jù),可以顯示當前日期、時間、星期、溫度,并附有以峰鳴器為提示的鬧鈴功能。關鍵詞單片機電子萬年歷日期接口模塊C語言

TheElectronicCalendarBasedonSCMAbstractWiththedevelopmentofscienceandtechnology,people'slivingstandardsimprove,thetraditionalcalendarhasbeeninsufficienttomeetpeople'sneeds.Asthecalendarbecomemultifunctional,allkindsofelectroniccalendarhasappearedinoursociety,especiallytheelectroniccalendar,whichisbasedonSCM,hasahugepotential.ThisdesignfocusesonthedescriptionoftheelectroniccalendarisbasedonAT89C52SCM.Thistextdemonstratestheselectionaboutthechipsofeachmainmodulesfirst,andthenintroducesmainfunctionsandworkingprocessofeachinterfacemodule,whichisapplytothesystem.Thisdesignisbyacombinationofhardwareandsoftwarerealizationofeachmodulefunction.TheelectroniccalendarusesClanguageasthemainprogram,inordertomaketheprogram'sreadabilityandportabilitybehigher.ThesystemcollectstemperatureinformationbyDS18B20,anddisplaydatabyLCD1602,itcandisplaythecurrentdate,time,week,temperature,togetherwithabuzzeralarmfunctionforthetips.KeywordSCMTheelectroniccalendarDateInterfacemoduleClanguage目錄1 緒論 21.1 課題研究目的和意義 21.2 萬年歷的國內外發(fā)展狀況概況 21.3 本研究的技術要求 31.4 本研究指導思想 32 芯片的選擇和論證 32.1 單片機芯片的選擇方案和論證 32.2 顯示模塊選擇方案和論證 42.3 溫度傳感器的選擇方案和論證 42.4 鍵盤模塊的選擇方案和論證 52.5 時鐘芯片的選擇方案和論證 52.6 電路設計最終方案決定 53 硬件模塊圖 64 系統(tǒng)硬件仿真和軟件調試工具 64.1 ProtuesISIS簡介 64.2 KeilC51uVision2簡介 75 本研究中的主要模塊 85.1 主控模塊(AT89C52模塊) 85.2 DS1302時鐘模塊 95.3 DS18B20溫度模塊 145.2 LCD1602顯示模塊 195.3 時間可調模塊 236 實驗結果 247 設計總結 26結束語 27鳴謝 28參考文獻 29附錄1 30附錄2 31緒論課題研究目的和意義隨著人們的生活水平不斷提高,工作節(jié)奏不斷加快,人們對時間的準確把握要求越來越高,倘若因為其他原因而忘記了時間,這將會帶來巨大的損失。雖然在日常生活中,各種設備如手表、手機等給我們提供了準確的時間信息,但是在大多數(shù)場合卻僅僅局限于個人的使用范圍之內。在家居生活中,在社會工作中,一款高掛于墻上設計獨特的電子萬年歷不僅能為我們提供準確的時間信息,而且美化了環(huán)境,給單調的工作、生活帶來了現(xiàn)代化氣息,因而成為了許多人的必備之選。隨著電子萬年歷多功能化,它在各種領域的使用越來越廣泛,給人們的生活、學習、工作帶來了極大的方便。電子萬年歷具有設計美觀、功能多樣、直觀清晰、信息量大等優(yōu)點,正成為家庭、商場、公共場所等新的消費熱點,有著巨大的市場潛力。萬年歷的國內外發(fā)展狀況概況從現(xiàn)代電子技術發(fā)展歷程來看,大致可以分為三個典型階段:(1)20世紀70年代,在集成電路制作方面,MOS工藝得到廣泛的應用。可編程邏輯技術及其器件已經問世,計算機作為一種運算工具已經在科研領域得到廣泛應用。在70年代后期,CAD的概念已現(xiàn)雛形,這一階段人們開始利用計算機輔助進行集成電路版圖編輯、PCB布局布線等工作。(2)20世紀80年代,集成電路設計進入了CMOS(互補場效應管)時代,復雜可編程邏輯器件已經進入商業(yè)應用,相應的輔助設計軟件也已投入使用,而在80年代末期,出現(xiàn)了FPGA(FieldProgrammableGateArray),CAE和CAD技術的應用更為廣泛,它們在PCB設計方面的原理圖輸入、自動布局布線及PCB分析,以及邏輯設計、邏輯仿真、布爾方程綜合和化簡等方面擔任了重要角色。特別是各種硬件描述語言HDL(HardwareDescriptionLanguage)的出現(xiàn)、應用和標準化方面的重大進步,為EDA(ElectronicDesignAutomation,電子設計自動化)技術必須解決的電路建模、標準文檔及仿真測試奠定了基礎。(3)進入20世紀90年代,隨著硬件描述語言的標準化得到進一步的確立,計算機輔助工程、輔助分析和輔助設計在電子技術領域獲得了更加廣泛的應用,與此同時,電子技術在通信、計算機及家電產品生產中的市場需求和技術需求,也極大地推動了全

新的電子設計自動化技術的應用和發(fā)展。特別是集成電路設計工藝步入了超深亞微米階段,百萬門以上的大規(guī)??删幊踢壿嬈骷年懤m(xù)面世,以及基于計算機技術的面向用戶的低成本大規(guī)模ASIC設計技術的應用,促進了EDA技術的形成。20世紀末期以來,電子設計技術獲得了飛速的發(fā)展。現(xiàn)代電子技術產品幾乎滲透到社會的各個領域,有力地推動了社會生產力的發(fā)展和社會信息化程度的提高。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質的變化,有電子鬧鐘、數(shù)字鬧鐘等等。單片機在多功能數(shù)字鐘中的應用已是非常普遍的,人們對數(shù)字鐘的功能及工作順序都非常熟悉?;趩纹瑱C的數(shù)字鐘的設計,采用靈活的編程,可以輕松的完成對數(shù)字鐘的功能擴展。另外是以基于數(shù)字電路的多功能數(shù)字鐘。數(shù)字鐘的時鐘顯示則由最初的單個數(shù)碼管顯示,隨著科技的發(fā)展,數(shù)碼管則逐漸被液晶顯示所替代。在不斷滿足人們日益需求的同時,其功能更是再不斷擴展。數(shù)字鐘的發(fā)展同樣進入了新的階段,更直觀,更易于操作,功能更多,更實用的電子鐘將不斷的進入人們的生活。市場的強烈需求極大地推動了現(xiàn)代電子技術的發(fā)展,產品的集成化程度越來越高,同時產品更新?lián)Q代的節(jié)奏也變得越來越快。本研究的技術要求通過查詢多方面的信息,本研究設計了一款讀取方便、顯示直觀,功能多樣、電路簡潔、成本低廉的電子萬年歷。本研究要求設計的電子萬年歷不僅能顯示時間、星期、公歷日期信息,還能實現(xiàn)整點報時、掉電計時、實時溫度顯示等功能。本研究指導思想本研究先對系統(tǒng)所需要的主要芯片進行選擇和論證,確定了選用AT89C52單片機作為系統(tǒng)的主要控制芯片,時鐘芯片DS1302提供時鐘,DS18B20溫度傳感器實現(xiàn)實時溫度顯示,而顯示部分采用的是LCD1602顯示屏。接著簡要的介紹了系統(tǒng)的調試工具,而重點是對相應主要模塊的硬件進行詳細的講解。比如AT89C52、DS1302、DS18B20和LCD1602A等芯片的引腳功能和工作原理。有利于讀者對各模塊的理解。在最后給出全局程序和電路原理圖,讓讀者理清整個設計的來龍去脈。芯片的選擇和論證單片機芯片的選擇方案和論證方案一:采用FTC10F04單片機,還帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場應用最多。其主要特點是:8KBFlashROM,可擦除1000次以上,數(shù)據(jù)保存10年。方案二:采用AT89C52單片機作為系統(tǒng)的控制中心,它在結構上把CPU、存儲器、定時器、I/O接口電路集成在一塊大規(guī)模的集成電路芯片上,具有集成度高、體積小、控制功能強、功耗低、低電壓、便于攜帶等優(yōu)點。所以選擇采用方案二為主要方案,方案一為備用方案。顯示模塊選擇方案和論證方案一:采用LED數(shù)碼管動態(tài)掃描,雖然LED數(shù)碼管價格適中,對于顯示數(shù)字也比較合適,然而需要顯示多位數(shù)字和字母時,編程就會變得很復雜,而且占用的單片機口線多。方案二:采用點陣式數(shù)碼管顯示,點陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費,且價格也相對較高,所以也不用此種作為顯示.方案三:采用LCD液晶顯示屏,LCD液晶顯示屏盡管價格比較貴,但它的顯示功能強大,可顯示大量字符,顯示多樣,清晰可見,需要的接口線少。所以采用LCD液晶顯示屏作為顯示。溫度傳感器的選擇方案和論證方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個相應阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個電阻變化的分壓值,并進行A/D轉換。此設計方案需用A/D轉換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴格線性的,會產生較大的測量誤差。方案二:采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進行數(shù)據(jù)傳輸,易于與單片機連接,可以去除A/D模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點。所以采用數(shù)字式溫度傳感器DS18B20測量溫度。鍵盤模塊的選擇方案和論證在對日期和時間進行切換,對日期和時間進行調節(jié)校準過程中,系統(tǒng)需要產生激勵電流,因此需要用按鍵。方案一:使用獨立式鍵盤。獨立式鍵盤是指直接用I/O口線構成的單個按鍵電路。獨立式按鍵電路配置靈活,軟件結構簡單。方案二:使用矩陣式鍵盤。矩陣式鍵盤是由行線和列線構成,按鍵位于行、列交叉點,行線、列線分別連接到按鍵開關的兩端。其特點是簡單且不增加成本,這種鍵盤適用于按鍵較多的場合。由于本系統(tǒng)需要的按鍵不多,所以采用獨立式鍵盤。時鐘芯片的選擇方案和論證方案一:直接采用單片機定時計數(shù)器提供秒信號,使用程序實現(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案減少了芯片的使用,節(jié)約了成本。不過由此產生的誤差較大,作為一個電子萬年歷,首要技術要求就是要能準確及時,因此不選擇此種方法來提供時鐘。方案二:采用DALLAS公司生產的DS1302時鐘芯片來實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,它可以對年、月、日、星期、時、分、秒進行計數(shù),精度高,使用壽命長,能在低電壓下工作,而且它可以利用雙電源供電,當主電源掉電時芯片能繼續(xù)工作,滿足本設計所要求的掉電繼續(xù)計時功能。所以采用DS1302提供時鐘。電路設計最終方案決定綜上各方案所述,對此次作品的方案選定:采用AT89C52作為主控制系統(tǒng);DS1302提供時鐘;數(shù)字式溫度傳感器;LCD液晶顯示屏作為顯示模塊,按鍵采用獨立式鍵盤。硬件模塊圖本系統(tǒng)以集成芯片為主,以C語言為開發(fā)語言,通過對硬件進行軟件編程實現(xiàn)所需要的功能。系統(tǒng)的模塊圖如圖3-1所示,以下的內容就是根據(jù)模塊逐步實現(xiàn)的。峰鳴器鬧鈴模塊鍵盤輸入電路(峰鳴器鬧鈴模塊鍵盤輸入電路(89C52)主控模塊DS18B20溫度模塊DS18B20溫度模塊DS1302時鐘模塊DS1302時鐘模塊顯示電路顯示電路圖3-1系統(tǒng)模塊圖模塊說明:DS1302時鐘模塊可以輸出其當前日期及時間鍵盤輸入電路可以調整日期,時間及鬧鐘的設置DS18B20溫度模塊可以測量當前室內的溫度峰鳴器鬧鈴模塊可以做鬧鐘提醒顯示電路則顯示當前的系統(tǒng)運行情況系統(tǒng)硬件仿真和軟件調試工具本系統(tǒng)的硬件仿真工具采用單片機專用仿真工具ProtuesISIS,軟件調試則采用KeilC51uVision2開發(fā)平臺。ProtuesISIS簡介ProteusISIS是英國Labcenter公司開發(fā)的電路分析與實物仿真軟件。它運行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點是:(1)實現(xiàn)了單片機仿真和SPICE電路仿真相結合。具有模擬電路仿真、數(shù)字電路仿真、單片機及其外圍電路組成的系統(tǒng)的仿真、RS232動態(tài)仿真、I2C調試器、SPI調試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。(2)支持主流單片機系統(tǒng)的仿真。目前支持的單片機類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。(3)提供軟件調試功能。在硬件仿真系統(tǒng)中具有全速、單步、設置斷點等調試功能,同時可以觀察各個變量、寄存器等的當前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時支持第三方的軟件編譯和調試環(huán)境,如KeilC51uVision2等軟件。(4)具有強大的圖繪制功。總之,該軟件是一款集單片機和SPICE分析于一身的仿真軟件,功能極其強大。KeilC51uVision2簡介單片機開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機器碼有兩種方法,一種是手工匯編,另一種是機器匯編,目前已極少使用手工匯編的方法了。機器匯編是通過匯編軟件將源程序變?yōu)闄C器碼,用于MCS-51單片機的匯編軟件有早期的A51,隨著單片機開發(fā)技術的不斷發(fā)展,從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機的開發(fā)軟件也在不斷發(fā)展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機的軟件,這從近年來各仿真機廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部份組合在一起。運行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內你只能買到該軟件、而你買的仿真機也很可能只支持該軟件),即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強大的軟件仿真調試工具也會令你事半功倍。本研究中的主要模塊主控模塊(AT89C52模塊)AT89C52是一個低電壓,高性能CMOS8位單片機,片內含8kbytes的可反復擦寫的Flash只讀程序存儲器和256bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統(tǒng),片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業(yè)中有著廣泛的應用。其主要特點如下:兼容MCS51指令系統(tǒng)8kB可反復擦寫(大于1000次)FlashROM;32個雙向I/O口;256x8bit內部RAM;3個16位可編程定時/計數(shù)器中斷;時鐘頻率0-24MHz;2個串行中斷,可編程UART串行通道;2個外部中斷源,共8個中斷源;2個讀寫中斷口線,3級加密位;低功耗空閑和掉電模式,軟件設置睡眠和喚醒功能;有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應不同產品的需求。圖5.1-1AT89C52封裝圖DS1302時鐘模塊DS1302簡介DS1302是DALLAS公司推出的涓流充電時鐘芯片內含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM。通過簡單的串行接口與單片機進行通信,實時時鐘/日歷電路提供秒分時日月年的信息,每月的天數(shù)和閏年的天數(shù)可自動調整。時鐘操作可通過AM/PM指示決定采用24或12小時格式。DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個口線。1.RES復位,2.I/O數(shù)據(jù)線,3.SCLK串行時鐘。時鐘/RAM的讀/寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信。DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。DS1302是由DS1202改進而來,增加了以下特性:雙電源管腳用于主電源和備份電源供應,Vcc1為可編程涓流充電電源,附加七個字節(jié)存儲器,備份電源可由大容量電容(1F)替代。它廣泛應用于電話傳真便攜式儀器以及電池供電的儀器儀表等產品領域。主要性能如下:實時時鐘具有能計算2100年之前的秒,分,時,日,星期,月,年的能力。31*8位暫存數(shù)據(jù)存儲RAM串行I/O口方式使得管腳數(shù)量最少寬范圍工作電壓:2.0V~5.5V工作電流:2.0V時,小于300nA讀/寫時鐘或RAM時,有兩種傳送方式:單字節(jié)傳送和多字節(jié)傳送(字符組方式)8腳DIP封裝或可選的8腳SOIC封裝簡單的3線串行I/O接口與TTL/COMS兼容(VCC=5V時)可選工業(yè)級溫度范圍:-40oC~+85oCDS1302結構DS1302的引腳如圖5.2-1所示。118273645VCC2VCC1X1SCLKX2I/OGNDRST圖5.2-1DS1302的引腳圖(2)引腳功能如表5-1所示。表5-1引腳功能表引腳號引腳名稱功能1Vcc2主電源引腳2,3X1,X2振蕩源,外接32.768KHz晶振4RST復位/片選端5GND接地6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行時鐘輸入端8Vcc1備用電源DS1302工作原理串行時鐘芯片主要由寄存器、控制寄存器、振蕩器、實時時鐘以及RAM組成。為了對任何數(shù)據(jù)傳送進行初始化,需要將RST置為高電平且將具有地址和控制信息的8位數(shù)據(jù)(控制字節(jié))裝入移位寄存器。數(shù)據(jù)在SCLK的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8加8(8位地址加8位數(shù)據(jù)),在多字節(jié)突發(fā)模式方式下為8加最多可達248的數(shù)據(jù)??刂泼钭止?jié)與寄存器(1)控制命令字節(jié)控制命令字節(jié)的格式如表5-2表5-2控制命令字節(jié)的格式表D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中;位6如果為0,則表示存取日歷時鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)為0表示要進行寫操作,為1表示進行讀操作,控制字節(jié)總是從最低位開始輸出。(2)日歷、時鐘寄存器DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)為BCD碼形式。其日歷、時間寄存器及其控制字如表5.2-4所示。寄存器的選擇由命令字而定,日歷,時鐘各個寄存器與控制字對照表如表5-3所示。表5-3日歷、時鐘寄存器與控制字對照表寄存器名稱D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W秒寄存器1000000分寄存器1000001小時寄存器1000010日寄存器1000011月寄存器1000100星期寄存器1000101年寄存器1000110寫保護寄存器1000111慢充電寄存器1010000時鐘突發(fā)寄存器1011111最后一位RD/W為0表示要進行寫操作,為1表示進行讀操作。表5-4為主要寄存器命令字、取值范圍以及各位內容對照表。表5-4DS1302的日歷、時鐘寄存器表寄存器名稱命令字取值范圍各位內容寫操作讀操作76543~0秒寄存器80H81H00~59CH10SECSEC分寄存器82H83H00~59010MINMIN小時寄存器84H85H01~12或00~2312/24010A/PHRHR日寄存器86H87H01~28,29,30,310010DATEDATE月寄存器88H89H01~1200010MMONTH星期寄存器8AH8BH01~070000DAY年寄存器8CH8DH01~0910YEARYEAR寫保護寄存器8EH8FHWP0000慢充電寄存器90H91HTCSTCSTCSTCSDSDSRSRS時鐘突發(fā)寄存器BEHBFH特殊位的說明:CH:時鐘暫停位。當此位設置為1時,振蕩器停止,DS1302處于低功耗空閑狀態(tài),這時芯片消耗電流將小于100NA;當此位為0時,振蕩器啟動,時鐘開始啟動。12/24:12或24小時方式選擇位。為1時選擇12小時方式,在12小時方式下,位5是AM/PM選擇位,此位為1時表示PM。為0時選擇24小時方式,在24小時方式下,位5是第2個小時位(20~23時)。WP:寫保護位。寫保護寄存器的開始7位(0~6)置為0,在讀操作時總是讀出0。在對時鐘或RAM進行寫操作之前,位7(WP)必須為0,當它為高電平時,寫保護位防止對任何其他寄存器進行寫操作。TCS:控制慢充電的選擇,為了防止偶然因素使DS1302工作,只有1010模式才能使慢速充電工作。DS:二極管選擇位。如果DS為01,那么選擇一個二極管;如果DS為10,則選擇兩個二極管;如果DS為11或00,那么充電器被禁止,與TCS無關。RS:選擇連接在VCC2與VCC1之間的電阻,如果RS為00,那么充電器被禁止,與TCS無關。選擇的電阻如表5-5所示。表5-5RS與所選電阻對照表RS位電阻器典型值00無無01R12KΩ10R24KΩ11R38KΩ由上所述,根據(jù)涓流充電寄存器的不同編程,可得到不同的充電電流。其充電電流具體計算公式如下:式中,5.0V為VCC2腳所接入的工作電壓,VD為二極管正向壓降0.7V,R為寄存器0和1位編碼決定的電阻值,VE為VCC1腳所接入的電壓。(3)RAM寄存器DS1302與RAM相關的寄存器分為兩類,一類是單個RAM單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為C0H~FDH,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31字節(jié),命令控制字為FEH(寫)、FFH(讀)。RAM寄存器與控制字對照如表5-6。表5-6RAM區(qū)寄存器與控制字對照表寄存器名稱D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/WRAM01000000RAM11000001………RAM301111110RAM突發(fā)1111111(4)復位和時鐘控制通過將RST輸入驅動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。如果在傳送過程中置RST為低電平,則會終止此次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在VCC≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。(5)數(shù)據(jù)輸入/輸出數(shù)據(jù)輸入是在輸入寫命令字的8個SCLK周之后,在接下來的8個SCLK周期中的每個脈沖的上升沿輸入數(shù)據(jù),數(shù)據(jù)從0位開始。如果有額外的SCLK周期,它們將被忽略。數(shù)據(jù)輸出是在輸出讀命令字的8個SCLK周之后,在接下來的8個SCLK周期中的每個脈沖的下降沿輸出數(shù)據(jù),數(shù)據(jù)從0位開始。需要注意的是,第一個數(shù)據(jù)位在命令字節(jié)后的最后一位之后的第一個下降沿被輸出。只要RST保持高電平,如果有額外的SCLK周期,將重新發(fā)送數(shù)據(jù)字節(jié),即多字節(jié)傳送。時序圖如圖5.2-2所示。圖5.2-2時序圖DS1302電路設計圖圖5.2-3DS1302電路設計圖5.3 DS18B20溫度模塊概述美國DALLAS公司生產的單線數(shù)字溫度傳感器DS18B20,可把溫度信號直接轉換成串行數(shù)字信號供微機處理。由于每片DS18B20含有唯一的硅串行數(shù),所以在一條總線上可掛接任意多個DS18B20芯片。從DS18B20讀出的信息或寫入DS18B20的信息,僅需要一根口線(單線接口)。讀寫及溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。DS18B20可提供9~12位溫度讀數(shù),構成多點溫度檢測系統(tǒng)而無需任何外圍硬件。DS18B20的工作原理(1)DS18B20的性能●單線接口:僅需一根口線與MCU連接進行通信?!穸鄠€DS18B20可以并聯(lián)在惟一的3線上,實現(xiàn)多點組網功能?!駸o需外圍元件●可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V。●零待機功耗?!駵y溫范圍:-55~125℃。固有測溫分辨率為0.5℃。●通過編程可實現(xiàn)9~12位的數(shù)字讀數(shù)方式。●用戶可自設定非易失性的報警上下限值?!裰С侄帱c組網功能,多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點測溫?!駡缶阉髅羁勺R別哪片DS1820超溫度限?!褙搲禾匦裕娫礃O性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。(2)DS18B20的內部結構①64位ROM的結構如圖5-7所示:圖5-764位ROM的結構圖8位檢驗CRC48位序列號8位工廠代碼(10H)開始8位是產品類型的編號,接著是每個器件的惟一的序號,共有48位,最后8位是前56位的CRC校驗碼,這也是多個DS18B20可以采用一線進行通信的原因。②非易失性溫度報警觸發(fā)器TH和TL,可通過軟件寫入用戶報警上下限。③高速暫存存儲器DS18B20溫度傳感器的內部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的E2PROM。高速RAM包含9字節(jié)存儲器,其結構如圖5.4-3所示。前兩個字節(jié)包含測得的溫度信息。第3和第4字節(jié)是TH和TL的拷貝,是易失的,每次上電復位時被刷新。第5個字節(jié)是配置寄存器,它的內容用于確定溫度值的數(shù)字轉換分辨率,DS18B20工作時按此寄存器中的分辨率將溫度轉換為相應精度的數(shù)值。該字節(jié)各位的定義如表5-8所示。低5位一直都是1,TM是測試模式位,用于設置DS18B20在工作模式還是在測試模式。在DS18B20出廠時該位被設置為0,用戶不要去改動,R1和R0決定溫度轉換的精度位數(shù),即是來設置分辨率,如表5-9所示(DS18B20出廠時被設置為12位)。1字節(jié)2字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)7字節(jié)8字節(jié)9字節(jié)溫度MSBTH用戶字節(jié)1TH用戶字節(jié)1TL用戶字節(jié)2TH用戶字節(jié)1配置寄存器TL用戶字節(jié)2保留TL用戶字節(jié)2保留E2E2PROMCRC圖5.4-3高速暫存RAM結構圖表5-8配置寄存器TMR1R211111表5-9DS18B20分辯率的定義規(guī)定表R1R0分辯率/位溫度最大轉換時間00993.750110187.510113751112750由表5-9可見,設定的分辨率越高,所需要的溫度數(shù)據(jù)轉換時間就越長。因此,在實際應用中要在分辨率和轉換時間權衡考慮。高速暫存RAM第6~8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個字節(jié)的CRC碼,可用來保證通信正確。當DS18B20接收到溫度轉換命令后,開始啟動轉換。轉換完成后的溫度值就以16位帶符號擴展的二進制補碼形式存儲在高速暫存存儲器的第1,2字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后,數(shù)據(jù)格式以0.0625℃/LSB形式表示。溫度值格式如圖5.4-4。232221202-12-22-32-4LS字節(jié)SSSSS2625264圖5.4-4溫度數(shù)據(jù)值格式圖MS字節(jié)圖5.4-4溫度數(shù)據(jù)值格式圖當符號位S=0時,直接將二進制位轉換為十進制;當S=1時,先將補碼變換為原碼,再計算十進制值。表5-10是對應的一部分溫度值。表5-10DS18B20溫度與測得值對應表溫度/oC數(shù)據(jù)輸出(二進制)數(shù)據(jù)輸出(十六進制)+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100010191H+10.125000000001010001000A2H+0.500000000000010000008H000000000000000000000H-0.51111111111111000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90HDS18B20完成溫度轉換后,就把測得的溫度值與TH,TL作比較,若T>TH或T<TL,則將該器件內的告警標志置位,并對主機發(fā)出的告警搜索命令作出響應。因此,可用多只DS18B20同時測量溫度并進行告警搜索。④CRC的產生在64bROM的最高有效字節(jié)中存儲有循環(huán)冗余校驗碼(CRC)。主機根據(jù)ROM的前56位來計算CRC值,并和存入DS18B20中的CRC值做比較,以判斷主機收到的ROM數(shù)據(jù)是否正確。DS18B20的測溫原理DS18B20的測溫原理如圖5.4-5,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產生固定頻率的脈沖信號送給減法計數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產生的信號作為減法計數(shù)器2的脈沖輸入,圖中還隱含著計數(shù)門,當計數(shù)門打開時,DS18B20就對低溫度系數(shù)振蕩器產生的時鐘脈沖后進行計數(shù),進而完成溫度測量。計數(shù)門的開啟時間由高溫度系數(shù)振蕩器來決定,每次測量前,先將-55℃所對應的基數(shù)分別置入減法計數(shù)器1和溫度寄存器中,減法計數(shù)器1和溫度寄存器被預置在-55斜率累加器斜率累加器預置計數(shù)比較器預置計數(shù)比較器減法計數(shù)器1預置低溫系數(shù)振蕩器減法計數(shù)器1預置低溫系數(shù)振蕩器溫度寄存器減到0溫度寄存器減到0停止減法計數(shù)器2減到0高溫度系數(shù)振蕩器減法計數(shù)器2減到0高溫度系數(shù)振蕩器圖5.4-5DS18B20測溫原理圖減法計數(shù)器1對低溫度系數(shù)晶振產生的脈沖信號進行減法計數(shù),當減法計數(shù)器1的預置值減到0時溫度寄存器的值將加1,減法計數(shù)器1的預置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產生的脈沖信號進行計數(shù),如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。圖5.4-4中的斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正減法計數(shù)器的預置值,只要計數(shù)門仍未關閉就重復上述過程,直至溫度寄存器值達到被測溫度值。另外,由于DS18B20單線通信功能是分時完成的,他有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進行。操作協(xié)議為:初始化DS18B20(發(fā)復位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。DS18B20與單片機的接口設計DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時DS18B20的1腳接地,2腳作為信號線,3腳接電源;另一種是寄生電源供電方式,如圖5.4-6所示。單片機端口接單線總線,為保證在有效的DS18B20時鐘周期內提供足夠的電流,可用一個MOSFET管來完成對總線的上拉。當DS18B20處于寫存儲器操作和溫度A/D變換操作時,總線上必須有強的上拉,上拉開啟時間最大為10μs。采用寄生電源供電方式是VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接收口必須是三態(tài)的。VCCMCUDS18B20MCUVCCGNDVDD5.1KI/O圖5.4-6DS18B20應用電路DS18B20程序設計方案DS18B20電路設計圖本設計采用電源供電方式,設計電路如圖5.4-7所示。圖5.4-7DS18B20電路設計圖LCD1602顯示模塊概述LCD1602可以顯示2行16個字符,有8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{節(jié)和背光。缺點:不能使用中文,不能顯示圖形。引腳圖及引腳功能LCD1602的引腳如圖5.7-1所示。圖5.7-1LCD1602的引腳圖引腳說明:第1腳:VSS為地第2腳:VDD接5V正電源第3腳:VEE為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度,或直接通過一個電阻到地.第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光正極第16腳:背光負極字符發(fā)生存儲器(CGROM)1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經存儲了160個不同的點陣字符圖形,表5-11給出CGROM中部分字符代碼與字符圖形的對應關系,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。表5-11CGROM中部分字符代碼與字符圖形的對應關系表高位底位0000001000110100010101100111xxxx0000(1)0@P\pxxxx0001(2)!1AQaqxxxx0010(3)”2BRbrxxxx0011(4)#3CScsxxxx0100(5)﹩4DTdtxxxx0101(6)%5EUeuxxxx0110(7)&6FVfv控制指令1602液晶模塊內部的控制器共有11條控制指令,如下表5-12所示,表5-121602液晶模塊內部的控制器中的指令表指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標返回000000001*3置輸入模式00000001I/DS4顯示開關控制0000001DCB5光標或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址(AGG)8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標志或地址01BF計數(shù)器地址10寫數(shù)到CGROM或DDRAM10要寫的數(shù)11CGROM或DDRAM讀數(shù)11讀出的數(shù)據(jù)它的讀寫操作、屏幕和光標的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標復位到地址00H位置指令2:光標復位,光標返回到地址00H指令3:光標和顯示模式設置I/D:光標移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效指令4:顯示開關控制。D:控制整體顯示的開與關,高電平表示開顯示,低電平表示關顯示C:控制光標的開與關,高電平表示有光標,低電平表示無光標B:控制光標是否閃爍,高電平閃爍,低電平不閃爍指令5:光標或顯示移位S/C:高電平時移動顯示的文字,低電平時移動光標指令6:功能設置命令DL:高電平時為4位總線,低電平時為8位總線N:低電平時為單行顯示,高電平時雙行顯示F:低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符(有些模塊是DL:高電平時為8位總線,低電平時為4位總線)指令7:字符發(fā)生器RAM地址設置指令8:DDRAM地址設置指令9:讀忙信號和光標地址BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)指令11:讀數(shù)據(jù)1602的內部顯示地址液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表5-13是1602的內部顯示地址.表5-131602的內部顯示地址表12345678910111213141516000102030405060708090A0B0C0D0E0F第一行404142434445464748494A4B4C4D4E4F第二行比如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)LCD1602電路設計圖圖5.7-2LCD1602電路設計圖時間可調模塊鍵盤掃描原理如圖5.6-1所示,鍵盤是由多個按鍵組成。首先將與按鍵相接的單片機接口都置高電平,當沒有按鍵按下時,單片機和地線之間是不相連的,若第N個鍵被按下,則接這個鍵的單片機接口為低電平,通過查詢接到按鍵的單片機接口,就知道是第N個按鍵被按下,從而進行相應程序處理。圖5.6-1按鍵電路設計圖按鍵說明KEY1:選擇相應要調節(jié)的值。KEY2:數(shù)值加1。KEY3:數(shù)值減1。KEY4:鬧鐘的開啟與關閉。實驗結果電子萬年歷是多功能數(shù)字型的,可以顯示當前日期、時間以及溫度,因此對于它的程序也是相對復雜的。在編寫程序和調試過程中出現(xiàn)了一些問題,經過反復多次的修改,最終解決了軟件問題,成功實現(xiàn)本設計的各項功能。調試開始畫面調試成功畫面萬年歷成品設計總結本設計以ATMEL公司的AT89C52層為主控芯片,配合專用的時鐘芯片及軟件能穩(wěn)定地顯示當前時間,室內溫度及完成公農歷轉換。本設計的方案選擇與當前主流的設計思想吻合,所用到的模塊具有很高的實用性,特別是編程語言選用硬件C為系統(tǒng)的移植提供了很大的方便。由于硬件設備問題,所以設計的硬件以單片機專用仿真軟件ProtuesISIS6.9SP4為開發(fā)平臺,軟件以keil51為開發(fā)平臺,這為系統(tǒng)的軟硬件調試提供了很大方便。與市面上的大多數(shù)萬年歷以分立元件為主不同,本設計大多使用集成芯片。集成芯片的穩(wěn)定性,可靠性及資源利用率都遠優(yōu)于分立元件。這對系統(tǒng)的長時間穩(wěn)定工作有決定性的作用。另外,為了充分利用89C52及提高系統(tǒng)的實用性,使用了Dallas公司的溫度傳感器18B20,使系統(tǒng)在完成基本功能的同時能顯示當前溫度。當然,任何事情都有雙面性,系統(tǒng)采用了大規(guī)模集成模塊在提高穩(wěn)定性的時候,也大大地增加了系統(tǒng)的設計成本。這對于生產應用是致命的。另外,硬件仿真的時候采用大多采用了直插封裝,這對于系統(tǒng)的模型設計有很大的不利,在生產應用中,現(xiàn)在的直插元件用得越來越少,取而代之的是貼片芯片。在軟件的設計方面,由于實力問題,有些問題還是得不到根本的解決,比如說在鬧鈴和實時顯示溫度設計優(yōu)化上就有一定的缺陷。本次設計中整點報時功能是當時鐘滿整點時,自動報出相應時鐘點數(shù),但其報時功能比較單一;聲音提醒只是簡單的蜂鳴器,報警功能較為單一。相信在以后的工作中會不斷提高的軟硬件問題的能力。結束語在整個設計過程中,我充分發(fā)揮了人的主觀能動性,自主學習,學到了許多沒學到的知識。較好的完成了作品。達到了預期的目的,在最初的設計中,發(fā)揮“三個臭皮匠,頂個諸葛亮”的作用。相互學習、相互討論、研究。完了最初的設想。在電路焊接時雖然沒什么大問題,但從中也知道了焊接在整個作品中的重要性,電路工程量大,不能心急,一個個慢慢來不能急于求成。反而達到事半功倍的效果。對電路的設計、布局要先有一個好的構思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經過靜下心來思考,和同學討論,理清了思路,反而得心應手。在此次設計中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我們的耐心,做什么事都在有耐心。此次設計中學到了很多很多東西,這是最重要的??傊?,此次畢業(yè)設計讓我的能力得到了全方位的提高。鳴謝論文經過三個月后終于完成,在做論文期間,問題一個接著一個,但在宿舍同學的幫助下,問題最后也能迎刃而解。在此對他們的幫助表示最誠摯的感謝。本論文是在我的指導老師周玲老師的悉心指導下完成的。在此,特別要向本人的指導教師周玲老師致以誠摯的謝意。他嚴謹?shù)闹螌W精神,精益求精的工作作風,讓我學到了許多。從課題的選擇到論文的最終完成,周老師都始終給予我細心的指導。在論文的修訂上,亦給予了我許多寶貴的修改意見,使我在此期間獲益良多,順利的完成了畢業(yè)論文工作。參考文獻[1]李伯成.單片機及嵌入式系統(tǒng).清華大學出版社[2]陳陽海.單片機的典型結構及AT89S5X系列單片機.電子制作,2006[3]張毅剛.單片機原理與應用.高等教育出版社[4]嚴天峰.單片機應用系統(tǒng)設計與仿真調試.北京航空航天大學出版社[5]王青.溫度傳感器DS18B20和51單片機的接口技術及應用.電子制作,2006[6]白延敏.51單片機典型系統(tǒng)開發(fā)實例精講.北京:電子工業(yè)出版社,2009[7]戢衛(wèi)平,胡耀輝,朱朝華,葉祥,楊帆.單片機系統(tǒng)開發(fā)實例經典.北京:冶金工業(yè)出版社,2006[8]楊壘,于泉生,郭靜梅.基于AT89S52的定時器設計.山東大學學報,2006[9]/cx/upfiles/200592420228840.doc附錄1萬年歷原理圖附錄2C語言編寫的源程序:#include<reg51.h>//調用頭文件#defineucharunsignedchar //宏定義用uchar來代表unsignedchar#defineuintunsignedint //宏定義用uint來代表unsignedintsbitio=P1^3; //定義DS1302數(shù)據(jù)引腳sbitrst=P1^4; //定義DS1302復位引腳sbitsclk=P1^2;//定義DS1302時鐘引腳sbitrs=P1^0; //定義LCD1602數(shù)據(jù)/命令選擇引腳sbiten=P1^1; //定義LCD1602使能端引腳sbitmoshi=P1^7;//定義模式鍵sbitjia=P3^1;//定義按鍵加sbitjian=P3^4;//定義按鍵減sbitnz=P3^7;//定義鬧鐘鍵sbitbeep=P1^5;//定義蜂鳴器輸出端sbitDQ=P2^0;//定義DS18B20數(shù)據(jù)段uinttmp;ucharcodetab[10]={"0123456789"};//定義0~9ASCLL碼數(shù)組ucharcodetab_xingqi[7][3]={{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};//定義星期數(shù)組ucharcodetab_alarm[2][16]={{"alarmclock:OFF"},{"alarmclock:ON"}};charsecond,minute,hour,date,month,year,day,key,shi,fen,num,xingqi;//定義年月日時分秒數(shù)據(jù)變量uinttemph=3800,templ=500;uintvalue; //定義數(shù)據(jù)變量(用于數(shù)據(jù)轉換前暫時存貯)bitalarmclock,xianshiclock;bits1,s2,s3,s4,s5,s6,s7,s8,s9,s10,kai=1;voiddelay(uintz) //延時子程序{uintx;uchary;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiddelay1302(uintz){for(z=z;z>0;z--);}voiddelay_18B20(unsignedinti)//DS18B20延時子延時{ while(i--);}//初始化函數(shù)voidInit_DS18B20(void) //DS18B20初始化{ unsignedcharx=0; DQ=1;//DQ復位 delay_18B20(8);//稍做延時 DQ=0;//單片機將DQ拉低 delay_18B20(80);//精確延時大于480us DQ=1;//拉高總線 delay_18B20(14); x=DQ;//稍做延時后如果x=0則初始化成功x=1則初始化失敗 delay_18B20(20);}ReadOneChar(void) //讀一個字節(jié){ unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//給脈沖信號 dat>>=1; DQ=1;//給脈沖信號 if(DQ) dat|=0x80; delay_18B20(4); } return(dat);}voidWriteOneChar(unsignedchardat) //寫一個字節(jié){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_18B20(5);DQ=1;dat>>=1;}}//讀取溫度ReadTemperature(void){ unsignedchara=0; unsignedcharb=0; unsignedintt=0; Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0x44);//啟動溫度轉換 delay_18B20(100); Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度 a=ReadOneChar(); b=ReadOneChar(); //傳感器返回值除16得實際溫度值 //為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長度, //技巧處理后先乘25,再除4,除4用右移實現(xiàn) t=(b*256+a)*25; return(t>>2);}voidlcdcom(ucharcom) //LCD1602寫入地址{ rs=0; P0=com; delay(5); en=1; delay(5); en=0; delay(5);}voidlcddata(uchardat)//LCD1602寫入數(shù)據(jù){ rs=1; P0=dat; delay(5); en=1; delay(5); en=0; delay(5);}voidlcdinit() //LCD1602初始化{ en=0; lcdcom(0x38); lcdcom(0x0c); lcdcom(0x06); lcdcom(0x01);}voidwrite(uchardat) //寫數(shù)據(jù){ uchari; sclk=0; delay1302(1); for(i=0;i<8;i++) { io=dat&0x01; delay1302(1); sclk=1; //sclk上升沿接收數(shù)據(jù)有效 delay1302(1); sclk=0; delay1302(1); dat>>=1; }}voidwriteset(ucharcmd,uchardat) //DS1302寫入數(shù)據(jù){ rst=0; delay1302(1); sclk=0; delay1302(1); rst=1; delay1302(1); write(cmd); write(dat); sclk=1; delay1302(1); rst=0;}unsignedcharread() //讀數(shù)據(jù){ uchari,dat; delay1302(1); for(i=0;i<8;i++) { dat>>=1; if(io==1) dat|=0x80; sclk=1; delay1302(1); sclk=0; delay1302(1); } returndat;}unsignedcharreadset(ucharcmd)//DS1302讀出數(shù)據(jù){ uchardat; rst=0; delay1302(1); sclk=0; delay1302(1); rst=1; write(cmd); dat=read(); sclk=1; delay1302(1); rst=0; returndat;}voidinitDS1302() //DS1302初始化{ writeset(0x8E,0x00); writeset(0x80,((0/10)<<4|(0%10))); writeset(0x82,((0/10)<<4|(0%10))); writeset(0x84,((12/10)<<4|(12%10))); writeset(0x86,((1/10)<<4|(1%10))); writeset(0x88,((1/10)<<4|(1%10))); writeset(0x8c,((10/10)<<4|(10%10)));}voidxianshi() //顯示子程序{uchari,num;num++;if(num==3){num=0;tmp=ReadTemperature();//讀取溫度if(tmp>temph)beep=~beep;elseif(tmp<templ)beep=~beep;elsebeep=0;}if(xianshiclock==0){ lcdcom(0x80); lcddata('2'); lcddata('0'); //顯示 0 value=readset(0x8d); //讀取年 year=((value&0x70)>>4)*10+(value&0x0F); //數(shù)據(jù)轉換 if(s1==0) { lcddata(tab[year/10]); //顯示年十位 lcddata(tab[year%10]); //顯示年個位 } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcddata('/'); //顯示/ value=readset(0x89);//讀取月 month=((value&0x70)>>4)*10+(value&0x0F);//轉換月 if(s2==0) { lcddata(tab[month/10]);//顯示月十位 lcddata(tab[month%10]);//顯示月個位 } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcddata('/'); //顯示/ value=readset(0x87); //讀取日 date=((value&0x70)>>4)*10+(value&0x0F); //轉換日 if(s3==0) { lcddata(tab[date/10]); //顯示日十位 lcddata(tab[date%10]); //顯示日個位 } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } value=readset(0x8b);//讀取星期 day=value; //轉換星期 lcdcom(0x8c);//寫入要顯示的地址 if(s4==0) { for(i=0;i<3;i++) { lcddata(tab_xingqi[day-1][i]);//顯示星期 } } else { lcddata(''); lcddata(''); lcddata(''); } value=readset(0x85); //讀小時 hour=((value&0x70)>>4)*10+(value&0x0F); //轉換小時 lcdcom(0xc0); if(s5==0) { lcddata(tab[hour/10]);//顯示小時十位 lcddata(tab[hour%10]); //顯示小時個位 } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcddata(':'); //顯示: value=readset(0x83); //讀分鐘 minute=((value&0x70)>>4)*10+(value&0x0F);//轉換分鐘 if(s6==0) { lcddata(tab[minute/10]); //顯示分鐘十位 lcddata(tab[minute%10]); //顯示分鐘個位 } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcddata(':'); //顯示: value=readset(0x81); //讀取秒 second=((value&0x70)>>4)*10+(value&0x0F);//轉換秒 lcddata(tab[second/10]); //顯示秒十位 lcddata(tab[second%10]); //顯示秒個位 tmp=ReadTemperature();//讀取溫度 lcdcom(0xca); //寫入要現(xiàn)實的地址 lcddata(tab[tmp/1000%10]); lcddata(tab[tmp/100%10]); lcddata('.'); lcddata(tab[tmp/10%10]); lcddata(0xdf); lcddata('C');//顯示℃ } else { lcdcom(0x80); for(i=0;i<16;i++) { lcddata(tab_alarm[alarmclock][i]);//顯示鬧鐘 } lcdcom(0xc6); if(s7==0) { lcddata(tab[shi/10]); lcddata(tab[shi%10]); } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcddata(':'); if(s8==0) { lcddata(tab[fen/10]); lcddata(tab[fen%10]); } else { lcddata(''); //顯示空白實現(xiàn)閃爍 lcddata(''); } lcdcom(0xc0); if(s9==0) { lcddata('H'); lcddata(tab[temph/1000%10]); lcddata(tab[temph/100%10]); } else { lcddata(''); lcddata(''); lcddata(''); } lcdcom(0xcd); if(s10==0) { lcddata('L'); lcddata(tab[templ/1000%10]); lcddata(tab[templ/100%10]); } else { lcddata(''); lcddata(''); lcddata(''); }}}voidanjian() //按鍵檢測程序{if(moshi==0) //如果模式鍵按下{delay(100); //延時消抖 key++; //再次按下加一,切換下一位 if(key>10) { key=0; //按夠一圈返回 xianshiclock=0; //顯示時鐘 lcdcom(0x01); //清屏 s10=0; } switch(key) { case1:;break; case2:s1=0;break; case 3:s2=0;break; case4:s3=0;break; case5:s4=0;break; case6:s5=0;break; case7:lcdcom(0x01);xianshiclock=1;s6=0; break; case8:s7=0;break; case9:s8=0;break; case10:s9=0;break; } while(moshi==0) xianshi(); delay(100);}if(jia==0){delay(100); switch(key) { case1:year++;if(year>99)year=0;writeset(0x8c,((year/10)<<4|(year%10)));break; //年加一 case 2:month++;if(month>12)month=1;writeset(0x88,((month/10)<<4|(month%10)));break; //月加一 case3:date++; if(date>31) date=1;writeset(0x86,((date/10)<<4|(date%10)));break;//日加一 case4:xingqi++;if(xingqi>7)xingqi=1;writeset(0x8a,xingqi); break; case5:hour++;if(hour>23)hour=0;writeset(0x84,((hour/10)<<4|(hour%10)));break;//小時加一 case6:minute++;if(minute>59)

溫馨提示

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

評論

0/150

提交評論