基于單片機溫度控制系統(tǒng)的設計說明_第1頁
基于單片機溫度控制系統(tǒng)的設計說明_第2頁
基于單片機溫度控制系統(tǒng)的設計說明_第3頁
基于單片機溫度控制系統(tǒng)的設計說明_第4頁
基于單片機溫度控制系統(tǒng)的設計說明_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 . . . 基于單片機溫度控制系統(tǒng)的設計中文摘要隨著微機測量和控制技術(shù)的迅速發(fā)展與廣泛應用,以單片機為核心的溫度采集與控制系統(tǒng)的研發(fā)與應用在很大程度上提高了生產(chǎn)生活中對溫度的控制水平。本設計論述了一種以STC89C52單片機為主控制單元,以DS18B20為溫度傳感器的溫度控制系統(tǒng)。該控制系統(tǒng)可以實時存儲相關的溫度數(shù)據(jù)并記錄當前的時間。系統(tǒng)設計了相關的硬件電路和相關應用程序。硬件電路主要包括STC89C52單片機最小系統(tǒng),測溫電路、實時時鐘電路、LCD液晶顯示電路以與通訊模塊電路等。系統(tǒng)程序主要包括主程序,讀出溫度子程序,計算溫度子程序、按鍵處理程序、LCD顯示程序以與數(shù)據(jù)存儲程序等。關鍵詞

2、STC89C52單片機;DS18B20;顯示電路Based on single chip microcomputer temperature control system designAbstractAlong with the computer measurement and control technology of the rapid development and wide application, based on singlechip temperature gathering and control system development and application great

3、ly improve the production of temperature in life level of control. This design STC89C52 describes a kind of mainly by MCU control unit, for temperature sensor DS18B20 temperature control system. The control system can real-time storage temperature data and record related to the current time. System

4、design related hardware circuit and related applications. STC89C52 microcontroller hardware circuit include temperature detection circuit smallest system, and real-time clock circuit, LCD display circuit, communication module circuit, etc. System programming mainly include main program, read tempera

5、ture subroutine, the calculation of temperature subroutines, key processing procedures, LCD display procedures and data storage procedures, etc. Keywords STC89C52 microcontroller;DS18B20;display circuit目 錄一、引言4(一)課題研究的背景4(二)課題研究的目的和意義5二、硬件電路的設計5(一)系統(tǒng)設計的框架5(二)單片機最小系統(tǒng)電路6(三)單片機的選型61.STC89C52單片機簡介62.STC

6、89C52單片機時序73.STC89C52單片機引腳介紹7(四)溫度傳感器電路9(五)系統(tǒng)電源電路的設計10(六)LCD顯示電路11(七)串口通訊電路12(八)按鍵接口電路13(九)DS1302時鐘電路13(十)存儲器接口電路13三、系統(tǒng)軟件設計14(一)計算溫度子程序15(二)按鍵處理子程序15(三)計算溫度子程序16(四)顯示數(shù)據(jù)刷新子程序17四、結(jié)束語18參考文獻19致20附件1:系統(tǒng)原理圖21附件2:系統(tǒng)相關程序22一、DS18B20底層驅(qū)動程序22二、DS1302時鐘底層驅(qū)動程序27三、數(shù)據(jù)存儲底層驅(qū)動程序33一、引言(一)課題研究的背景工業(yè)控制是計算機的一個重要應用領域,計算機控制

7、系統(tǒng)正是為了適應這一領域的需要而發(fā)展起來的一門專業(yè)技術(shù),它主要研究如何將計算機技術(shù)、通過信息技術(shù)和自動控制理論應用于工業(yè)生產(chǎn)過程,并設計出所需要的計算機控制系統(tǒng)。隨著微機測量和控制技術(shù)的迅速發(fā)展與廣泛應用,以單片機為核心的溫度采集與控制系統(tǒng)的研發(fā)與應用在很大程度上提高了生產(chǎn)生活中對溫度的控制水平。本設計就是基于單片機STC89C52溫度控制系統(tǒng)的設計,通過本次課程實踐,我們更加的明確了單片機的廣泛用途和使用方法,以與其工作的原理。(二)課題研究的目的和意義隨著社會的發(fā)展,溫度的測量與控制變得越來越重要。本文采用單片機STC89C52設計了溫度實時測量與控制系統(tǒng)。單片機STC89C52 能夠根據(jù)

8、溫度傳感器DS18B20 所采集的溫度在液晶屏上實時顯示,通過控制從而把溫度控制在設定的圍之。所有溫度數(shù)據(jù)均通過液晶顯示器LCD顯示出來。系統(tǒng)可以根據(jù)時鐘存儲相關的數(shù)據(jù)。通過該課程的學習使我們對計算機控制系統(tǒng)有一個全面的了解、掌握常規(guī)控制算法的使用方法、掌握簡單微型計算機應用系統(tǒng)軟硬的設計方法,進一步鍛煉同學們在微型計算機應用方面的實際工作能力。二、硬件電路的設計(一)系統(tǒng)設計的框架本課題設計的是一種以STC89C52單片機為主控制單元,以DS18B20為溫度傳感器的溫度控制系統(tǒng)。該控制系統(tǒng)可以實時存儲相關的溫度數(shù)據(jù)并記錄當前的時間。其主要包括:電源模塊、溫度采集模塊、按鍵處理模塊、實時時鐘模

9、塊、數(shù)據(jù)存儲模塊、LCD顯示模塊、通訊模塊以與單片機最小系統(tǒng)。圖1 系統(tǒng)設計框架(二)單片機最小系統(tǒng)電路在課題設計的溫度控制系統(tǒng)設計中,控制核心是STC89C52單片機,該單片機為51系列增強型8位單片機,它有32個I/O口,片含4K FLASH工藝的程序存儲器,便于用電的方式瞬間擦除和改寫,而且價格便宜,其外部晶振為12MHz,一個指令周期為1S。使用該單片機完全可以完成設計任務,其最小系統(tǒng)主要包括:復位電路、震蕩電路以與存儲器選擇模式(EA腳的高低電平選擇),電路如下圖2所示:圖2 單片機最小系統(tǒng)(三)單片機的選型本課題設計的溫度控制系統(tǒng)主控制芯片選型為STC89C52單片機,其特點如下:

10、1.STC89C52單片機簡介目前,51系列單片機在工業(yè)檢測領域中得到了廣泛的應用,因此我們可以在許多單片機應用領域中,配接各種類型的語音接口,構(gòu)成具有合成語音輸出能力的綜合應用系統(tǒng),以增強人機對話的功能。STC89C52單片機是宏晶科技生產(chǎn)的一種單片機,在一小塊芯片上集成了一個微型計算機的各個組成部分。每一個單片機包括:一個8位的微型處理器CPU;一個512K的片數(shù)據(jù)存儲器RAM;4K片程序存儲器;四個8位并行的I/O接口P0-P3,每個接口既可以輸入,也可以輸出;兩個定時器/記數(shù)器;五個中斷源的中斷控制系統(tǒng);一個全雙工UART的串行I/O口;片振蕩器和時鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要

11、外接。最高允許振蕩頻率是12MHZ。以上各個部分通過部總線相連接。2.STC89C52單片機時序 STC89C52單片機的一個執(zhí)器周期由6個狀態(tài)(s1s6)組成,每個狀態(tài)又持續(xù)2個震蕩周期,分為P1和P2兩個節(jié)拍。這樣,一個機器周期由12個振蕩周期組成。若采用12MHz的晶體振蕩器,則每個機器周期為1us,每個狀態(tài)周期為16us;在一數(shù)情況下,算術(shù)和邏輯操作發(fā)生在N期間,而部寄存器到寄存器的傳輸發(fā)生在P2期間。對于單周期指令,當指令操作碼讀人指令寄存器時,使從S1P2開始執(zhí)行指令。如果是雙字節(jié)指令,則在同一機器周期的s4讀人第二字節(jié)。若為單字節(jié)指令,則在51期間仍進行讀,但所讀入的字節(jié)操作碼被

12、忽略,且程序計數(shù)據(jù)也不加1。在加結(jié)束時完成指令操作。多數(shù)STC89C52指令周期為12個機器周期,只有乘法和除法指令需要兩個以上機器周期的指令,它們需4個機器周期。 對于雙字節(jié)單機器指令,通常是在一個機器周期從程序存儲器中讀人兩個字節(jié),但Movx指令例外,Movx指令是訪問外部數(shù)據(jù)存儲器的單字節(jié)雙機器周期指令,在執(zhí)行Movx指令期間,外部數(shù)據(jù)存儲器被訪問且被選通時跳過兩次取指操作。3.STC89C52單片機引腳介紹STC89C52單片機的40個引腳中有2個專用于主電源引腳,2個外接晶振的引腳,4個控制或與其它電源復用的引腳,以與32條輸入輸出I/O引腳。下面按引腳功能分為4個部分敘述個引腳的功

13、能。(1)電源引腳Vcc和VssVcc(40腳):接+5V電源正端;Vss(20腳):接+5V電源正端。(2)外接晶振引腳XTAL1和XTAL2XTAL1(19腳):接外部石英晶體的一端。在單片機部,它是一個反相放大器的輸入端,這個放大器構(gòu)成采用外部時鐘時,對于HMOS單片機,該引腳接地;對于CHOMS單片機,該引腳作為外部振蕩信號的輸入端。XTAL2(18腳):接外部晶體的另一端。在單片機部,接至片振蕩器的反相放大器的輸出端。當采用外部時鐘時,對于HMOS單片機,該引腳作為外部振蕩信號的輸入端。對于CHMOS芯片,該引腳懸空不接。(3)控制信號或與其它電源復用引腳 控制信號或與其它電源復用引

14、腳有RST/VPD、ALE/P、PSEN和EA/VPP等4種形式。(A)RST/VPD(9腳):RST即為RESET,VPD為備用電源,所以該引腳為單片機的上電復位或掉電保護端。當單片機振蕩器工作時,該引腳上出現(xiàn)持續(xù)兩個機器周期的高電平,就可實現(xiàn)復位操作,使單片機復位到初始狀態(tài)。當VCC發(fā)生故障,降低到低電平規(guī)定值或掉電時,該引腳可接上備用電源VPD(+5V)為部RAM供電,以保證RAM中的數(shù)據(jù)不丟失。(B)ALE/ P (30腳):當訪問外部存儲器時,ALE(允許地址鎖存信號)以每機器周期兩次的信號輸出,用于鎖存出現(xiàn)在P0口的低(C)PSEN(29腳):片外程序存儲器讀選通輸出端,低電平有效

15、。當從外部程序存儲器讀取指令或常數(shù)期間,每個機器周期PESN兩次有效,以通過數(shù)據(jù)總線口讀回指令或常數(shù)。當訪問外部數(shù)據(jù)存儲器期間,PESN信號將不出現(xiàn)。(D)EA/Vpp(31腳):EA為訪問外部程序儲器控制信號,低電平有效。當EA端保持高電平時,單片機訪問片程序存儲器4KB(MS52子系列為8KB)。若超出該圍時,自動轉(zhuǎn)去執(zhí)行外部程序存儲器的程序。當EA端保持低電平時,無論片有無程序存儲器,均只訪問外部程序存儲器。對于片含有EPROM的單片機,在EPROM編程期間,該引腳用于接21V的編程電源Vpp。 (4)輸入/輸出(I/O)引腳P0口、P1口、P2口與P3口(A).P0口(39腳22腳):

16、P0.0P0.7統(tǒng)稱為P0口。當不接外部存儲器與不擴展I/O接口時,它可作為準雙向8位輸入/輸出接口。當接有外部程序存儲器或擴展I/O口時,P0口為地址/數(shù)據(jù)分時復用口。它分時提供8位雙向數(shù)據(jù)總線。對于片含有EPROM的單片機,當EPROM編程時,從P0口輸入指令字節(jié),而當檢驗程序時,則輸出指令字節(jié)。(B).P1口(1腳8腳):P1.0P1.7統(tǒng)稱為P1口,可作為準雙向I/O接口使用。對于MCS52子系列單片機,P1.0和P1.1還有第2功能:P1.0口用作定時器/計數(shù)器2的計數(shù)脈沖輸入端T2;P1.1用作定時器/計數(shù)器2的外部控制端T2EX。對于EPROM編程和進行程序校驗時,P0口接收輸入

17、的低8位地址。(C).P2口(21腳28腳):P2.0P2.7統(tǒng)稱為P2口,一般可作為準雙向I/O接口。當接有外部程序存儲器或擴展I/O接口且尋址圍超過256個字節(jié)時,P2口用于高8位地址總線送出高8位地址。對于EPROM編程和進行程序校驗時,P2口接收輸入的8位地址。(D).P3口(10腳17腳):P3.0P3.7統(tǒng)稱為P3口。它為雙功能口,可以作為一般的準雙向I/O接口,也可以將每1位用于第2功能,而且P3口的每一條引腳均可獨立定義為第1功能的輸入輸出或第2功能。P3口的第2功能見下表 表1 單片機P3.0管腳含義引腳第2功能P3.0RXD(串行口輸入端0)P3.1TXD(串行口輸出端)P

18、3.2INT0(部中斷0請求輸入端,低電平有效)P3.3INT1(中斷1請求輸入端,低電平有效)P3.4T0(時器/計數(shù)器0計數(shù)脈沖端)P3.5T1(時器/計數(shù)器1數(shù)脈沖端)P3.6WR(部數(shù)據(jù)存儲器寫選通信號輸出端,低電平有效)P3.7RD(部數(shù)據(jù)存儲器讀選通信號輸出端,低電平有效)綜上所述,MCS51系列單片機的引腳作用可歸納為以下兩點:1).單片機功能多,引腳數(shù)少,因而許多引腳具有第2功能;2).單片機對外呈3總線形式,由P2、P0口組成16位地址總線;由P0口分時復用作為數(shù)據(jù)總線。(四)溫度傳感器電路采用一線制數(shù)字溫度傳感器DS18B20來作為本課題的溫度傳感器。傳感器輸出信號進4.7

19、K的上拉電阻直接接到單片機的P1.0引腳上。DS18B20溫度傳感器是美國達拉斯(DALLAS)半導體公司推出的應用單總線技術(shù)的數(shù)字溫度傳感器。該器件將半導體溫敏器件、A/D轉(zhuǎn)換器、存儲器等做在一個很小的集成電路芯片上。本設計中溫度傳感器之所以選擇單線數(shù)字器件DS18B20,是在經(jīng)過多方面比較和考慮后決定的,主要有以下幾方面的原因:(1)系統(tǒng)的特性:測溫圍為-55+125 ,測溫精度為士0.5;溫度轉(zhuǎn)換精度912位可變,能夠直接將溫度轉(zhuǎn)換值以16位二進制數(shù)碼的方式串行輸出;12位精度轉(zhuǎn)換的最大時間為750ms;可以通過數(shù)據(jù)線供電,具有超低功耗工作方式。(2)系統(tǒng)成本:由于計算機技術(shù)和微電子技術(shù)

20、的發(fā)展,新型大規(guī)模集成電路功能越來越強大,體積越來越小,而價格也越來越低。一支DS18B20的體積與普通三極管相差無幾,價格只有十元人民幣左右。(3)系統(tǒng)復雜度:由于DS18B20是單總線器件,微處理器與其接口時僅需占用1個I/O端口且一條總線上可以掛接幾十個DS18B20,測溫時無需任何外部元件,因此,與模擬傳感器相比,可以大大減少接線的數(shù)量,降低系統(tǒng)的復雜度,減少工程的施工量。(4)系統(tǒng)的調(diào)試和維護:由于引線的減少,使得系統(tǒng)接口大為簡化,給系統(tǒng)的調(diào)試帶來方便。同時因為DS18B20是全數(shù)字元器件,故障率很低,抗干擾性強,因此,減少了系統(tǒng)的日常維護工作。DS18B20溫度傳感器只有三根外引線

21、:單線數(shù)據(jù)傳輸總線端口DQ ,外供電源線VDD,共用地線GND。DS18B20有兩種供電方式:一種為數(shù)據(jù)線供電方式,此時VDD接地,它是通過部電容在空閑時從數(shù)據(jù)線獲取能量,來完成溫度轉(zhuǎn)換,相應的完成溫度轉(zhuǎn)換的時間較長。這種情況下,用單片機的一個I/O口來完成對DS18B20總線的上拉。另一種是外部供電方式(VDD接+5V),相應的完成溫度測量的時間較短。在本設計中采用外部供電方式實現(xiàn)DS18B20傳感器與單片機的連接,其接口電路如圖4所示。圖4 溫度傳感器接口(五)系統(tǒng)電源電路的設計本系統(tǒng)采用電源穩(wěn)壓芯片是LM2596,該開關電壓調(diào)節(jié)器是降壓型電源管理單片集成電路,能夠輸出3A的驅(qū)動電流,輸入

22、電壓是+5v,輸入電壓是+24v,同時具有很好的線性和負載調(diào)節(jié)特性。該器件部集成頻率補償和固定頻率發(fā)生器,開關頻率為150KHz,與低頻開關調(diào)節(jié)器相比較,可以使用更小規(guī)格的濾波元件。 該器件還有其他一些特點:在特定的輸入電壓和輸出負載的條件下,輸出電壓的誤差可以保證在±4%的圍,振蕩頻率誤差在±15%的圍;可以用僅80A的待機電流,實現(xiàn)外部斷電;具有自我保護電路(一個兩級降頻限流保護和一個在異常情況下斷電的過溫完全保護電路)在該溫度控制系統(tǒng)中,其電源電路設計如下圖10所示。圖5 系統(tǒng)電源模塊(六)LCD顯示電路本課題設計的溫度控制系統(tǒng)是采用液晶屏128*64作為顯示模塊,其

23、接口原理圖如下圖6所示:圖6 液晶顯示接口電路(七)串口通訊電路本課題設計的通訊采用的是常見的串口通訊,協(xié)議轉(zhuǎn)換芯片是采用MAX232A,其接口原理圖如下圖7所示:圖6 串口通訊接口電路(八)按鍵接口電路本課題設計采用的鍵盤模塊,其接口原理圖如下圖8所示:圖8 鍵盤模塊電路(九)DS1302時鐘電路本課題設計的時鐘是采用時鐘芯片DS1302,其接口原理圖如下圖9所示:圖9 時鐘接口電路(十)存儲器接口電路本課題設計的存儲器采用的是AT24C256,其接口原理圖如下圖十所示:圖10 存儲器電路三、系統(tǒng)軟件設計系統(tǒng)的軟件主要是采用C語言,對單片機進行變成實現(xiàn)各項功能。主程序?qū)δK進行初始化,而后調(diào)

24、用讀溫度、處理溫度、顯示、鍵盤等模塊。用的是循環(huán)查詢方式,來顯示和控制溫度,主程序的主要功能是負責溫度的實時顯示、讀出并處理DS18B20的測量的當前溫度值并負責調(diào)用各子程序,其程序流程如圖10系統(tǒng)程序流程圖。開始初始化啟動DB18B20讀溫度計算溫度LCD顯示圖10系統(tǒng)程序流程圖(一)計算溫度子程序 讀出溫度子程序的主要功能包括初始化,判斷DS18B20是否存在,若存在則進行一系列的讀操,作若不存在則返回。其程序流程圖如圖11所示。圖11 讀溫度流程圖(二)按鍵處理子程序 按鍵處理子程序主要是負責參數(shù)的設置,主程序每循環(huán)一次都要對按鍵進行掃描,判斷是否有輸入鍵按下則進行一系列的按鍵輸入操作。

25、其程序流程框圖如圖12所示。圖12 溫度轉(zhuǎn)換流程圖(三)計算溫度子程序計算溫度子程序?qū)AM中讀取值進行BCD碼的轉(zhuǎn)換運算,并進行溫度值正負的判定,其程序流程圖如圖13所示。 開始溫度零下?溫度值取補碼置“”標志計算小數(shù)位溫度BCD值計算整數(shù)位溫度BCD值 結(jié)束置“+”標志NY圖13 計算溫度子程序(四)顯示數(shù)據(jù)刷新子程序顯示數(shù)據(jù)刷新子程序主要是對顯示緩沖器中的顯示數(shù)據(jù)進行刷新操作,當最高顯示位為0時將符號顯示位移入下一位。程序流程圖如圖14。溫度數(shù)據(jù)移入顯示寄存器十位數(shù)0?百位數(shù)0?十位數(shù)顯示符號百位數(shù)不顯示百位數(shù)顯示數(shù)據(jù)(不顯示符號) 結(jié)束NNYY圖14 數(shù)據(jù)刷新子程序四、結(jié)束語通過此次畢

26、業(yè)論文的課題設計,我們學會了怎樣把所學的書本知識應用于實踐中去,并學會了如何去思考整個控制系統(tǒng)的軟硬件設計。實踐過程中我們遇到了一些困難,但在解決問題的過程中,我們學會了團隊合作精神和怎樣發(fā)現(xiàn)問題、分析問題,進而解決問題。此次課程設計不僅增強了我們學習專業(yè)課的興趣,而且給了我們勇氣和信心,更重要的是它為我們以后的學習指明了方向。參考文獻1 廣弟,朱月秀,王秀山.單片機基礎航空航天大學,2001(07).2 蔡美琴,為民等.MCS-51系列單片機系統(tǒng)與其應用高等教育,2004(06).3 毅剛,等.MCS-51單片機應用設計M.工業(yè)大學,1997.4 瑞星,胡健等.Protel DXP 實用教程

27、機械工業(yè),2003(04).5 于海生. 計算機控制技術(shù) 機械工業(yè) 2007(05).6 譚浩強. C程序設計 清華大學.7 康華光. 電子技術(shù)基礎 模擬部分 高等教育 1998(08).8 余錫存. 單片機原理與接口技術(shù) 電子科技大學,2003.致本論文是在我的指導老師密切關心和悉心指導下完成的。老師在課題開題期間和論文寫作的過程中給予了我許多指導,導師總是以認真負責、一絲不茍的工作態(tài)度閱讀并修改文章中不足的地方,他優(yōu)良的作風和嚴謹治學的態(tài)度深深影響著我,至此,向恩師致以最真摯的感和最崇高的敬意!同時我要感我的同學,特別是我的室友們,正是他們在這幾年里陪我一起成長,一起學習,才讓我有了今天的

28、成績。他們在平時的學習和生活中他們給予了我無私的關懷和幫助,在此表示我最誠摯的意。附件1:系統(tǒng)原理圖附件2:系統(tǒng)相關程序一、DS18B20底層驅(qū)動程序/延時 N ms/DS1820引腳定義sbit TMDAT =P10;void DS1820_DelayCount (unsigned char Coun) data unsigned char Count; Count=Coun; while(Count>0) Count-; Count=Coun; while(Count>0) Count-;/復位DS18B20void DS1820_Reset(void) TMDAT=0; DS

29、1820_DelayCount(412); TMDAT=1; DS1820_DelayCount(16); /等待DS18B20應答unsigned char DS1820_Answer(void)data unsigned int i;data unsigned char j; i=0xc000; while(TMDAT) i-;if (i=0)return(aban_return); i=0xffff; j=3; while(TMDAT) i-;if (i=0) if(j=0) return(aban_return); else j-; i=0xffff; DS1820_DelayCoun

30、t(16); return(done_return);/等待DS18B20應答/讀取位bit DS1820_Readbit(void) data int i=0; bit dat; TMDAT=0;i+;i+;i+;i+; TMDAT=1;i+;i+;i+;i+;i+;i+;i+;i+; dat = TMDAT;/ DS1820_DelayCount(8); DS1820_DelayCount(32); return dat;/讀取字節(jié)unsigned char DS1820_Readbyte(void)data unsigned char i,j,dat=0; for(i=1;i<=8

31、;i+) j=DS1820_Readbit(); dat=(j<<7)|(dat>>1); return dat;/寫一個字節(jié)void DS1820_Writebyte(unsigned char dat) data signed char i=0; data unsigned char j; bit testb; for(j=1;j<=8;j+) testb=dat & 0x01; dat = dat>>1; if(testb) TMDAT=0; i+;i+;i+;i+;i+;i+;i+;i+; TMDAT=1; /DS1820_DelayC

32、ount(8); DS1820_DelayCount(32); else TMDAT=0; /DS1820_DelayCount(8); DS1820_DelayCount(32); TMDAT=1; i+;i+;i+;i+;i+;i+;i+;i+; /讀操作開始unsigned char DS1820_StartTem(void) EA=0; DS1820_Reset(); if(DS1820_Answer()=aban_return) EA=Ea; return(aban_return); / DS1820_Delayms(1); DS1820_Delayms(4); DS1820_Wri

33、tebyte(0xcc); / DS1820_Writebyte(0x55); / for(i=0;i<8;i+) /DS1820_Writebyte(DS1820_tempi); DS1820_Writebyte(0x44); EA=Ea; return(done_return);/讀所有傳感器int DS1820_ReadTem(void)data unsigned char a,b;data int y3;data float y4;data unsigned char i; EA=0; DS1820_Reset(); if(DS1820_Answer()=aban_return)

34、 EA=Ea; return(0xffff); DS1820_Delayms(4); DS1820_Writebyte(0xcc); /跳過匹配傳感器 /DS1820_Writebyte(0x55); /匹配傳感器 / for(i=0;i<8;i+) /DS1820_Writebyte(run_inf.system_index.DS1820_tempi); DS1820_Writebyte(0xbe); /讀取溫度 for(i=0;i<9;i+) run_inf.system_index.DS1820_tempi=DS1820_Readbyte(); if(CRC(9)!=0) E

35、A=1; return(0xffff); /計算CRC a = run_inf.system_index.DS1820_temp0; b = run_inf.system_index.DS1820_temp1; DS1820_Reset(); y3 = (b<< 8)|a; y4=y3; y4=(y4*25)/4; EA=1; return(int)(y4);二、DS1302時鐘底層驅(qū)動程序/DS1302引腳定義sbit rtc_sc=P34;sbit rtc_io=P35;sbit rst_1302=P36;bdata unsigned char temp;sbit temp_0

36、 = temp0;sbit temp_7 = temp7;/*DS1302驅(qū)動程序開始*/功能: 往DS1302寫入1Byte數(shù)據(jù)void v_RTInputByte(unsigned char ucDa) unsigned char i;temp = ucDa;for(i=8; i>0; i-)rtc_io = temp_0; /*相當于匯編中的 RRC */rtc_sc = 1;rtc_sc = 0;temp = temp >> 1; /功能: 從DS1302讀取1Byte數(shù)據(jù)unsigned char uc_RTOutputByte(void) unsigned cha

37、r i;rtc_io=1;for(i=8; i>0; i-) temp = temp >>1; /*相當于匯編中的 RRC */ temp_7 = rtc_io; rtc_sc = 1; rtc_sc = 0; return(temp); /功能: 往DS1302寫入數(shù)據(jù)void write1302(unsigned char ucAddr,unsigned char ucDa) bit ea; ea=EA; EA=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_RTInputByte(

38、ucAddr); /* 地址,命令 */v_RTInputByte(ucDa); /* 寫1Byte數(shù)據(jù)*/rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);EA = ea; /功能: 讀取DS1302某地址的數(shù)據(jù)unsigned char read1302(unsigned char ucAddr)unsigned char ucDa; bit ea; ea=EA; EA=0;rtc_rs_port&=(rtc_rs_bit);rtc_sc = 0;rtc_rs_port|=rtc_rs_bit;v_RTInputByte(ucAddr); /* 地址

39、,命令 */ucDa = uc_RTOutputByte(); /* 讀1Byte數(shù)據(jù) */rtc_sc = 1;rtc_rs_port&=(rtc_rs_bit);EA = ea;return(ucDa);/功能: 設置初始時間void Set1302(pTime_S time_temp) unsigned char i= 0x80; write1302(0x8e,0x00); /* 控制命令,WP=0,寫操作*/ write1302(i,time_temp->sec); i +=2; write1302(i,time_temp->min); i +=2; write13

40、02(i,time_temp->hou); i +=2; write1302(i,time_temp->day); i +=2; write1302(i,time_temp->mon); i +=2; write1302(i,0x02); i +=2; write1302(i,time_temp->yea); i +=2; write1302(0x8e,0x80); /* 控制命令,WP=1,寫保護*/功能: 讀取DS1302當前時間void get1302(void) unsigned char i,time_bcd_temp6;unsigned char ucAdd

41、r = 0x81;for (i=0;i<7;i+) time_bcd_tempi = read1302(ucAddr);/*格式為: 秒 分 時 日 月 星期 年 */ ucAddr += 2; sec=time_bcd_temp0;min=time_bcd_temp1;hou=time_bcd_temp2;day=time_bcd_temp3;mon=time_bcd_temp4;yea=time_bcd_temp6; /連續(xù)6字節(jié)讀出程序void ds1302_read(unsigned char *ptr,unsigned char addr)unsigned char i;add

42、r=addr*2+0x0c1;for(i=0;i<6;i+) *(ptr+i)=read1302(addr); addr+=2; /連續(xù)6字節(jié)寫入程序void ds1302_write(unsigned char *ptr,unsigned char addr)unsigned char i;addr=addr*2+0x0c0;write1302(0x8e,0x00); /寫保護置低(關閉)for(i=0;i<6;i+) write1302(addr,*(ptr+i); addr+=2; write1302(0x8e,0x80); /寫保護置高(打開) void Start1302

43、(void) unsigned char temp; bit ea; ea=EA; EA=0; temp=read1302(0x81); temp&=0x7f; write1302(0x8e,0x00); /* 控制命令,WP=0,寫操作*/ write1302(0x80,temp); write1302(0x90,0); write1302(0x8e,0x80); /* 控制命令,WP=1,寫保護*/ EA=ea;/DS1302驅(qū)動程序結(jié)束三、數(shù)據(jù)存儲底層驅(qū)動程序/ATC256引腳定義sbit epr_sd=P33;sbit epr_sc=P32;bdata unsigned cha

44、r temp1;sbit temp1_0 = temp10;sbit temp1_7 = temp17;/存儲器驅(qū)動程序開始void noack(void) epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0;void ask()unsigned char i=0xff; epr_sd=1; epr_sc=1; epr_sc=1; epr_sc=1;doi-; if(epr_sd=0) epr_sc=0; i=0; while(i!=0);epr_sd=1;epr_sd=1;epr_sd=1;void stop() epr_sd=0; epr_sd

45、=0; epr_sd=0; epr_sc=1; epr_sc=1; epr_sc=1; epr_sd=1; epr_sd=1; epr_sd=1; epr_sd=1;/24c256 startvoid start()epr_sc=1;epr_sd=1;epr_sd=1; epr_sd=0; epr_sd=0; epr_sc=0;void wrby(unsigned char x) unsigned char i; epr_sc=0;temp1=x;for(i=0;i<8;i+) /從高位開始傳送數(shù)據(jù) epr_sd=temp1_7; temp1=temp1<<1; /左移一位

46、epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=1; epr_sc=0; /24c256 rdby unsigned char rdby() /從高位開始讀出數(shù)據(jù) unsigned char i;epr_sd=1;epr_sd=1;epr_sd=1;for(i=0;i<8;i+) epr_sc=1;epr_sc=1; temp1=temp1<<1; temp1_0=epr_sd; epr_sc=0; epr_sc=0;epr_sc=0; return(temp1);/24c256 waddr void waddr() start(); wrby(0x

47、a0); ask();/24c256 raddrunsigned char raddr() start(); wrby(0xa1); ask(); temp1=rdby(); noack(); stop(); return(temp1);void w16addr(unsigned int x) union unsigned int int_type;unsigned char char_type1; u_int_char;unsigned m,n;u_int__type=x; /將x的高位賦給m,低位賦給nm=u_int_char.char_type0;n=u_int_char

48、.char_type1; wrby(m ); ask(); wrby(n ); ask();/延時void d5ms() unsigned char a, b; for (a=0;a<=15;a+) for (b=0;b<0x7f;b+) ; /24c256 讀出一字節(jié) unsigned char epr_read(unsigned int x) bit ea; ea=EA; EA=0; /關中斷 EPR_WEN; d5ms(); waddr(); w16addr(x); temp1=raddr(); EA=ea;/開中斷 return(temp1);/24c256 寫入一字節(jié)void epr_write(unsigned int f,unsigned char x) bit ea; ea=EA; EA=0 ; /關中斷 d5ms(); waddr(); w16addr(f); wrby(x); ask(); stop(); d5ms();EA=ea; /開中斷/存儲器驅(qū)動程序結(jié)束匯編部分:TEMPERATURE_L DATA 31H

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論