版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
中文題目:基于單片機(jī)的電子萬年歷英文題目:TheElectronicCalendarBasedonSCM專業(yè)班級09電子信息工程2班提交日期2013-5-摘要隨著科學(xué)技術(shù)的不斷發(fā)展,人們的生活水平不斷提高,傳統(tǒng)的萬年歷已經(jīng)不足以滿足人們的需求。隨著萬年歷的多功能化,社會上出現(xiàn)了各種各樣的電子萬年歷,其中,單片機(jī)的電子萬年歷有著巨大的市場潛力。本設(shè)計(jì)著重描述的就是基于AT89C52的單片機(jī)的電子萬年歷。本文首先論證各主要模塊芯片的選擇,隨后介紹了本系統(tǒng)所應(yīng)用的各個(gè)接口模塊的主要功能及工作過程。本設(shè)計(jì)是通過軟硬件相結(jié)合來進(jìn)行各模塊功能的實(shí)現(xiàn)。電子萬年歷以C語言為主體進(jìn)行軟件編寫,使程序的可讀性和可移植性更高。系統(tǒng)通過DS18B20采集溫度信息、LCD1602小液晶顯示數(shù)據(jù),可以顯示當(dāng)前日期、時(shí)間、星期、溫度,并附有以峰鳴器為提示的鬧鈴功能。關(guān)鍵詞單片機(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 萬年歷的國內(nèi)外發(fā)展?fàn)顩r概況 21.3 本研究的技術(shù)要求 31.4 本研究指導(dǎo)思想 32 芯片的選擇和論證 32.1 單片機(jī)芯片的選擇方案和論證 32.2 顯示模塊選擇方案和論證 42.3 溫度傳感器的選擇方案和論證 42.4 鍵盤模塊的選擇方案和論證 52.5 時(shí)鐘芯片的選擇方案和論證 52.6 電路設(shè)計(jì)最終方案決定 53 硬件模塊圖 64 系統(tǒng)硬件仿真和軟件調(diào)試工具 64.1 ProtuesISIS簡介 64.2 KeilC51uVision2簡介 75 本研究中的主要模塊 85.1 主控模塊(AT89C52模塊) 85.2 DS1302時(shí)鐘模塊 95.3 DS18B20溫度模塊 145.2 LCD1602顯示模塊 195.3 時(shí)間可調(diào)模塊 236 實(shí)驗(yàn)結(jié)果 247 設(shè)計(jì)總結(jié) 26結(jié)束語 27鳴謝 28參考文獻(xiàn) 29附錄1 30附錄2 31緒論課題研究目的和意義隨著人們的生活水平不斷提高,工作節(jié)奏不斷加快,人們對時(shí)間的準(zhǔn)確把握要求越來越高,倘若因?yàn)槠渌蚨浟藭r(shí)間,這將會帶來巨大的損失。雖然在日常生活中,各種設(shè)備如手表、手機(jī)等給我們提供了準(zhǔn)確的時(shí)間信息,但是在大多數(shù)場合卻僅僅局限于個(gè)人的使用范圍之內(nèi)。在家居生活中,在社會工作中,一款高掛于墻上設(shè)計(jì)獨(dú)特的電子萬年歷不僅能為我們提供準(zhǔn)確的時(shí)間信息,而且美化了環(huán)境,給單調(diào)的工作、生活帶來了現(xiàn)代化氣息,因而成為了許多人的必備之選。隨著電子萬年歷多功能化,它在各種領(lǐng)域的使用越來越廣泛,給人們的生活、學(xué)習(xí)、工作帶來了極大的方便。電子萬年歷具有設(shè)計(jì)美觀、功能多樣、直觀清晰、信息量大等優(yōu)點(diǎn),正成為家庭、商場、公共場所等新的消費(fèi)熱點(diǎn),有著巨大的市場潛力。萬年歷的國內(nèi)外發(fā)展?fàn)顩r概況從現(xiàn)代電子技術(shù)發(fā)展歷程來看,大致可以分為三個(gè)典型階段:(1)20世紀(jì)70年代,在集成電路制作方面,MOS工藝得到廣泛的應(yīng)用??删幊踢壿嫾夹g(shù)及其器件已經(jīng)問世,計(jì)算機(jī)作為一種運(yùn)算工具已經(jīng)在科研領(lǐng)域得到廣泛應(yīng)用。在70年代后期,CAD的概念已現(xiàn)雛形,這一階段人們開始利用計(jì)算機(jī)輔助進(jìn)行集成電路版圖編輯、PCB布局布線等工作。(2)20世紀(jì)80年代,集成電路設(shè)計(jì)進(jìn)入了CMOS(互補(bǔ)場效應(yīng)管)時(shí)代,復(fù)雜可編程邏輯器件已經(jīng)進(jìn)入商業(yè)應(yīng)用,相應(yīng)的輔助設(shè)計(jì)軟件也已投入使用,而在80年代末期,出現(xiàn)了FPGA(FieldProgrammableGateArray),CAE和CAD技術(shù)的應(yīng)用更為廣泛,它們在PCB設(shè)計(jì)方面的原理圖輸入、自動布局布線及PCB分析,以及邏輯設(shè)計(jì)、邏輯仿真、布爾方程綜合和化簡等方面擔(dān)任了重要角色。特別是各種硬件描述語言HDL(HardwareDescriptionLanguage)的出現(xiàn)、應(yīng)用和標(biāo)準(zhǔn)化方面的重大進(jìn)步,為EDA(ElectronicDesignAutomation,電子設(shè)計(jì)自動化)技術(shù)必須解決的電路建模、標(biāo)準(zhǔn)文檔及仿真測試奠定了基礎(chǔ)。(3)進(jìn)入20世紀(jì)90年代,隨著硬件描述語言的標(biāo)準(zhǔn)化得到進(jìn)一步的確立,計(jì)算機(jī)輔助工程、輔助分析和輔助設(shè)計(jì)在電子技術(shù)領(lǐng)域獲得了更加廣泛的應(yīng)用,與此同時(shí),電子技術(shù)在通信、計(jì)算機(jī)及家電產(chǎn)品生產(chǎn)中的市場需求和技術(shù)需求,也極大地推動了全
新的電子設(shè)計(jì)自動化技術(shù)的應(yīng)用和發(fā)展。特別是集成電路設(shè)計(jì)工藝步入了超深亞微米階段,百萬門以上的大規(guī)模可編程邏輯器件的陸續(xù)面世,以及基于計(jì)算機(jī)技術(shù)的面向用戶的低成本大規(guī)模ASIC設(shè)計(jì)技術(shù)的應(yīng)用,促進(jìn)了EDA技術(shù)的形成。20世紀(jì)末期以來,電子設(shè)計(jì)技術(shù)獲得了飛速的發(fā)展?,F(xiàn)代電子技術(shù)產(chǎn)品幾乎滲透到社會的各個(gè)領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高。多功能數(shù)字鐘不管在性能還是在樣式上都發(fā)生了質(zhì)的變化,有電子鬧鐘、數(shù)字鬧鐘等等。單片機(jī)在多功能數(shù)字鐘中的應(yīng)用已是非常普遍的,人們對數(shù)字鐘的功能及工作順序都非常熟悉?;趩纹瑱C(jī)的數(shù)字鐘的設(shè)計(jì),采用靈活的編程,可以輕松的完成對數(shù)字鐘的功能擴(kuò)展。另外是以基于數(shù)字電路的多功能數(shù)字鐘。數(shù)字鐘的時(shí)鐘顯示則由最初的單個(gè)數(shù)碼管顯示,隨著科技的發(fā)展,數(shù)碼管則逐漸被液晶顯示所替代。在不斷滿足人們?nèi)找嫘枨蟮耐瑫r(shí),其功能更是再不斷擴(kuò)展。數(shù)字鐘的發(fā)展同樣進(jìn)入了新的階段,更直觀,更易于操作,功能更多,更實(shí)用的電子鐘將不斷的進(jìn)入人們的生活。市場的強(qiáng)烈需求極大地推動了現(xiàn)代電子技術(shù)的發(fā)展,產(chǎn)品的集成化程度越來越高,同時(shí)產(chǎn)品更新?lián)Q代的節(jié)奏也變得越來越快。本研究的技術(shù)要求通過查詢多方面的信息,本研究設(shè)計(jì)了一款讀取方便、顯示直觀,功能多樣、電路簡潔、成本低廉的電子萬年歷。本研究要求設(shè)計(jì)的電子萬年歷不僅能顯示時(shí)間、星期、公歷日期信息,還能實(shí)現(xiàn)整點(diǎn)報(bào)時(shí)、掉電計(jì)時(shí)、實(shí)時(shí)溫度顯示等功能。本研究指導(dǎo)思想本研究先對系統(tǒng)所需要的主要芯片進(jìn)行選擇和論證,確定了選用AT89C52單片機(jī)作為系統(tǒng)的主要控制芯片,時(shí)鐘芯片DS1302提供時(shí)鐘,DS18B20溫度傳感器實(shí)現(xiàn)實(shí)時(shí)溫度顯示,而顯示部分采用的是LCD1602顯示屏。接著簡要的介紹了系統(tǒng)的調(diào)試工具,而重點(diǎn)是對相應(yīng)主要模塊的硬件進(jìn)行詳細(xì)的講解。比如AT89C52、DS1302、DS18B20和LCD1602A等芯片的引腳功能和工作原理。有利于讀者對各模塊的理解。在最后給出全局程序和電路原理圖,讓讀者理清整個(gè)設(shè)計(jì)的來龍去脈。芯片的選擇和論證單片機(jī)芯片的選擇方案和論證方案一:采用FTC10F04單片機(jī),還帶有非易失性Flash程序存儲器。它是一種高性能、低功耗的8位CMOS微處理芯片,市場應(yīng)用最多。其主要特點(diǎn)是:8KBFlashROM,可擦除1000次以上,數(shù)據(jù)保存10年。方案二:采用AT89C52單片機(jī)作為系統(tǒng)的控制中心,它在結(jié)構(gòu)上把CPU、存儲器、定時(shí)器、I/O接口電路集成在一塊大規(guī)模的集成電路芯片上,具有集成度高、體積小、控制功能強(qiáng)、功耗低、低電壓、便于攜帶等優(yōu)點(diǎn)。所以選擇采用方案二為主要方案,方案一為備用方案。顯示模塊選擇方案和論證方案一:采用LED數(shù)碼管動態(tài)掃描,雖然LED數(shù)碼管價(jià)格適中,對于顯示數(shù)字也比較合適,然而需要顯示多位數(shù)字和字母時(shí),編程就會變得很復(fù)雜,而且占用的單片機(jī)口線多。方案二:采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對較高,所以也不用此種作為顯示.方案三:采用LCD液晶顯示屏,LCD液晶顯示屏盡管價(jià)格比較貴,但它的顯示功能強(qiáng)大,可顯示大量字符,顯示多樣,清晰可見,需要的接口線少。所以采用LCD液晶顯示屏作為顯示。溫度傳感器的選擇方案和論證方案一:使用熱敏電阻作為傳感器,用熱敏電阻與一個(gè)相應(yīng)阻值電阻相串聯(lián)分壓,利用熱敏電阻阻值隨溫度變化而變化的特性,采集這兩個(gè)電阻變化的分壓值,并進(jìn)行A/D轉(zhuǎn)換。此設(shè)計(jì)方案需用A/D轉(zhuǎn)換電路,增加硬件成本而且熱敏電阻的感溫特性曲線并不是嚴(yán)格線性的,會產(chǎn)生較大的測量誤差。方案二:采用數(shù)字式溫度傳感器DS18B20,此類傳感器為數(shù)字式傳感器而且僅需要一條數(shù)據(jù)線進(jìn)行數(shù)據(jù)傳輸,易于與單片機(jī)連接,可以去除A/D模塊,降低硬件成本,簡化系統(tǒng)電路。另外,數(shù)字式溫度傳感器還具有測量精度高、測量范圍廣等優(yōu)點(diǎn)。所以采用數(shù)字式溫度傳感器DS18B20測量溫度。鍵盤模塊的選擇方案和論證在對日期和時(shí)間進(jìn)行切換,對日期和時(shí)間進(jìn)行調(diào)節(jié)校準(zhǔn)過程中,系統(tǒng)需要產(chǎn)生激勵電流,因此需要用按鍵。方案一:使用獨(dú)立式鍵盤。獨(dú)立式鍵盤是指直接用I/O口線構(gòu)成的單個(gè)按鍵電路。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單。方案二:使用矩陣式鍵盤。矩陣式鍵盤是由行線和列線構(gòu)成,按鍵位于行、列交叉點(diǎn),行線、列線分別連接到按鍵開關(guān)的兩端。其特點(diǎn)是簡單且不增加成本,這種鍵盤適用于按鍵較多的場合。由于本系統(tǒng)需要的按鍵不多,所以采用獨(dú)立式鍵盤。時(shí)鐘芯片的選擇方案和論證方案一:直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案減少了芯片的使用,節(jié)約了成本。不過由此產(chǎn)生的誤差較大,作為一個(gè)電子萬年歷,首要技術(shù)要求就是要能準(zhǔn)確及時(shí),因此不選擇此種方法來提供時(shí)鐘。方案二:采用DALLAS公司生產(chǎn)的DS1302時(shí)鐘芯片來實(shí)現(xiàn)時(shí)鐘,DS1302芯片是一種高性能的時(shí)鐘芯片,它可以對年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)數(shù),精度高,使用壽命長,能在低電壓下工作,而且它可以利用雙電源供電,當(dāng)主電源掉電時(shí)芯片能繼續(xù)工作,滿足本設(shè)計(jì)所要求的掉電繼續(xù)計(jì)時(shí)功能。所以采用DS1302提供時(shí)鐘。電路設(shè)計(jì)最終方案決定綜上各方案所述,對此次作品的方案選定:采用AT89C52作為主控制系統(tǒng);DS1302提供時(shí)鐘;數(shù)字式溫度傳感器;LCD液晶顯示屏作為顯示模塊,按鍵采用獨(dú)立式鍵盤。硬件模塊圖本系統(tǒng)以集成芯片為主,以C語言為開發(fā)語言,通過對硬件進(jìn)行軟件編程實(shí)現(xiàn)所需要的功能。系統(tǒng)的模塊圖如圖3-1所示,以下的內(nèi)容就是根據(jù)模塊逐步實(shí)現(xiàn)的。峰鳴器鬧鈴模塊鍵盤輸入電路(峰鳴器鬧鈴模塊鍵盤輸入電路(89C52)主控模塊DS18B20溫度模塊DS18B20溫度模塊DS1302時(shí)鐘模塊DS1302時(shí)鐘模塊顯示電路顯示電路圖3-1系統(tǒng)模塊圖模塊說明:DS1302時(shí)鐘模塊可以輸出其當(dāng)前日期及時(shí)間鍵盤輸入電路可以調(diào)整日期,時(shí)間及鬧鐘的設(shè)置DS18B20溫度模塊可以測量當(dāng)前室內(nèi)的溫度峰鳴器鬧鈴模塊可以做鬧鐘提醒顯示電路則顯示當(dāng)前的系統(tǒng)運(yùn)行情況系統(tǒng)硬件仿真和軟件調(diào)試工具本系統(tǒng)的硬件仿真工具采用單片機(jī)專用仿真工具ProtuesISIS,軟件調(diào)試則采用KeilC51uVision2開發(fā)平臺。ProtuesISIS簡介ProteusISIS是英國Labcenter公司開發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路,該軟件的特點(diǎn)是:(1)實(shí)現(xiàn)了單片機(jī)仿真和SPICE電路仿真相結(jié)合。具有模擬電路仿真、數(shù)字電路仿真、單片機(jī)及其外圍電路組成的系統(tǒng)的仿真、RS232動態(tài)仿真、I2C調(diào)試器、SPI調(diào)試器、鍵盤和LCD系統(tǒng)仿真的功能;有各種虛擬儀器,如示波器、邏輯分析儀、信號發(fā)生器等。(2)支持主流單片機(jī)系統(tǒng)的仿真。目前支持的單片機(jī)類型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各種外圍芯片。(3)提供軟件調(diào)試功能。在硬件仿真系統(tǒng)中具有全速、單步、設(shè)置斷點(diǎn)等調(diào)試功能,同時(shí)可以觀察各個(gè)變量、寄存器等的當(dāng)前狀態(tài),因此在該軟件仿真系統(tǒng)中,也必須具有這些功能;同時(shí)支持第三方的軟件編譯和調(diào)試環(huán)境,如KeilC51uVision2等軟件。(4)具有強(qiáng)大的圖繪制功??傊?,該軟件是一款集單片機(jī)和SPICE分析于一身的仿真軟件,功能極其強(qiáng)大。KeilC51uVision2簡介單片機(jī)開發(fā)中除必要的硬件外,同樣離不開軟件,我們寫的匯編語言源程序要變?yōu)镃PU可以執(zhí)行的機(jī)器碼有兩種方法,一種是手工匯編,另一種是機(jī)器匯編,目前已極少使用手工匯編的方法了。機(jī)器匯編是通過匯編軟件將源程序變?yōu)闄C(jī)器碼,用于MCS-51單片機(jī)的匯編軟件有早期的A51,隨著單片機(jī)開發(fā)技術(shù)的不斷發(fā)展,從普遍使用匯編語言到逐漸使用高級語言開發(fā),單片機(jī)的開發(fā)軟件也在不斷發(fā)展,Keil軟件是目前最流行開發(fā)MCS-51系列單片機(jī)的軟件,這從近年來各仿真機(jī)廠商紛紛宣布全面支持Keil即可看出。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個(gè)集成開發(fā)環(huán)境(uVision)將這些部份組合在一起。運(yùn)行Keil軟件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空閑的硬盤空間、WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。掌握這一軟件的使用對于使用51系列單片機(jī)的愛好者來說是十分必要的,如果你使用C語言編程,那么Keil幾乎就是你的不二之選(目前在國內(nèi)你只能買到該軟件、而你買的仿真機(jī)也很可能只支持該軟件),即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會令你事半功倍。本研究中的主要模塊主控模塊(AT89C52模塊)AT89C52是一個(gè)低電壓,高性能CMOS8位單片機(jī),片內(nèi)含8kbytes的可反復(fù)擦寫的Flash只讀程序存儲器和256bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,AT89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。其主要特點(diǎn)如下:兼容MCS51指令系統(tǒng)8kB可反復(fù)擦寫(大于1000次)FlashROM;32個(gè)雙向I/O口;256x8bit內(nèi)部RAM;3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷;時(shí)鐘頻率0-24MHz;2個(gè)串行中斷,可編程UART串行通道;2個(gè)外部中斷源,共8個(gè)中斷源;2個(gè)讀寫中斷口線,3級加密位;低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能;有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求。圖5.1-1AT89C52封裝圖DS1302時(shí)鐘模塊DS1302簡介DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM。通過簡單的串行接口與單片機(jī)進(jìn)行通信,實(shí)時(shí)時(shí)鐘/日歷電路提供秒分時(shí)日月年的信息,每月的天數(shù)和閏年的天數(shù)可自動調(diào)整。時(shí)鐘操作可通過AM/PM指示決定采用24或12小時(shí)格式。DS1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,僅需用到三個(gè)口線。1.RES復(fù)位,2.I/O數(shù)據(jù)線,3.SCLK串行時(shí)鐘。時(shí)鐘/RAM的讀/寫數(shù)據(jù)以一個(gè)字節(jié)或多達(dá)31個(gè)字節(jié)的字符組方式通信。DS1302工作時(shí)功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。DS1302是由DS1202改進(jìn)而來,增加了以下特性:雙電源管腳用于主電源和備份電源供應(yīng),Vcc1為可編程涓流充電電源,附加七個(gè)字節(jié)存儲器,備份電源可由大容量電容(1F)替代。它廣泛應(yīng)用于電話傳真便攜式儀器以及電池供電的儀器儀表等產(chǎn)品領(lǐng)域。主要性能如下:實(shí)時(shí)時(shí)鐘具有能計(jì)算2100年之前的秒,分,時(shí),日,星期,月,年的能力。31*8位暫存數(shù)據(jù)存儲RAM串行I/O口方式使得管腳數(shù)量最少寬范圍工作電壓:2.0V~5.5V工作電流:2.0V時(shí),小于300nA讀/寫時(shí)鐘或RAM時(shí),有兩種傳送方式:單字節(jié)傳送和多字節(jié)傳送(字符組方式)8腳DIP封裝或可選的8腳SOIC封裝簡單的3線串行I/O接口與TTL/COMS兼容(VCC=5V時(shí))可選工業(yè)級溫度范圍:-40oC~+85oCDS1302結(jié)構(gòu)DS1302的引腳如圖5.2-1所示。118273645VCC2VCC1X1SCLKX2I/OGNDRST圖5.2-1DS1302的引腳圖(2)引腳功能如表5-1所示。表5-1引腳功能表引腳號引腳名稱功能1Vcc2主電源引腳2,3X1,X2振蕩源,外接32.768KHz晶振4RST復(fù)位/片選端5GND接地6I/O串行數(shù)據(jù)輸入/輸出端(雙向)7SCLK串行時(shí)鐘輸入端8Vcc1備用電源DS1302工作原理串行時(shí)鐘芯片主要由寄存器、控制寄存器、振蕩器、實(shí)時(shí)時(shí)鐘以及RAM組成。為了對任何數(shù)據(jù)傳送進(jìn)行初始化,需要將RST置為高電平且將具有地址和控制信息的8位數(shù)據(jù)(控制字節(jié))裝入移位寄存器。數(shù)據(jù)在SCLK的上升沿串行輸入,前8位指定訪問地址,命令字裝入移位寄存器后,在之后的時(shí)鐘周期,讀操作時(shí)輸出數(shù)據(jù),寫操作時(shí)輸入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8加8(8位地址加8位數(shù)據(jù)),在多字節(jié)突發(fā)模式方式下為8加最多可達(dá)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í)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù);位5至位1指示操作單元的地址;最低有效位(位0)為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作,控制字節(jié)總是從最低位開始輸出。(2)日歷、時(shí)鐘寄存器DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)為BCD碼形式。其日歷、時(shí)間寄存器及其控制字如表5.2-4所示。寄存器的選擇由命令字而定,日歷,時(shí)鐘各個(gè)寄存器與控制字對照表如表5-3所示。表5-3日歷、時(shí)鐘寄存器與控制字對照表寄存器名稱D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/W秒寄存器1000000分寄存器1000001小時(shí)寄存器1000010日寄存器1000011月寄存器1000100星期寄存器1000101年寄存器1000110寫保護(hù)寄存器1000111慢充電寄存器1010000時(shí)鐘突發(fā)寄存器1011111最后一位RD/W為0表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。表5-4為主要寄存器命令字、取值范圍以及各位內(nèi)容對照表。表5-4DS1302的日歷、時(shí)鐘寄存器表寄存器名稱命令字取值范圍各位內(nèi)容寫操作讀操作76543~0秒寄存器80H81H00~59CH10SECSEC分寄存器82H83H00~59010MINMIN小時(shí)寄存器84H85H01~12或00~2312/24010A/PHRHR日寄存器86H87H01~28,29,30,310010DATEDATE月寄存器88H89H01~1200010MMONTH星期寄存器8AH8BH01~070000DAY年寄存器8CH8DH01~0910YEARYEAR寫保護(hù)寄存器8EH8FHWP0000慢充電寄存器90H91HTCSTCSTCSTCSDSDSRSRS時(shí)鐘突發(fā)寄存器BEHBFH特殊位的說明:CH:時(shí)鐘暫停位。當(dāng)此位設(shè)置為1時(shí),振蕩器停止,DS1302處于低功耗空閑狀態(tài),這時(shí)芯片消耗電流將小于100NA;當(dāng)此位為0時(shí),振蕩器啟動,時(shí)鐘開始啟動。12/24:12或24小時(shí)方式選擇位。為1時(shí)選擇12小時(shí)方式,在12小時(shí)方式下,位5是AM/PM選擇位,此位為1時(shí)表示PM。為0時(shí)選擇24小時(shí)方式,在24小時(shí)方式下,位5是第2個(gè)小時(shí)位(20~23時(shí))。WP:寫保護(hù)位。寫保護(hù)寄存器的開始7位(0~6)置為0,在讀操作時(shí)總是讀出0。在對時(shí)鐘或RAM進(jìn)行寫操作之前,位7(WP)必須為0,當(dāng)它為高電平時(shí),寫保護(hù)位防止對任何其他寄存器進(jìn)行寫操作。TCS:控制慢充電的選擇,為了防止偶然因素使DS1302工作,只有1010模式才能使慢速充電工作。DS:二極管選擇位。如果DS為01,那么選擇一個(gè)二極管;如果DS為10,則選擇兩個(gè)二極管;如果DS為11或00,那么充電器被禁止,與TCS無關(guān)。RS:選擇連接在VCC2與VCC1之間的電阻,如果RS為00,那么充電器被禁止,與TCS無關(guān)。選擇的電阻如表5-5所示。表5-5RS與所選電阻對照表RS位電阻器典型值00無無01R12KΩ10R24KΩ11R38KΩ由上所述,根據(jù)涓流充電寄存器的不同編程,可得到不同的充電電流。其充電電流具體計(jì)算公式如下:式中,5.0V為VCC2腳所接入的工作電壓,VD為二極管正向壓降0.7V,R為寄存器0和1位編碼決定的電阻值,VE為VCC1腳所接入的電壓。(3)RAM寄存器DS1302與RAM相關(guān)的寄存器分為兩類,一類是單個(gè)RAM單元,共31個(gè),每個(gè)單元組態(tài)為一個(gè)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)復(fù)位和時(shí)鐘控制通過將RST輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供了終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作。如果在傳送過程中置RST為低電平,則會終止此次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在VCC≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。(5)數(shù)據(jù)輸入/輸出數(shù)據(jù)輸入是在輸入寫命令字的8個(gè)SCLK周之后,在接下來的8個(gè)SCLK周期中的每個(gè)脈沖的上升沿輸入數(shù)據(jù),數(shù)據(jù)從0位開始。如果有額外的SCLK周期,它們將被忽略。數(shù)據(jù)輸出是在輸出讀命令字的8個(gè)SCLK周之后,在接下來的8個(gè)SCLK周期中的每個(gè)脈沖的下降沿輸出數(shù)據(jù),數(shù)據(jù)從0位開始。需要注意的是,第一個(gè)數(shù)據(jù)位在命令字節(jié)后的最后一位之后的第一個(gè)下降沿被輸出。只要RST保持高電平,如果有額外的SCLK周期,將重新發(fā)送數(shù)據(jù)字節(jié),即多字節(jié)傳送。時(shí)序圖如圖5.2-2所示。圖5.2-2時(shí)序圖DS1302電路設(shè)計(jì)圖圖5.2-3DS1302電路設(shè)計(jì)圖5.3 DS18B20溫度模塊概述美國DALLAS公司生產(chǎn)的單線數(shù)字溫度傳感器DS18B20,可把溫度信號直接轉(zhuǎn)換成串行數(shù)字信號供微機(jī)處理。由于每片DS18B20含有唯一的硅串行數(shù),所以在一條總線上可掛接任意多個(gè)DS18B20芯片。從DS18B20讀出的信息或?qū)懭隓S18B20的信息,僅需要一根口線(單線接口)。讀寫及溫度變換功率來源于數(shù)據(jù)總線,總線本身也可以向所掛接的DS18B20供電,而無需額外電源。DS18B20可提供9~12位溫度讀數(shù),構(gòu)成多點(diǎn)溫度檢測系統(tǒng)而無需任何外圍硬件。DS18B20的工作原理(1)DS18B20的性能●單線接口:僅需一根口線與MCU連接進(jìn)行通信。●多個(gè)DS18B20可以并聯(lián)在惟一的3線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能。●無需外圍元件●可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V?!窳愦龣C(jī)功耗?!駵y溫范圍:-55~125℃。固有測溫分辨率為0.5℃。●通過編程可實(shí)現(xiàn)9~12位的數(shù)字讀數(shù)方式。●用戶可自設(shè)定非易失性的報(bào)警上下限值?!裰С侄帱c(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)測溫。●報(bào)警搜索命令可識別哪片DS1820超溫度限?!褙?fù)壓特性,電源極性接反時(shí),溫度計(jì)不會因發(fā)熱而燒毀,但不能正常工作。(2)DS18B20的內(nèi)部結(jié)構(gòu)①64位ROM的結(jié)構(gòu)如圖5-7所示:圖5-764位ROM的結(jié)構(gòu)圖8位檢驗(yàn)CRC48位序列號8位工廠代碼(10H)開始8位是產(chǎn)品類型的編號,接著是每個(gè)器件的惟一的序號,共有48位,最后8位是前56位的CRC校驗(yàn)碼,這也是多個(gè)DS18B20可以采用一線進(jìn)行通信的原因。②非易失性溫度報(bào)警觸發(fā)器TH和TL,可通過軟件寫入用戶報(bào)警上下限。③高速暫存存儲器DS18B20溫度傳感器的內(nèi)部存儲器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2PROM。高速RAM包含9字節(jié)存儲器,其結(jié)構(gòu)如圖5.4-3所示。前兩個(gè)字節(jié)包含測得的溫度信息。第3和第4字節(jié)是TH和TL的拷貝,是易失的,每次上電復(fù)位時(shí)被刷新。第5個(gè)字節(jié)是配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率,DS18B20工作時(shí)按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。該字節(jié)各位的定義如表5-8所示。低5位一直都是1,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動,R1和R0決定溫度轉(zhuǎn)換的精度位數(shù),即是來設(shè)置分辨率,如表5-9所示(DS18B20出廠時(shí)被設(shè)置為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結(jié)構(gòu)圖表5-8配置寄存器TMR1R211111表5-9DS18B20分辯率的定義規(guī)定表R1R0分辯率/位溫度最大轉(zhuǎn)換時(shí)間00993.750110187.510113751112750由表5-9可見,設(shè)定的分辨率越高,所需要的溫度數(shù)據(jù)轉(zhuǎn)換時(shí)間就越長。因此,在實(shí)際應(yīng)用中要在分辨率和轉(zhuǎn)換時(shí)間權(quán)衡考慮。高速暫存RAM第6~8字節(jié)未用,表現(xiàn)為全邏輯1;第9字節(jié)讀出的是前面所有8個(gè)字節(jié)的CRC碼,可用來保證通信正確。當(dāng)DS18B20接收到溫度轉(zhuǎn)換命令后,開始啟動轉(zhuǎn)換。轉(zhuǎn)換完成后的溫度值就以16位帶符號擴(kuò)展的二進(jìn)制補(bǔ)碼形式存儲在高速暫存存儲器的第1,2字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后,數(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ù)值格式圖當(dāng)符號位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變換為原碼,再計(jì)算十進(jìn)制值。表5-10是對應(yīng)的一部分溫度值。表5-10DS18B20溫度與測得值對應(yīng)表溫度/oC數(shù)據(jù)輸出(二進(jìn)制)數(shù)據(jù)輸出(十六進(jìn)制)+125000001111101000007D0H+8500000101010100000550H+25.062500000001100100010191H+10.125000000001010001000A2H+0.500000000000010000008H000000000000000000000H-0.51111111111111000FFF8H-10.1251111111101011110FF5EH-25.06251111111001101111FE6FH-551111110010010000FC90HDS18B20完成溫度轉(zhuǎn)換后,就把測得的溫度值與TH,TL作比較,若T>TH或T<TL,則將該器件內(nèi)的告警標(biāo)志置位,并對主機(jī)發(fā)出的告警搜索命令作出響應(yīng)。因此,可用多只DS18B20同時(shí)測量溫度并進(jìn)行告警搜索。④CRC的產(chǎn)生在64bROM的最高有效字節(jié)中存儲有循環(huán)冗余校驗(yàn)碼(CRC)。主機(jī)根據(jù)ROM的前56位來計(jì)算CRC值,并和存入DS18B20中的CRC值做比較,以判斷主機(jī)收到的ROM數(shù)據(jù)是否正確。DS18B20的測溫原理DS18B20的測溫原理如圖5.4-5,圖中低溫度系數(shù)晶振的振蕩頻率受溫度的影響很小,用于產(chǎn)生固定頻率的脈沖信號送給減法計(jì)數(shù)器1,高溫度系數(shù)晶振隨溫度變化其震蕩頻率明顯改變,所產(chǎn)生的信號作為減法計(jì)數(shù)器2的脈沖輸入,圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DS18B20就對低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖后進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定,每次測量前,先將-55℃所對應(yīng)的基數(shù)分別置入減法計(jì)數(shù)器1和溫度寄存器中,減法計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55斜率累加器斜率累加器預(yù)置計(jì)數(shù)比較器預(yù)置計(jì)數(shù)比較器減法計(jì)數(shù)器1預(yù)置低溫系數(shù)振蕩器減法計(jì)數(shù)器1預(yù)置低溫系數(shù)振蕩器溫度寄存器減到0溫度寄存器減到0停止減法計(jì)數(shù)器2減到0高溫度系數(shù)振蕩器減法計(jì)數(shù)器2減到0高溫度系數(shù)振蕩器圖5.4-5DS18B20測溫原理圖減法計(jì)數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計(jì)數(shù),當(dāng)減法計(jì)數(shù)器1的預(yù)置值減到0時(shí)溫度寄存器的值將加1,減法計(jì)數(shù)器1的預(yù)置將重新被裝入,減法計(jì)數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計(jì)數(shù),如此循環(huán)直到減法計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫度。圖5.4-4中的斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正減法計(jì)數(shù)器的預(yù)置值,只要計(jì)數(shù)門仍未關(guān)閉就重復(fù)上述過程,直至溫度寄存器值達(dá)到被測溫度值。另外,由于DS18B20單線通信功能是分時(shí)完成的,他有嚴(yán)格的時(shí)隙概念,因此讀寫時(shí)序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進(jìn)行。操作協(xié)議為:初始化DS18B20(發(fā)復(fù)位脈沖)→發(fā)ROM功能命令→發(fā)存儲器操作命令→處理數(shù)據(jù)。DS18B20與單片機(jī)的接口設(shè)計(jì)DS18B20可以采用兩種方式供電,一種是采用電源供電方式,此時(shí)DS18B20的1腳接地,2腳作為信號線,3腳接電源;另一種是寄生電源供電方式,如圖5.4-6所示。單片機(jī)端口接單線總線,為保證在有效的DS18B20時(shí)鐘周期內(nèi)提供足夠的電流,可用一個(gè)MOSFET管來完成對總線的上拉。當(dāng)DS18B20處于寫存儲器操作和溫度A/D變換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開啟時(shí)間最大為10μs。采用寄生電源供電方式是VDD和GND端均接地。由于單線制只有一根線,因此發(fā)送接收口必須是三態(tài)的。VCCMCUDS18B20MCUVCCGNDVDD5.1KI/O圖5.4-6DS18B20應(yīng)用電路DS18B20程序設(shè)計(jì)方案DS18B20電路設(shè)計(jì)圖本設(shè)計(jì)采用電源供電方式,設(shè)計(jì)電路如圖5.4-7所示。圖5.4-7DS18B20電路設(shè)計(jì)圖LCD1602顯示模塊概述LCD1602可以顯示2行16個(gè)字符,有8位數(shù)據(jù)總線D0-D7,和RS、R/W、EN三個(gè)控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{(diào)節(jié)和背光。缺點(diǎn):不能使用中文,不能顯示圖形。引腳圖及引腳功能LCD1602的引腳如圖5.7-1所示。圖5.7-1LCD1602的引腳圖引腳說明:第1腳:VSS為地第2腳:VDD接5V正電源第3腳:VEE為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高,對比度過高時(shí)會產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度,或直接通過一個(gè)電阻到地.第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光正極第16腳:背光負(fù)極字符發(fā)生存儲器(CGROM)1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個(gè)不同的點(diǎn)陣字符圖形,表5-11給出CGROM中部分字符代碼與字符圖形的對應(yīng)關(guān)系,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。表5-11CGROM中部分字符代碼與字符圖形的對應(yīng)關(guān)系表高位底位0000001000110100010101100111xxxx0000(1)0@P\pxxxx0001(2)!1AQaqxxxx0010(3)”2BRbrxxxx0011(4)#3CScsxxxx0100(5)﹩4DTdtxxxx0101(6)%5EUeuxxxx0110(7)&6FVfv控制指令1602液晶模塊內(nèi)部的控制器共有11條控制指令,如下表5-12所示,表5-121602液晶模塊內(nèi)部的控制器中的指令表指令RSR/WD7D6D5D4D3D2D1D01清顯示00000000012光標(biāo)返回000000001*3置輸入模式00000001I/DS4顯示開關(guān)控制0000001DCB5光標(biāo)或字符移位000001S/CR/L**6置功能00001DLNF**7置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址(AGG)8置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計(jì)數(shù)器地址10寫數(shù)到CGROM或DDRAM10要寫的數(shù)11CGROM或DDRAM讀數(shù)11讀出的數(shù)據(jù)它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H指令3:光標(biāo)和顯示模式設(shè)置I/D:光標(biāo)移動方向,高電平右移,低電平左移S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效指令4:顯示開關(guān)控制。D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo)B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍指令5:光標(biāo)或顯示移位S/C:高電平時(shí)移動顯示的文字,低電平時(shí)移動光標(biāo)指令6:功能設(shè)置命令DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示F:低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符(有些模塊是DL:高電平時(shí)為8位總線,低電平時(shí)為4位總線)指令7:字符發(fā)生器RAM地址設(shè)置指令8:DDRAM地址設(shè)置指令9:讀忙信號和光標(biāo)地址BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)指令11:讀數(shù)據(jù)1602的內(nèi)部顯示地址液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,表5-13是1602的內(nèi)部顯示地址.表5-131602的內(nèi)部顯示地址表12345678910111213141516000102030405060708090A0B0C0D0E0F第一行404142434445464748494A4B4C4D4E4F第二行比如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)LCD1602電路設(shè)計(jì)圖圖5.7-2LCD1602電路設(shè)計(jì)圖時(shí)間可調(diào)模塊鍵盤掃描原理如圖5.6-1所示,鍵盤是由多個(gè)按鍵組成。首先將與按鍵相接的單片機(jī)接口都置高電平,當(dāng)沒有按鍵按下時(shí),單片機(jī)和地線之間是不相連的,若第N個(gè)鍵被按下,則接這個(gè)鍵的單片機(jī)接口為低電平,通過查詢接到按鍵的單片機(jī)接口,就知道是第N個(gè)按鍵被按下,從而進(jìn)行相應(yīng)程序處理。圖5.6-1按鍵電路設(shè)計(jì)圖按鍵說明KEY1:選擇相應(yīng)要調(diào)節(jié)的值。KEY2:數(shù)值加1。KEY3:數(shù)值減1。KEY4:鬧鐘的開啟與關(guān)閉。實(shí)驗(yàn)結(jié)果電子萬年歷是多功能數(shù)字型的,可以顯示當(dāng)前日期、時(shí)間以及溫度,因此對于它的程序也是相對復(fù)雜的。在編寫程序和調(diào)試過程中出現(xiàn)了一些問題,經(jīng)過反復(fù)多次的修改,最終解決了軟件問題,成功實(shí)現(xiàn)本設(shè)計(jì)的各項(xiàng)功能。調(diào)試開始畫面調(diào)試成功畫面萬年歷成品設(shè)計(jì)總結(jié)本設(shè)計(jì)以ATMEL公司的AT89C52層為主控芯片,配合專用的時(shí)鐘芯片及軟件能穩(wěn)定地顯示當(dāng)前時(shí)間,室內(nèi)溫度及完成公農(nóng)歷轉(zhuǎn)換。本設(shè)計(jì)的方案選擇與當(dāng)前主流的設(shè)計(jì)思想吻合,所用到的模塊具有很高的實(shí)用性,特別是編程語言選用硬件C為系統(tǒng)的移植提供了很大的方便。由于硬件設(shè)備問題,所以設(shè)計(jì)的硬件以單片機(jī)專用仿真軟件ProtuesISIS6.9SP4為開發(fā)平臺,軟件以keil51為開發(fā)平臺,這為系統(tǒng)的軟硬件調(diào)試提供了很大方便。與市面上的大多數(shù)萬年歷以分立元件為主不同,本設(shè)計(jì)大多使用集成芯片。集成芯片的穩(wěn)定性,可靠性及資源利用率都遠(yuǎn)優(yōu)于分立元件。這對系統(tǒng)的長時(shí)間穩(wěn)定工作有決定性的作用。另外,為了充分利用89C52及提高系統(tǒng)的實(shí)用性,使用了Dallas公司的溫度傳感器18B20,使系統(tǒng)在完成基本功能的同時(shí)能顯示當(dāng)前溫度。當(dāng)然,任何事情都有雙面性,系統(tǒng)采用了大規(guī)模集成模塊在提高穩(wěn)定性的時(shí)候,也大大地增加了系統(tǒng)的設(shè)計(jì)成本。這對于生產(chǎn)應(yīng)用是致命的。另外,硬件仿真的時(shí)候采用大多采用了直插封裝,這對于系統(tǒng)的模型設(shè)計(jì)有很大的不利,在生產(chǎn)應(yīng)用中,現(xiàn)在的直插元件用得越來越少,取而代之的是貼片芯片。在軟件的設(shè)計(jì)方面,由于實(shí)力問題,有些問題還是得不到根本的解決,比如說在鬧鈴和實(shí)時(shí)顯示溫度設(shè)計(jì)優(yōu)化上就有一定的缺陷。本次設(shè)計(jì)中整點(diǎn)報(bào)時(shí)功能是當(dāng)時(shí)鐘滿整點(diǎn)時(shí),自動報(bào)出相應(yīng)時(shí)鐘點(diǎn)數(shù),但其報(bào)時(shí)功能比較單一;聲音提醒只是簡單的蜂鳴器,報(bào)警功能較為單一。相信在以后的工作中會不斷提高的軟硬件問題的能力。結(jié)束語在整個(gè)設(shè)計(jì)過程中,我充分發(fā)揮了人的主觀能動性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識。較好的完成了作品。達(dá)到了預(yù)期的目的,在最初的設(shè)計(jì)中,發(fā)揮“三個(gè)臭皮匠,頂個(gè)諸葛亮”的作用。相互學(xué)習(xí)、相互討論、研究。完了最初的設(shè)想。在電路焊接時(shí)雖然沒什么大問題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來不能急于求成。反而達(dá)到事半功倍的效果。對電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來思考,和同學(xué)討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我們的耐心,做什么事都在有耐心。此次設(shè)計(jì)中學(xué)到了很多很多東西,這是最重要的??傊?,此次畢業(yè)設(shè)計(jì)讓我的能力得到了全方位的提高。鳴謝論文經(jīng)過三個(gè)月后終于完成,在做論文期間,問題一個(gè)接著一個(gè),但在宿舍同學(xué)的幫助下,問題最后也能迎刃而解。在此對他們的幫助表示最誠摯的感謝。本論文是在我的指導(dǎo)老師周玲老師的悉心指導(dǎo)下完成的。在此,特別要向本人的指導(dǎo)教師周玲老師致以誠摯的謝意。他嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),讓我學(xué)到了許多。從課題的選擇到論文的最終完成,周老師都始終給予我細(xì)心的指導(dǎo)。在論文的修訂上,亦給予了我許多寶貴的修改意見,使我在此期間獲益良多,順利的完成了畢業(yè)論文工作。參考文獻(xiàn)[1]李伯成.單片機(jī)及嵌入式系統(tǒng).清華大學(xué)出版社[2]陳陽海.單片機(jī)的典型結(jié)構(gòu)及AT89S5X系列單片機(jī).電子制作,2006[3]張毅剛.單片機(jī)原理與應(yīng)用.高等教育出版社[4]嚴(yán)天峰.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與仿真調(diào)試.北京航空航天大學(xué)出版社[5]王青.溫度傳感器DS18B20和51單片機(jī)的接口技術(shù)及應(yīng)用.電子制作,2006[6]白延敏.51單片機(jī)典型系統(tǒng)開發(fā)實(shí)例精講.北京:電子工業(yè)出版社,2009[7]戢衛(wèi)平,胡耀輝,朱朝華,葉祥,楊帆.單片機(jī)系統(tǒng)開發(fā)實(shí)例經(jīng)典.北京:冶金工業(yè)出版社,2006[8]楊壘,于泉生,郭靜梅.基于AT89S52的定時(shí)器設(shè)計(jì).山東大學(xué)學(xué)報(bào),2006[9]/cx/upfiles/200592420228840.doc附錄1萬年歷原理圖附錄2C語言編寫的源程序:#include<reg51.h>//調(diào)用頭文件#defineucharunsignedchar //宏定義用uchar來代表unsignedchar#defineuintunsignedint //宏定義用uint來代表unsignedintsbitio=P1^3; //定義DS1302數(shù)據(jù)引腳sbitrst=P1^4; //定義DS1302復(fù)位引腳sbitsclk=P1^2;//定義DS1302時(shí)鐘引腳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í)分秒數(shù)據(jù)變量uinttemph=3800,templ=500;uintvalue; //定義數(shù)據(jù)變量(用于數(shù)據(jù)轉(zhuǎn)換前暫時(shí)存貯)bitalarmclock,xianshiclock;bits1,s2,s3,s4,s5,s6,s7,s8,s9,s10,kai=1;voiddelay(uintz) //延時(shí)子程序{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延時(shí)子延時(shí){ while(i--);}//初始化函數(shù)voidInit_DS18B20(void) //DS18B20初始化{ unsignedcharx=0; DQ=1;//DQ復(fù)位 delay_18B20(8);//稍做延時(shí) DQ=0;//單片機(jī)將DQ拉低 delay_18B20(80);//精確延時(shí)大于480us DQ=1;//拉高總線 delay_18B20(14); x=DQ;//稍做延時(shí)后如果x=0則初始化成功x=1則初始化失敗 delay_18B20(20);}ReadOneChar(void) //讀一個(gè)字節(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) //寫一個(gè)字節(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);//啟動溫度轉(zhuǎn)換 delay_18B20(100); Init_DS18B20(); WriteOneChar(0xCC);//跳過讀序號列號的操作 WriteOneChar(0xBE);//讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度 a=ReadOneChar(); b=ReadOneChar(); //傳感器返回值除16得實(shí)際溫度值 //為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長度, //技巧處理后先乘25,再除4,除4用右移實(shí)現(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ù)轉(zhuǎn)換 if(s1==0) { lcddata(tab[year/10]); //顯示年十位 lcddata(tab[year%10]); //顯示年個(gè)位 } else { lcddata(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } lcddata('/'); //顯示/ value=readset(0x89);//讀取月 month=((value&0x70)>>4)*10+(value&0x0F);//轉(zhuǎn)換月 if(s2==0) { lcddata(tab[month/10]);//顯示月十位 lcddata(tab[month%10]);//顯示月個(gè)位 } else { lcddata(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } lcddata('/'); //顯示/ value=readset(0x87); //讀取日 date=((value&0x70)>>4)*10+(value&0x0F); //轉(zhuǎn)換日 if(s3==0) { lcddata(tab[date/10]); //顯示日十位 lcddata(tab[date%10]); //顯示日個(gè)位 } else { lcddata(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } value=readset(0x8b);//讀取星期 day=value; //轉(zhuǎn)換星期 lcdcom(0x8c);//寫入要顯示的地址 if(s4==0) { for(i=0;i<3;i++) { lcddata(tab_xingqi[day-1][i]);//顯示星期 } } else { lcddata(''); lcddata(''); lcddata(''); } value=readset(0x85); //讀小時(shí) hour=((value&0x70)>>4)*10+(value&0x0F); //轉(zhuǎn)換小時(shí) lcdcom(0xc0); if(s5==0) { lcddata(tab[hour/10]);//顯示小時(shí)十位 lcddata(tab[hour%10]); //顯示小時(shí)個(gè)位 } else { lcddata(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } lcddata(':'); //顯示: value=readset(0x83); //讀分鐘 minute=((value&0x70)>>4)*10+(value&0x0F);//轉(zhuǎn)換分鐘 if(s6==0) { lcddata(tab[minute/10]); //顯示分鐘十位 lcddata(tab[minute%10]); //顯示分鐘個(gè)位 } else { lcddata(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } lcddata(':'); //顯示: value=readset(0x81); //讀取秒 second=((value&0x70)>>4)*10+(value&0x0F);//轉(zhuǎn)換秒 lcddata(tab[second/10]); //顯示秒十位 lcddata(tab[second%10]); //顯示秒個(gè)位 tmp=ReadTemperature();//讀取溫度 lcdcom(0xca); //寫入要現(xiàn)實(shí)的地址 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(''); //顯示空白實(shí)現(xiàn)閃爍 lcddata(''); } lcddata(':'); if(s8==0) { lcddata(tab[fen/10]); lcddata(tab[fen%10]); } else { lcddata(''); //顯示空白實(shí)現(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); //延時(shí)消抖 key++; //再次按下加一,切換下一位 if(key>10) { key=0; //按夠一圈返回 xianshiclock=0; //顯示時(shí)鐘 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;//小時(shí)加一 case6:minute++;if(minute>59)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度兒童游樂場主題設(shè)計(jì)策劃與施工合同4篇
- 2025版孟玲與張偉離婚協(xié)議及子女撫養(yǎng)費(fèi)支付與變更執(zhí)行合同4篇
- 上海住宅裝修服務(wù)合同范本(2024版)版B版
- 2025年度商鋪?zhàn)赓U合同商業(yè)秘密保護(hù)及保密協(xié)議4篇
- 2025版綠化用水合同履約驗(yàn)收與評價(jià)協(xié)議4篇
- 2025版油罐租賃及遠(yuǎn)程監(jiān)控管理系統(tǒng)合同范本3篇
- 二零二五版駕駛員薪酬激勵與考核合同3篇
- 二零二五版反擔(dān)保協(xié)議書范本匯編9篇
- 全新多媒體展覽展示合作合同(2025年度)3篇
- 2025年度醫(yī)療器械代理銷售與品牌形象塑造協(xié)議4篇
- 【探跡科技】2024知識產(chǎn)權(quán)行業(yè)發(fā)展趨勢報(bào)告-從工業(yè)轟鳴到數(shù)智浪潮知識產(chǎn)權(quán)成為競爭市場的“矛與盾”
- 《中國政法大學(xué)》課件
- GB/T 35270-2024嬰幼兒背帶(袋)
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(新題型:19題)(基礎(chǔ)篇)(含答案)
- 2022版藝術(shù)新課標(biāo)解讀心得(課件)小學(xué)美術(shù)
- 七上-動點(diǎn)、動角問題12道好題-解析
- 2024年九省聯(lián)考新高考 數(shù)學(xué)試卷(含答案解析)
- 紅色歷史研學(xué)旅行課程設(shè)計(jì)
- 下運(yùn)動神經(jīng)元損害綜合征疾病演示課件
- 2023中考地理真題(含解析)
- JJF 1101-2019環(huán)境試驗(yàn)設(shè)備溫度、濕度參數(shù)校準(zhǔn)規(guī)范
評論
0/150
提交評論