




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、微控制器系統(tǒng)原理設計報告 題 目:基于S08的萬年歷設計摘要電子萬年歷是一種非常廣泛日常計時工具,在現(xiàn)代社會越來越流行。單片機以其高可靠性、高性價比、低電壓、低功耗等一系列優(yōu)點,近幾年得到迅 猛發(fā)展和大范圍推廣,廣泛應用于工業(yè)控制系統(tǒng)、通訊設備、日常消費類產(chǎn)品和 玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個環(huán)節(jié)以及人民生活的各個方面,如車間 流水線控制、自動化系統(tǒng)等、智能型家用電器(冰箱、空調(diào)、彩電)等。用單片 機來控制的小型家電產(chǎn)品具有便攜實用,操作簡單的特點。當今的電子萬年歷不僅可以顯示年、月、日、時、分、秒、星期,有些萬年 歷還可以顯示當時當?shù)氐臏囟?,附帶功能還包括整點鬧鈴、定時鬧鈴等。安全性
2、也越來越能得到保障,部分電子萬年歷具有防爆、防震、防火、防水的特性。顯示屏的選擇也更加豐富,可以選擇LED顯示或LCD顯示。本文設計的電子萬年歷屬于小型智能家用電子產(chǎn)品。利用飛思卡爾 MC9S08AW60單片機進行控制,實時時鐘芯片采用DS12C887,外加掉電存儲電路、顯示電路和18B20溫度測量電路,可實現(xiàn)時間的調(diào)整、顯示以及溫度的顯示。關(guān)鍵詞:MC9S08AW60 DS12C887時鐘芯片 萬年歷 1、概述1 1.1 課題的背景、研究意義11.2功能介紹12、硬件電路的設計與實現(xiàn)12.1 硬件總體設計框圖12.3 主要單元電路的設計22.3.1單片機主控制模塊的設計22.3.2溫度測量模
3、塊32.3.3 時鐘電路42.3.4 復位電路52.3.5 按鍵電路52.3.6 時鐘芯片電路62.3.7 LCD顯示電路73、系統(tǒng)的軟件設計83.1 系統(tǒng)軟件設計概述83.2 S08和DS12C887之間數(shù)據(jù)傳輸93.3 LCD顯示程序設計123.4 溫度測量模塊程序設計123.5按鍵程序設計134、系統(tǒng)的軟件調(diào)試144.1 CodeWarrior簡介144.2 程序調(diào)試14總結(jié)16參考文獻17附錄18附錄A 主程序18附錄B 溫度測量程序19附錄C LCD顯示程序23附錄C DS12C887程序24附錄D 按鍵程序28附錄E整體電路圖32 1、概述 1.1 課題的背景、研究意義 現(xiàn)市場的電
4、子鐘具有低功耗的實時時鐘電路,它們可以對年、月、日、周日、時、分、秒進行計時,還具有潤年補償?shù)裙δ?,且使用壽命長、誤差小、使用方便。電子萬年歷的出現(xiàn)給人們的生活帶來的諸多方便。目前,國際上的電子萬年歷正從模擬式向數(shù)字式、由集成化向智能化的方向飛速發(fā)展。 綜上所述此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。1.2功能介紹 本次設計主要用單片機控制程序讓它在液晶上顯示年、月、日、時、分、 秒及星期。時、分、秒的計數(shù)結(jié)果經(jīng)過數(shù)據(jù)處理可直接送顯示器顯示。當計時發(fā) 生誤差的時候可以用校時電路進行校正。時計數(shù)器計滿24
5、小時后自動向日計數(shù) 器進一,日計數(shù)器由平年、閏年的大、小月和二月的判斷應與當月相應的日期相 一致,當日計數(shù)器計滿時,向月計數(shù)器進位,月計數(shù)器計滿12月向年計數(shù)器進 位,當年計數(shù)器計滿100時所有計數(shù)器清零。還有溫度測量的設計,通過溫度測量電路測得溫度經(jīng)過單片機處理顯示在液晶顯示屏上,設計采用的是年、月、日和時、分、 秒、星期和當時溫度同時顯示,另外本次設計還具有鬧鐘的功能。2、硬件電路的設計與實現(xiàn)2.1 硬件總體設計框圖此設計在液晶上顯示年、月、日、時、分、秒及星期,其原理框圖如下圖 所示,電路一般包括以下幾個部分:單片機模塊、時鐘模塊、鍵盤模塊及顯示模塊、測溫模塊、鬧鐘模塊、電源模塊。主控芯
6、片采用飛思卡爾的MC9S08AW60單片機,時鐘 芯片采用DS12C887。2.2 硬件系統(tǒng)概述本電路是由MC9S08AW60單片機為控制核心,具有在線編程功能,低功耗,能在3V超低壓工作;時鐘電路由DS12C887提供,它是一種高性能、低功耗、帶RAM的實時時鐘電路,可計算到2100年前的秒、分、小時、星期、日期、月、年七種日歷信息并帶閏年補償,自帶晶體振蕩器和鋰電池,在沒有外部電源的情況下可工作10年。工作電壓為3.5V5.5V。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)??僧a(chǎn)生年、月、日、周日、時、分、秒,具有使用壽命長,精度高和低功耗等特點
7、,;溫B度的采集由DS18B20構(gòu)成;顯示部份由LCD1602個液晶屏組成。測溫模塊由DS18B02組成。鍵盤模塊用來校準日期和時間,還可以進行定時。2.3 主要單元電路的設計2.3.1單片機主控制模塊的設計本設計的主控芯片采用飛思卡爾的MC9S08AW60單片機,其是低成本、高性能8位微處理器S08家族中的成員。Freescale的S08系列8位MCU由于其穩(wěn)定性高、開發(fā)周期短、成本低、型號多樣、兼容性好而被廣泛應用。MCU的最小系統(tǒng)是指可以使內(nèi)部程序運行所必需的外圍電路。一般情況下,MCU的硬件最小系統(tǒng)由BDM下載器接口、晶振及復位等電路組成。如圖一所示。圖一MCU硬件最小系統(tǒng)電路圖2.3
8、.2溫度測量模塊根據(jù)DS18B20 中文資料典型測溫電路,設計電路如下:圖二 溫度測量模塊(1) GND 為電源地;(2) DQ 為數(shù)字信號輸入/輸出端;(3) VDD 為外接供電電源輸入端; DS18B20 與S08 通信分析: 當程序運行時,首先將DS18B20 初始化,設置好要求的初始值,再調(diào)用溫度讀取子程序讀取溫度測量值,當溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補碼形式存放在高速暫存存儲器的第0 和第1 個字節(jié)。單片機可通過單線接口讀到該數(shù)據(jù),讀取時低位在前,高位在后。對應的溫度計算:當符號位S=0 時,直接將二進制位轉(zhuǎn)換為十進制;當S=1時,先將補碼變?yōu)樵a,再計算十進制值。
9、第九個字節(jié)是冗余檢驗字節(jié)。 DS18B20暫存寄存器分布寄存器內(nèi)容字節(jié)地址溫度值低位0 溫度值高位1 高溫限值TH2低溫限值TL3 配置寄存器4 保留5 保留6 保留7CRC 檢驗8。 溫度數(shù)據(jù)的計算處理方法:從DS18B20 讀取出的二進制值必須先轉(zhuǎn)換成十進制值,才能用于字符的顯示。因為DS18B20 的轉(zhuǎn)換精度為912 位可選項的,為了提高精度采用12 位。在采用12 位轉(zhuǎn)換精度時,溫度寄存器里的值是以0.0625 為步進的,即溫度值為溫度寄存器里的二進制值乘以0.625,就是實際的二進制溫度值。一個十進制值和二進制值之間有很明顯的關(guān)系,就是把二進制的高字節(jié)的低半字節(jié)和低字節(jié)的低半字節(jié)化成
10、十進制后,就是溫度值的小數(shù)部分。小數(shù)部分因為是半個字節(jié),所以二進制值范圍是0F,轉(zhuǎn)換成十進制小數(shù)值就是0。0625 的倍數(shù)(015)。采用1 位顯示小數(shù),可以精確到0.1。2.3.3 時鐘電路 S08AW的時鐘信號外部震蕩接外部晶振,其電路圖如圖二所示。 電容器C1、C2起穩(wěn)定震蕩頻率、快速起振的作用,電容值一般為5-30pF,晶振通常選用6MHZ、12MHZ、24MHZ。內(nèi)部震蕩方式所得的時鐘信號比較穩(wěn)定。圖三 時鐘振蕩電路2.3.4 復位電路 復位操作是為了完成S08AW內(nèi)部電路的初始化,使S08AW從一種確定的狀態(tài)開始運行。當S08AW的復位引腳RST出現(xiàn)2個機器周期以上,S0
11、8AW就完成了復位操作。如果RST持續(xù)為高電平,S08AW就處于循環(huán)復位狀態(tài)。 復位通常有2種基本形式:上電復位和開關(guān)復位。上電復位要求要求接通電源后,自動實現(xiàn)復位操作。開關(guān)復位要求在電源接通的條件下,在S08AW運行期間,用按鈕開關(guān)操作使S08AW復位。本次采用的是常用的上電且開關(guān)復位電路,如圖三所示圖四 復位電路上電后,由于電容充電,使RST持續(xù)一段高電平時間。當S08AW已在運行之中時,按下復位鍵也能使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電且開關(guān)復位的操作。通常選擇C=1030F,R=101000。復位操作使S08AW進入初始化過程,其中包括使程序計數(shù)器PC=0000H,其它
12、寄存器處于零。2.3.5 按鍵電路本次設計采用的液晶顯示器,對時間或日期的修改比較方便,所以為了簡化電路,使其變得簡單易操作,所以設計值采用了三個按鍵:S1、S2、S3。其中S1鍵作為功能鍵即把光標放置在需要進行修改的日期或時間的位置上;鍵S2是增加鍵,按下按鍵光標閃動的位置其數(shù)值就會增加1;鍵S3是減少鍵,原理同鍵S2一樣。如圖四所示。圖五 按鍵電路2.3.6 時鐘芯片電路本文設計采用的時鐘日歷芯片為美國DALLAS公司的新型時鐘日歷芯片DS12C887。由于DS12C887能夠自動產(chǎn)生世紀、年、月、日、時、分、秒等時間信息,其內(nèi)部又增加了世紀寄存器,從而利用硬件電路解決子“千年”問題;DS
13、12C887中自帶有鋰電池,外部掉電時,其內(nèi)部時間信息還能夠保持10年之久;對于一天內(nèi)的時間記錄,有12小時制和24小時制兩種模式。在12小時制模式中,用AM和PM區(qū)分上午和下午;時間的表示方法也有兩種,一種用二進制數(shù)表示,一種是用BCD碼表示;DS12C887中帶有128字節(jié)RAM,其中有11字節(jié)RAM用來存儲時間信息,4字節(jié)RAM用來存儲DS12C887的控制信息,稱為控制寄存器,113字節(jié)通用RAM使用戶使用;此外用戶還可對DS12C887進行編程以實現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進行屏蔽。GND、VCC:直流電源,其中VCC接+5V輸入,GND接地。當VCC輸入為+5V
14、時,用戶可以訪問DS12C887內(nèi)RAM中的數(shù)據(jù),并可對其進行讀、寫操作;當VCC輸入小于+4.25V時,禁止用戶對內(nèi)部RAM進行讀、寫操作,此時用戶不能正確獲取芯片內(nèi)的時間信息;當VCC輸入小于+3V時,DS12C887會自動將電源切換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。對比PCF8563與DS12C887兩種芯片的性能,最終決定選擇功能豐富,性能可靠,質(zhì)量好,功耗低的DS12C887。 圖六 時鐘芯片電路DS12C8872.3.7 LCD顯示電路LCD(Liquid Crystal Display)作為電子信息產(chǎn)品的主要顯示器件,相對于其他類型的顯示部件有其自身的特點,主要
15、包括:低電壓微功耗、平板型結(jié)構(gòu)、使用壽命長、被動顯示、顯示信息量大、易于彩色化、無電磁輻射等。LCD與AW60的連接方式如圖六所示圖七 LCD與S08AW60的硬件連接3、系統(tǒng)的軟件設計在硬件電路確定之后,則系統(tǒng)所有的智能功能要由軟件來完成。軟件是整個控制系統(tǒng)設計的核心,它具有充分的靈活性,可以根據(jù)系統(tǒng)的要求而變化,對于同樣的硬件系統(tǒng),配以不同的軟件系統(tǒng),所實現(xiàn)的功能也就不一樣,而且有此硬件電路的功能都可以用軟件來實現(xiàn)。所以對于一個系統(tǒng)設計來說,軟件系統(tǒng)常常比硬件系統(tǒng)需要更多的工作量。整個系統(tǒng)的硬件組成相對簡單,較小的硬件開銷需要相對復雜的軟件進行補償,下面較為詳細地分析軟件的設計。3.1 系
16、統(tǒng)軟件設計概述本系的軟件采用結(jié)構(gòu)化模塊程序設計,所謂“模塊”,實質(zhì)上就是具有一定功能、相對獨立的程序段。其基本思路是將整個控制系統(tǒng)的功能分解為幾個相對獨立的標準模塊,使其中的每一個程序模塊完成某一特定的控制功能,并且分別只有一個入口和出口中,這樣就可以對每一個程序分別定義無歧義性的輸入變量和輸出變量,使它們的運行相對地不受其它程序的影響,從而增強了系統(tǒng)的可靠性。模塊設計的主要特點是:單模塊比一個完整的程序容易編寫、查錯和測試;模塊可以實現(xiàn)共享,一個模塊可被多個任務在不同的條件下調(diào)用;把輸入/輸出封裝起來,可以使程序其余部分免受經(jīng)常變動;輸入/輸出放入模塊使得程序很容易適應輸入/輸出設備的變動。
17、這樣的設計有利于程序化碼的優(yōu)化,而且便于設計、調(diào)試和維護。軟件結(jié)構(gòu)采用模塊化設計方法,將所要完成的功能分別編寫和調(diào)試,所有模塊調(diào)試成功以后,將各個模塊連接成軟件系統(tǒng)。在本電子萬年歷的設計中,軟件系統(tǒng)包括主程序、LCD顯示程序、鍵盤調(diào)整程序等模塊。其整體程序流程圖如圖七所示。圖八 整體程序流程圖3.2 S08和DS12C887之間數(shù)據(jù)傳輸主機要向從機寫1個字節(jié)數(shù)據(jù)時,主機首先產(chǎn)生START信號,然后緊跟著發(fā)送一個從機地址,這個地址共有7位,緊接著的第8位是數(shù)據(jù)方向位(R/W),0表示主機發(fā)送數(shù)據(jù)(寫),1表示主機接收數(shù)據(jù)(讀),這時候主機等待從機的應答信號(ACK),當主機收到應答信號時,發(fā)送要
18、訪問的地址,繼續(xù)等待從機的響應信號,當主機收到響應信號時,發(fā)送1個字節(jié)的數(shù)據(jù),繼續(xù)等待從機的響應信號,當主機收到響應信號時,產(chǎn)生停止信號,結(jié)束傳送過程。S08向DS12C887寫一個字節(jié)數(shù)據(jù)的流程圖如圖八所示。圖九 AW60向PCF8563寫一個數(shù)據(jù)流程圖S08向DS12C887中寫一個字節(jié)數(shù)據(jù)的具體C語言程序如附錄所示。當主機要從從機讀1個字節(jié)數(shù)據(jù)時,主機首先產(chǎn)生START信號,然后緊跟著發(fā)送一個從機地址,注意此時該地址的第8位為0,表明是向從機寫命令,這時候主機等待從機的應答信號(ACK),當主機收到應答信號時,發(fā)送要訪問的地址,繼續(xù)等待從機的應答信號,當主機收到應答信號后,主機要改變通信
19、模式,所以主機發(fā)送重新開始信號,然后緊跟著發(fā)送一個從機地址,注意此時該地址的第8位為1,表明將主機設置成接收模式開始讀取數(shù)據(jù),這時主機等待從機的應答信號,當主機收到應答信號時,就可以接收1個字節(jié)的數(shù)據(jù),當接收完成后,主機發(fā)送非應答信號,表示不再接收數(shù)據(jù),主機進而產(chǎn)生停止信號,結(jié)束傳送過程。S08向DS12C887讀一字節(jié)數(shù)據(jù)的流程圖如圖九所示。圖十DS12C887讀一字節(jié)數(shù)據(jù)的流程圖S08向DS12C887中讀一個字節(jié)數(shù)據(jù)的具體C語言程序如附錄所示。3.3 LCD顯示程序設計LCD顯示程序的任務是AW60主控芯片持續(xù)不斷地從PCF8563時鐘芯片中讀出相應數(shù)據(jù),之后再轉(zhuǎn)換為用于LCD顯示的數(shù)據(jù)
20、。如圖所示。圖十一 LCD顯示流程圖3.4 溫度測量模塊程序設計由于DS18B20單線通信功能為分時完成,有嚴格的時隙概念,因此讀寫時序很重要。系統(tǒng)對DS18B20的各種操作必須按協(xié)議進行。操作協(xié)議為:初始化DS18B20(發(fā)復位脈沖)發(fā)ROM功能命令發(fā)存儲操作命令處理數(shù)據(jù)。 根據(jù)單總線操作協(xié)議,首先要對DS18B20進行初始化,而初始化有嚴格的時序控制,如圖3.6所示,即總線控制器(TX)發(fā)出一個復位脈沖(至少480us的低電平),然后釋放總線進入接收狀態(tài),總線由5.1K上拉電阻上拉為高電平,探測到I/O引腳上的上升沿后,DS18B20等待15us60us后,然后發(fā)出一個存在脈沖(
21、60us240us的低電平信號)。下面是幾個驅(qū)動函數(shù): 1) Init_DS18B20(void) *功能:DS18B20初始化 2)ReadTemp(void) *功能:讀取溫度值 溫度采集模塊流程圖如圖4.3所示圖十二溫度采集模塊流程圖 3.5按鍵程序設計本設計中按鍵采用查詢法識別按鍵,程序簡單
22、。本系統(tǒng)中含有三個調(diào)整按鍵,分別命名為S1、S2、S3。在主函數(shù)里面查詢S1按鍵是否按下,S2、S3鍵的功能由S1鍵激活。這樣設計可以減少CPU的工作量,詳細程序見附錄程序清單。4、系統(tǒng)的軟件調(diào)試4.1 CodeWarrior簡介軟件調(diào)試工具使用的是Freescale CodeWarrior.。CodeWarrior Development Studio是完整的用于編程應用中硬件bring-up的集成開發(fā)環(huán)境。 采用CodeWarrior IDE,開發(fā)人員可以得益于采用各種處理器和平臺(從Motorola到TI到Intel)間的通用功能性。根據(jù)Gartner Dataquest的報告,Code
23、Warrior編譯器和調(diào)試器在商用嵌入式軟件開發(fā)工具的使用率方面排名第一。而這只是流行的CodeWarrior軟件開發(fā)工具中的兩個。CodeWarrior包括構(gòu)建平臺和應用所必需的所有主要工具 - IDE、編譯器、調(diào)試器、編輯器、鏈接器、匯編程序等。另外,CodeWarrior IDE支持開發(fā)人員插入他們所喜愛的工具,使他們可以自由地以希望的方式工作。CodeWarrior開發(fā)工作室將尖端的調(diào)試技術(shù)與健全開發(fā)環(huán)境的簡易性結(jié)合在一起,將C/C+源級別調(diào)試和嵌入式應用開發(fā)帶入新的水平。開發(fā)工作室提供高度可視且自動化的框架,可以加速甚至是最復雜應用的開發(fā),因此對于各種水平的開發(fā)人員來說,創(chuàng)建應用都是
24、簡單而便捷的。它是一個單一的開發(fā)環(huán)境,在所有所支持的工作站和個人電腦之間保持一致。在每個所支持的平臺上,性能及使用均是相同的。無需擔心主機至主機的不兼容。4.2 程序調(diào)試(一) 創(chuàng)建新工程:點擊FileNew Project圖十三 新建工程步驟1選中MC9S08AW60芯片,并選擇 HCS08 Open Source BDM,接著點“下一步”圖十四 新建工程步驟2選擇C語言編寫,定義工程名稱為“E-calendar.mcp”,并選擇工程位置。圖十五 新建工程步驟3將程序代碼添加進工程中,進行編譯圖十六 對工程編譯總結(jié) 論文首先對本設計作了簡要描述,最后確定該設計采用電源模塊、時鐘模塊、顯示模塊
25、、鍵盤接口模塊、溫度測量模塊和鬧鐘模塊共六個模塊組成,接著分別從硬件系統(tǒng)和軟件系統(tǒng)兩方面對基于單片機的電子萬年歷設計作了詳細論述,另外還簡要介紹了一下系統(tǒng)的調(diào)試。 在整個設計過程中,硬件方面主要設計了S08AW60單片機的最小系統(tǒng)、DS12C887接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個渠道的資料,主要設計了陽歷數(shù)據(jù)讀取程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過一塊S08AW60開發(fā)板,再借助于CodeWarrior以及少許自己搭建的外圍電路實現(xiàn)的;再此過程中,分步調(diào)試時顯示出了陽歷的日期及時間,還有實時溫度,集中調(diào)試時達到預期
26、效果。 參考文獻1 Motorola(Freescale)HCS08 Family Reference Manual,Rev1,20032 FreescaleMC9S08AW60 Data Street,Rev2,20063 AT24WC01/02/04/08/16 1K/2K/4K/8K/16K 位串行E2PROMD.廣州周立功單片機有限公司4 張萌.單片機應用系統(tǒng)開發(fā)綜合實例M. 北京:清華大學出版社,2007.7Tommy Noergarrd 著. 馬洪兵 谷源濤 譯. 嵌入式系統(tǒng)硬件與軟件架構(gòu). 北京:人民郵電出版社,20085 John Catsouli
27、s 著. 徐君明 陳振林 郭天杰 改編. 嵌入式硬件設計. 北京:中國電力出版社,20076 李廣弟. 單片機原理及應用M 北京航空航天大學出版社,2004年美Randall Hyde著,韓東海譯編程卓越之道北京:電子工業(yè)出版社,20067 加Peter Spasov著,李小洪譯微控制器原理與應用(第5版)北京:清華大學出版社,20068 繼偉. 基于ColdFire的評估系統(tǒng)的設計與實現(xiàn):碩士學位論文,江蘇;蘇州大學,20079 SCM1602 LCM 使用說明書DB長沙:長沙太陽人電子有限公司王宜懷 劉曉升 著. 嵌入式應用技術(shù)基礎教程. 北京:清華
28、大學出版社,200510 譚浩強 著. C程序設計教程. 北京:清華大學出版社,2002附錄附錄A 主程序#include <hidef.h> #include"derivative.h" #include"1206.h"#include"18b20.h"#include"ds12c887.h"int main() init_IO(); init_display();18b20_init();while(1)keyscan();if(flag=0)keyscan();/獲取顯示的值 year=read_
29、ds(8);month=read_ds(7);week=read_ds(6);day=read_ds(5);shi=read_ds(4);fen=read_ds(2);miao=read_ds(0);Tem=get_temp(); /顯示 write_sfm(7,miao);write_sfm(4,fen);write_sfm(7,shi);write_week(week);write_nyr(3,year); write_nyr(6,month);write_nyr(9,day);write_date(9,Tem); return 0; EnableInterrupts; /* 開中斷 */
30、 for(;) _RESET_WATCHDOG(); 附錄B 溫度測量程序#ifndef _18b20_H_#define _18b20_H_#define unit unsigned int#define uchar unsigned char#define DQ_H PTBDD_PTBDD3=1 / 設為輸入,上拉電阻把總線拉高,即電阻上拉#define DQ_L PTBDD_PTBDD3=0#define DQ_0 PTBDD_PTBD3=0 /P1.1 設為輸入,輸出低電平,把總線拉低,即總線主器件拉低int 18b20_init();void writebit(unsigned ch
31、ar bit);unsigned char readbit();void write_byte(unsigned char byte);unsigned char read_byte();float get_temp();#endif#include"18b20.h"/延時函數(shù) z表示ms void delay(unit z)unit x,y;for(x=2*z;x>0;x-) for(y=0x1996;y>0;y-) _RESET_WATCHDOG; void delay_us(unit z) uint y; for(y=z;y>0;y-) _RESET
32、_WATCHDOG; /* 名 稱:reset()* 功 能:檢測 DS18B20 初始化序列* 入口參數(shù):無* 出口參數(shù):int t。t=1,DS18B20 初始化;t=0,DS18B20 沒有初始化*/int 18b20_init()int t;DQ_H;delay_us(50);_NOP();_NOP();DQ_L;DQ_0; /主器件拉低delay_us(500); /最少 480usDQ_H; /電阻上拉delay_us(60); /等待 1560usif(P2IN&BIT3)=0) t=1; /判斷存在脈沖,DS18B20 是否拉低else t=0;delay_us(480
33、); /最小 480usreturn(t); /若 DS18B20 復位,返回值 t=1/* 名 稱:writebit()* 功 能:單片機對 DS18B20 寫時隙* 入口參數(shù):unsigned char bit。bit=1,寫 1 時隙;bit=0,寫 0 時隙。* 出口參數(shù):無*/void writebit(unsigned char bit)DQ_L; /主器件拉低開始DQ_0;delay_us(3); /最少延時 1usif(bit) DQ_H; /電阻上拉,寫 1elseDQ_L; /主器件拉低,寫 0DQ_0;delay_us(80); /寫時隙必須至少持續(xù) 60sDQ_H;de
34、lay_us(60); /大于 1us 延時即可/* 名 稱:readbit()* 功 能:單片機對 DS18B20 讀時隙* 入口參數(shù):無* 出口參數(shù):char bit。bit=1,讀 1 時隙;bit=0,讀 0 時隙。*/unsigned char readbit()char bit;DQ_L; /主器件拉低開始DQ_0;delay_us(3); /延時大于 1usDQ_H; /IO 口設為輸出, DS18B20 拉低,則讀出 0;電阻上拉拉高,則讀出 1delay_us(3); /延時小于 15usif(P2IN&BIT5) bit=1; /判斷 IO 輸入狀態(tài)else bit
35、=0;delay_us(80); /延時大于 45usDQ_H;delay_us(60);return(bit);/* 名 稱:write_byte()* 功 能:單片機向 DS18B20 寫入一個字節(jié)* 入口參數(shù):unsigned char byte。byte 為單片機寫入的數(shù)據(jù)* 出口參數(shù):無*/void write_byte(unsigned char byte)int i;for(i=0;i<8;i+)writebit(byte&0x01); /byte 最后一位為 1,這寫 1 時隙;若為 0,則寫 0 時隙byte=byte>>1; /byte 右移一位,
36、byte 從低位到高位,逐位寫入_NOP(); /* 名 稱:read_byte()* 功 能:單片機從 DS18B20 讀出一個字節(jié)* 入口參數(shù):無* 出口參數(shù):unsigned char ans。ans 為單片機從 DS18B20 讀出的數(shù)據(jù)*/unsigned char read_byte()int t;unsigned char ans=0;for(t=0;t<8;t+)ans>>=1; /ans 右移一位if(readbit()ans|=0x80; /若讀出 1 則,ans 最高位寫入 1,寫滿 8 位_NOP();return(ans); /返回讀出的數(shù)據(jù)floa
37、t get_temp()while(!reset() /訪問 DS18B20 以一個初始化序列未開始write_byte(0xCC); /總線上只有一個 DS18B20,因此可直接跳過尋址write_byte(0x44); /開始溫度轉(zhuǎn)換delay_us(5000); /等待轉(zhuǎn)換while(!reset() /等待 DS18B20 復位write_byte(0xCC);write_byte(0xBE); /讀暫存器temp1=read_byte(); /讀出 LStemp2=read_byte(); /讀出 MSreset();t=(float)temp1*0.0625+(float)temp
38、2*16; /計算溫度值 /t=t*10+0.5; /放大 10 倍,四舍五入 return(t);附錄C LCD顯示程序#ifndef _1206_H_#define _1206_H_#define unit unsigned int#define uchar unsigned char/1206控制端引腳宏定義 #define EN_CLR PTBD_PTBD0=0#define EN_SET PTBD_PTBD0=1#define RS_CLR PTBD_PTBD2=0#define RS_SET PTBD_PTBD2=1#define RW_CLR PTBD_PTBD1=0;#defi
39、ne RW_SET PTBD_PTBD1=1;void delay(unit z);void 1602_init(); void write_com(uchar com);void write_data(uchar data);#endif#include"1206.h"/延時函數(shù) z表示ms void delay(unit z)unit x,y;for(x=2*z;x>0;x-) for(y=0x1996;y>0;y-) _RESET_WATCHDOG; void 1602_init() /1602初始化,請參考1602的資料EN_CLR; /#define
40、EN_CLR PTBD_PTBD0=0;write_com(0x38); /設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口write_com(0x0c); /光標不顯示write_com(0x06); /寫入新數(shù)據(jù)后光標右移,顯示頻不移動write_com(0x01); /0000000001 清屏write_com(0x18);void init_display()RW_CLR; /寫數(shù)據(jù)指令 1602_init();write_com(0x80);for(i=0;i<15;i+) write_data(tablei); delay(1);write_com(0x8a+0x40);for(
41、i=0;i<2;i+) write_data(table1i); delay(1);void write_com(uchar com)RS_CLR; /RS置低 輸入指令 PTA0=com; delay(5)/延時5ms EN_SET; delay(5)/延時5ms EN_CLR; /E置低 1->0 執(zhí)行指令void write_data(uchar data) /輸出數(shù)據(jù)RS_SET; /RS置高 RS=1輸出數(shù)據(jù)PTA0=data;delay(5)/延時5ms EN_SET;delay(5)/延時5ms EN_CLR; /E置低 1->0 執(zhí)行指令附錄C DS12C88
42、7程序#include"ds12c887.h"uchar code table="20 - - "uchar code table1=" : : T: "char miao,shi,fen,year,month,day,week,amiao,afen,ashi;void delay(unit z)unit x,y;for(x=z;x>0;x-) for(y=100;y>0;y-) _RESET_WATCHDOG;void di()beep=0;delay(100);beep=1; /1602液晶刷新時分秒函數(shù) 4為時,7為
43、分,10為秒 void write_sfm(uchar add,char date)char shi ge;shi=date/10;ge =date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);/ 1602液晶刷新年月日 3為年,6為月,9為日 void write_nyr(uchar add,char date) char shi ge;shi=date/10;ge =date%10;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+g
44、e);/寫液晶星期顯示函數(shù) void write_week(char we)write_com(0x80+12)switch(we)case 1: write_date('M');delay(5); write_data('N');dalay(5); write('N'); break; case 2: write_date('T');delay(5); write_data('U');dalay(5); write('E'); break;case 3: write_date('w'
45、;);delay(5); write_data('E');dalay(5);write('D');break; case 4: write_date('T');delay(5); write_data('H');dalay(5);write('U');break; case 5: write_date('F');delay(5); write_data('R');dalay(5);write('I');break; case 6: write_date('S&
46、#39;);delay(5); write_data('A');dalay(5); write('T'); break; case 7: write_date('S');delay(5); write_data('U');dalay(5); write('N'); break; void write_ds(uchar add,uchar date)dscs=0;dsas=1;dads=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1; uchar
47、read_ds(uchar add)uchar ds_date;dsrw=1;dsas=1;dscs=1;dscs=0;P0=add;dads=1;dsas=0;P0=0xff;ds_date=P0;dsds=1;dsas=1;dscs=1;return ds_date;/*void read_alarm()amiao=read_ds(1);afen=read_ds(3);ashi=read_ds(5); */void set_time() /首次上電后初始化時間函數(shù) write_ds(0,0); write_ds(1,0); write_ds(2,0); write_ds(3,0); write_ds(4,0); write_ds(5,0); write_ds(6,0); write_ds(7,0); write_ds(8,0); write_ds(9,0); 附錄D 按鍵程序void init_IO() PTAD=0XFF; PTBD=0XFF; PTDD=0XFF; PTDDD=1; PTADD=1; PTBDD=1;void keyscan() char s1num,flag,Temp; Tem=get_temp(); if(s1=0)delay(5);if(s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度汽車維修行業(yè)人才引進與培養(yǎng)合同
- 2025年度環(huán)衛(wèi)工人勞動爭議調(diào)解與處理合同
- 二零二五年度農(nóng)村宅基地租賃協(xié)議(農(nóng)村文化產(chǎn)業(yè)發(fā)展)
- 2025年度高級建造師聘用與技術(shù)咨詢服務協(xié)議
- 二零二五年度商業(yè)企業(yè)購銷合同印花稅稅率調(diào)整與稅收籌劃實務
- 二零二五年度藝人經(jīng)紀與全產(chǎn)業(yè)鏈合作合同
- IT基礎設施建設項目投資合同
- 鄉(xiāng)村旅游資源開發(fā)利用合作協(xié)議
- 電梯采購工程合同
- 文化旅游項目開發(fā)合作框架協(xié)議
- 2025年第六屆(中小學組)國家版圖知識競賽測試題庫及答案
- GB/T 26436-2025禽白血病診斷技術(shù)
- 體育場館工程施工組織設計
- 春季校園常見傳染病及預防措施培訓課件
- 國際標準下的AI技術(shù)應用-深度研究
- 2025-2030年城市軌道交通運營行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年江西生物科技職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 《信息技術(shù)(拓展模塊)》高職全套教學課件
- 2025天津市安全員《B證》考試題庫
- DB37T-住宅小區(qū)供配電設施建設標準編制說明
- 食品飲料行業(yè)酒類2025年度策略報告:拐點漸近行穩(wěn)致遠
評論
0/150
提交評論