單片機課設(shè)-遙控器控制流水燈流速_第1頁
單片機課設(shè)-遙控器控制流水燈流速_第2頁
單片機課設(shè)-遙控器控制流水燈流速_第3頁
單片機課設(shè)-遙控器控制流水燈流速_第4頁
單片機課設(shè)-遙控器控制流水燈流速_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄第一章 設(shè)計任務(wù)及要求11.1 設(shè)計任務(wù)11.2 設(shè)計基本要求1第二章 設(shè)計原理22.1 STC12C5A60S2以及最小系統(tǒng)介紹22.2 LCD1602液晶顯示模塊42.2.1 1602液晶概述42.2.2 1602引腳介紹42.2.3 1602字符液晶使用方法52.3 DS12C887時鐘芯片62.3.1 DS12C887概述62.3.2 DS12C887引腳介紹72.3.3 DS12C887內(nèi)部地址空間82.4 DS18B20溫度傳感器82.5 HS0038紅外接收頭9第三章 硬件設(shè)計103.1 系統(tǒng)工作原理圖103.2 LCD1602模塊電路設(shè)計103.3 DS12C887模塊電

2、路設(shè)計113.4 DS18B20模塊電路設(shè)計123.5 遙控接收模塊電路設(shè)計123.6 流水燈模塊12第四章 軟件設(shè)計134.1 系統(tǒng)程序流程圖134.2 LCD1602模塊子程序設(shè)計154.3 DS12C887模塊子程序設(shè)計214.4 DS18B20模塊子程序設(shè)計244.5 遙控接收模塊子程序設(shè)計284.6 流水燈模塊子程序設(shè)計32第五章 總結(jié)34參考文獻34附錄I 電路原理圖35附錄II 元器件清單36附錄III 程序運行實物圖36第一章 設(shè)計任務(wù)及要求1.1 設(shè)計任務(wù)a) 設(shè)計實現(xiàn)功能STC12C5A60S2(引腳排序及基本功能同AT89S51)作為主控芯片,設(shè)計利用LCD1602顯示時

3、間、溫度和遙控接收電路,并使發(fā)光二級管循環(huán)點亮。一是擴展DS12C887外圍電路,實現(xiàn)時間信息顯示;二是DS18B20溫度信息顯示的設(shè)計;三是利用遙控器設(shè)置參數(shù),控制發(fā)光二級管循環(huán)點亮的速度。b) 原理圖設(shè)計1.原理圖設(shè)計要符合項目的工作原理,連線要正確。2.圖中所使用的元器件要合理選用,電阻、電容等器件的參數(shù)要正確標明。3.原理圖要完整,CPU、外圍器件、外擴接口、輸入/輸出裝置要一應(yīng)俱全。c) 程序調(diào)計1.根據(jù)要求,將總體功能分解成若干個子功能模塊,每個功能模塊完成一個特定的功能。2.根據(jù)總體要求及分解的功能模塊,確定各功能模塊之間的關(guān)系,設(shè)計出完整的程序流程圖。d) 程序調(diào)試1.編寫相關(guān)

4、程序,并進行仿真。2.將程序下載到單片機,進行運行調(diào)試。e) 設(shè)計說明書1.原理圖設(shè)計說明簡要說明設(shè)計目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過程及順序。2.程序設(shè)計說明對程序設(shè)計總體功能及結(jié)構(gòu)進行說明,對各子模塊的功能以及各子模塊之間的關(guān)系作較詳細的描述。3.畫出工作原理圖,程序流程圖并給出相應(yīng)的程序清單。1.2 設(shè)計基本要求1.認真認識設(shè)計的意義,掌握設(shè)計工作程序,學(xué)會使用工具書和技術(shù)參考資料,并培養(yǎng)科學(xué)的設(shè)計思想和良好的設(shè)計作風。2.提高模型建立和設(shè)計能力,學(xué)會應(yīng)用相關(guān)設(shè)計資料進行設(shè)計計算的方法。3.提高獨立分析、解決問題的能力,逐步增強實際應(yīng)用訓(xùn)練。4.設(shè)計的說明書

5、要求簡潔、通順,電路圖內(nèi)容完整、清楚、規(guī)范。第二章 設(shè)計原理2.1 STC12C5A60S2以及最小系統(tǒng)介紹STC12C5A60S2是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。圖2.1 ST

6、C12C5A60S2引腳圖管腳說明:VCC:供電電壓。GND:接地。 P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須接上拉電阻。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P

7、1口作為低八位地址接收。 P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。 P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流

8、。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能口,如表2.1所示:表2.1 P3口第二功能表P3.0RXD(串行輸入口)P3.1TXD(串行輸出口)P3.2/INT0(外部中斷0)P3.3/INT1(外部中斷1)P3.4T0(記時器0外部輸入)P3.5T1(記時器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲器寫選通)P3.7/RD(外部數(shù)據(jù)存儲器讀選通)RST:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。 ALE/PROG:當訪問外部存儲

9、器時,地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效

10、的/PSEN信號將不出現(xiàn)。 EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 XTAL2:來自反向振蕩器的輸出。2.2 LCD1602液晶顯示模塊2.2.1 1602液晶概述工業(yè)字符型液晶,1602是指顯示的內(nèi)容為16*2,即能夠同時顯示兩行,每行16個字符。常見的1602字符液晶有兩種,一種顯示的是綠色背光黑色字體

11、,另一種顯示藍色背光白色字體,目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的。本課題所用1602液晶模塊,顯示屏是藍色背光白色字體。2.2.2 1602引腳介紹圖2.2.2 1602引腳圖編號符號引腳說明編號符號引腳說明1VSS電源地2VDD電源正極3VEE液晶顯示對比度調(diào)節(jié)端4RS數(shù)據(jù)/命令選擇端5R/W讀寫選擇6E使能信號7D0數(shù)據(jù)口8D1數(shù)據(jù)口9D2數(shù)據(jù)口10D3數(shù)據(jù)口11D4數(shù)據(jù)口12D5數(shù)據(jù)口13D6數(shù)據(jù)口14D7數(shù)據(jù)口各個引腳具體功能說明:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VEE為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱

12、,接地電源時對比度最高,對比度過高時會產(chǎn)生重影,使用一個1K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器,低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:DB0DB7為8位雙向數(shù)據(jù)線。2.2.3 1602字符液晶使用方法(1)基本操作時序操作輸入輸出讀狀態(tài)RSL,RWH,EHD0D7狀態(tài)字寫指令RSL,RWL,D0D7指令碼,E高脈沖無讀數(shù)據(jù)RSH,RWH,EHD0D7數(shù)據(jù)寫數(shù)據(jù)RSH,RWL,D0D7數(shù)據(jù),E高脈沖無(2)RAM1602液晶控制

13、器芯片內(nèi)部帶有80個8位的RAM緩沖區(qū),其地址和屏幕的對應(yīng)關(guān)系如下圖所示(3)1602字符液晶字庫1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如下表所示,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A” 。2.3 DS12C887時鐘芯片2.3.1 DS12C887概述DS12C887實時時鐘芯片功能豐富,可以用來直接代替IBM PC上的時鐘日歷芯片DS12887,同時,

14、它的管腳也和MC146818B、DS12887相兼容。 由于DS12C887能夠自動產(chǎn)生世紀、年、月、日、時、分、秒等時間信息,其內(nèi)部又增加了世紀寄存器,從而利用硬件電路解決子“千年”問題; DS12C887自帶有鋰電池,外部掉電時,其內(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é)通用R

15、AM使用戶使用;此外用戶還可對DS12C887進行編程以實現(xiàn)多種方波輸出,并可對其內(nèi)部的三路中斷通過軟件進行屏蔽。2.3.2 DS12C887引腳介紹管腳說明:GND、VCC:直流電源,其中VCC接+5V輸入,GND接地,當VCC輸入為+5V時,用 戶可以訪問DS12C887內(nèi)RAM中的數(shù)據(jù),并可對其進行讀、寫操作;當VCC的輸入小于+4.25V時,禁止用戶對內(nèi)部RAM進行讀、寫操作,此時用戶不能正確獲取芯片內(nèi)的時間信息;當VCC的輸入小于+3V時,DS12C887會自動將電源發(fā)換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。(1)MOT:模式選擇腳,DS12C887有兩種工作模式,即M

16、otorola模式和Intel模式,當MOT接VCC時,選用的工作模式是Motorola模式,當MOT接GND時,選用的是Intel模式。本文主要討論Intel模式。(23)SQW:方波輸出腳,當供電電壓VCC大于4.25V時,SQW腳可進行方波輸出,此時用戶可以通過對控制寄存器編程來得到13種方波信號的輸出。AD0AD7:復(fù)用地址數(shù)據(jù)總線,該總線采用時分復(fù)用技術(shù),在總線周期的前半部分,出現(xiàn)在AD0AD7上的是地址信息,可用以選通DS12C887內(nèi)的RAM,總線周期的后半部分出現(xiàn)在AD0AD7上的數(shù)據(jù)信息。(14)AS:地址選通輸入腳,在進行讀寫操作時,AS的上升沿將AD0AD7上出現(xiàn)的地址信

17、息鎖存到DS12C887上,而下一個下降沿清除AD0AD7上的地址信息,不論是否有效,DS12C887都將執(zhí)行該操作。(17)DS/RD:數(shù)據(jù)選擇或讀輸入腳,該引腳有兩種工作模式。當MOT接VCC時,選用Motorola工作模式;當MOT接GND時,選用Intel工作模式。(15)R/W:讀/寫輸入端,該管腳也有2種工作模式,當MOT接VCC時,R/W工作在Motorola模式。此時,該引腳的作用是區(qū)分進行的是讀操作還是寫操作,當R/W為高電平時為讀操作,R/W為低電平時為寫操作;當MOT接GND時,該腳工作在Intel模式,此時該作為寫允許輸入,即Write Enable。(13)CS:片選

18、輸入,低電平有效。(19)IRQ:中斷請求輸入,低電平有效,該腳有效對DS12C887內(nèi)的時鐘、日歷和RAM中的內(nèi)容沒有任何影響,僅對內(nèi)部的控制寄存器有影響,在典型的應(yīng)用中,RESET可以直接接VCC,這樣可以保證DS12C887在掉電時,其內(nèi)部控制寄存器不受影響。2.3.3 DS12C887內(nèi)部地址空間2.4 DS18B20溫度傳感器DS18B20、 DS1822 “一線總線”數(shù)字化溫度傳感器是DALLAS最新單線數(shù)字溫度傳感器,同DS1820一樣,DS18B20也 支持“一線總線”接口,測量溫度范圍為 -55°C+125°C,在-10+85°C范圍內(nèi),精度為&

19、#177;0.5°C。DS1822的精度較差為± 2°C ?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,與前一代產(chǎn)品不同,新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。GND:為電源地;DQ:為數(shù)字信號輸入/輸出端;VDD:為外接供電電源輸入端(在寄生電源接線方式時接地)2.5 HS0038紅外接收頭一體化的紅外接收裝置將遙控信號的接收、放大、檢波、整形集于一身,并且輸出可以讓單片機識別的TTL信號,這樣大大簡化了接收電路的復(fù)雜程度和電路的設(shè)計工作,方便使用。在本系

20、統(tǒng)中我們采用紅外一體化接收頭HS0038。HS0038黑色環(huán)氧樹脂封裝,不受日光、熒光燈等光源干擾,內(nèi)附磁屏蔽,功耗低,靈敏度高。在用小功率發(fā)射管發(fā)射信號情況下,其接收距離可達35 m。它能與TTL、COMS電路兼容。HS0038為直立側(cè)面收光型。它接收紅外信號頻率為38 kHz,周期約26 µs,同時能對信號進行放大、檢波、整形,得到TTL電平的編碼信號。隨著家用電器、視聽產(chǎn)品的普及,自動化辦公設(shè)備的廣泛應(yīng)用和網(wǎng)絡(luò)化的不斷發(fā)展,越來越多的產(chǎn)品具有了待機功能(如遙控開關(guān)、網(wǎng)絡(luò)喚醒、定時開關(guān)、智能開關(guān)等)。產(chǎn)品的待機功能實現(xiàn)遙控操作,極大地方便了我們的生活。在家庭或工業(yè)控制現(xiàn)場,一些手

21、動操作不太方便的場合,可以使用現(xiàn)有遙控器通過設(shè)置代替手動操作,比如可以利用家中現(xiàn)有的彩電遙控器,控制其它沒有遙控功能的電器(如電燈、計算機、音響、電腦、打印機、飲水機、熱水器等),方便生活。GND:為電源地;Vs:為外接供電電源輸入端OUT:為紅外接收信號輸出端;第三章 硬件設(shè)計3.1 系統(tǒng)工作原理圖STC12C5A60S2單片機DS12C887時鐘芯片DS18B20溫度傳感 器HS0038紅外接收頭信息遙控信息時間信息溫度遙控信息時間溫度信息流速LCD1602液晶顯示鎖存器和流水燈3.2 LCD1602模塊電路設(shè)計其中,LCD1602的D0D7引腳分別與單片機的P0.0P0.7相連,RS引腳

22、與單片機P2.0相連,R/W引腳與單片機P2.1相連,E引腳通過3個與非門與單片機P2.7、WR和RD引腳相連。電位器VR1的作用是調(diào)節(jié)液晶顯示的亮度。3.3 DS12C887模塊電路設(shè)計其中,DS12887的AD0AD7引腳分別與單片機的P0.0P0.7相連,R/W引腳與單片機WR相連,DS引腳與單片機RD引腳相連,AS引腳與單片機ALE引腳相連,CS引腳與單片機P2.6引腳相連。3.4 DS18B20模塊電路設(shè)計3.5 遙控接收模塊電路設(shè)計3.6 流水燈模塊其中,八個二極管的陽極通過470歐的排阻與VCC相連,陰極接到鎖存器74LS573的輸出端,鎖存器的輸入端接單片機的P0口,OC端接地

23、,鎖存端C通過幾個邏輯門接到單片機P2.5口和WR端。第四章 軟件設(shè)計4.1 系統(tǒng)程序流程圖否是DS12C887時間設(shè)置主函數(shù)開始定時器、外部中斷初始化LCD1602液晶初始化DS12C887初始化是否需要修正時間否是DS18B20初始化DS18B20溫度信息顯示時間更新是否完畢DS12C887時間信息顯示圖4.1.1 主函數(shù)程序流程圖否是定時器0中斷函數(shù)開始TH0、TL0賦初值流水燈是否應(yīng)該流動流水燈循環(huán)移位結(jié) 束 圖4.1.2 定時器0中斷函數(shù)程序流程圖否是外部中斷0中斷函數(shù)開始關(guān)閉定時器1是否為遙控起始信號定時器1初始化讀回TH1的值給TH1、TL1清0啟動定時器1 結(jié) 束圖4.1.3

24、外部中斷0中斷函數(shù)程序流程圖否是定時器1中斷函數(shù)開始關(guān)閉定時器1是否為真正的遙控信號處理遙控信息顯示遙控碼檢測第幾個按鍵按下修改控制流速變量的值 結(jié) 束 圖4.1.4 定時器1中斷函數(shù)程序流程圖4.2 LCD1602模塊子程序設(shè)計/*定義及子程序的聲明*/* 液晶12864口地址 */#define wr_com XBYTE0xC000 /寫命令 #define wr_data XBYTE0xC100 /寫數(shù)據(jù) #define rd_com XBYTE0xC200 /讀命令 #define rd_data XBYTE0xC300 /讀數(shù)據(jù)/* 子程序聲明 */void write_cmd(BY

25、TE cmd);void write_data(BYTE dat);void write_string(BYTE *s);void set_display_place(BYTE line,column);void write_string_lcd(BYTE line,column,unsigned char *string);void write_data_lcd(BYTE line,column,dat);void lcd_init(void);void crti(unsigned long dat);void crt_r(float x,unsigned char N);void Dela

26、y(WORD n);/*Function name: write_cmd Descriptions: 向lcd輸入指令 */void write_cmd(BYTE cmd) BYTE dl;do dl=rd_com; while(dl&0x80)!=0);/判忙 wr_com= cmd; Delay(1);/*Function name: write_data Descriptions: 寫入數(shù)據(jù) */void write_data(BYTE dat)BYTE dl;do dl=rd_com; while(dl&0x80)!=0);/判忙 wr_data= dat; Delay

27、(1);/*Function name: write_string Descriptions: 寫入字符串 */void write_string(BYTE *s) while(*s != '0') /'0'為字符串結(jié)束標志 write_data(*s); s+; /*Function name: set_display_placeDescriptions: 設(shè)置字符的顯示位置 */void set_display_place(BYTE line,column) BYTE address; if(line = 1) address = 0x80 + column

28、; else if(line = 2) address = 0xc0 + column; write_cmd(address); /*Function name: 將字符串寫到指定的位置 Descriptions: 將字符串顯示在lcd的特定位置 */void write_string_lcd(BYTE line,column,unsigned char *string) set_display_place(line,column); write_string(string); Delay(1);/*Function name: 將字符寫到指定的位置 Descriptions: 將字符串顯示在

29、lcd的特定位置 */void write_data_lcd(BYTE line,column,dat) set_display_place(line,column); write_data(dat); Delay(1);/*液晶模塊初始化*/void lcd_init(void) write_cmd(0x38);/ write_cmd(0x38);/ write_cmd(0x06);/ write_cmd(0x0c);/ write_cmd(0x01);/*顯示長整型數(shù)據(jù)*/void crti(unsigned long dat) BYTE dhi,dli,ddi,dei;unsigned

30、long datah;unsigned long datal;datah=dat;dhi=0;if (datah>=10)dodatah/=10;dhi+;while(datah>=10);datah=dat;ddi=dhi;for (dli=0;dli<dhi;dli+)datal=1;for (dei=0;dei<ddi;dei+)datal*=10;datah=dat/datal;dat=dat%datal;datah+=0x30;write_data(datah);ddi-;dat+=0x30;write_data(dat);elsedat=dat+0x30;w

31、rite_data(dat);/*浮點數(shù)顯示*/void crt_r(float x,unsigned char N) BYTE dli; unsigned int dath; unsigned int datl; unsigned int dat; if (x<0.0) dat=0x2d;write_data(dat);Delay(1);x=fabs(x); dath=(int)x; crti(dath); if (N>0) dat=0x2e; write_data(dat); Delay(1); dat=1; for (dli=0;dli<N;dli+) dat*=10;

32、 dath=(int)(x*dat)-dath*dat; for (dli=1;dli<N;dli+) dat /= 10; datl=dath/dat;datl += 0x30;write_data(datl);dath %= dat; crti(dath); /*延遲函數(shù)*/void Delay(WORD n) WORD x;while(n-) x=500;while(x-);4.3 DS12C887模塊子程序設(shè)計/*定義及子程序的聲明*/* DS12887口地址 */ #define DS_A XBYTE0x100A /寄存器 #define DS_B XBYTE0x100B /寄

33、存器 #define DS_C XBYTE0x100C /寄存器 #define Years XBYTE0x1009 /年 #define Month XBYTE0x1008 /月 #define Day XBYTE0x1007 /日 #define Week XBYTE0x1006 /星期 #define Hour XBYTE0x1004 /時 #define Minute XBYTE0x1002 /分 #define Second XBYTE0x1000 /秒 /* 子程序聲明 */void DS_init();void crt_time(BYTE line);void write_tim

34、e(); /*DS12887初始化程序*/void DS_init() DS_A=0x20;DS_B=0x12; /* 顯示時間 */void crt_time(BYTE line) BYTE dhi,dli;set_display_place(line,0);dli=Month;dhi=dli & 0xf0; dhi>>=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x2d;write_data(dli);dli=Day;dhi=dli & 0xf0; dhi&

35、gt;>=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x20;write_data(dli);write_data(dli);write_data(dli);dli=Hour;dhi=dli & 0xf0; dhi>>=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Minute;dhi=dli & 0xf0

36、; dhi>>=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli);dli=0x3a;write_data(dli);dli=Second;dhi=dli & 0xf0; dhi>>=4;dhi+=0x30;dli &=0x0f;dli +=0x30;write_data(dhi);write_data(dli); /* DS12887時間設(shè)置 */void write_time() DS_A=0x2f; /寄存器DS_B|=0x80; Years=0x13; /年

37、Month=0x12; /月 Day=0x30; /日 Week=0x01; /星期 Hour=0x16; /時 Minute=0x24; /分 Second=0x00; /秒 DS_B &=0x7f; /寄存器 4.4 DS18B20模塊子程序設(shè)計/*定義及子程序的聲明*/sbit DS1820_DQ= P17; /單總線引腳BYTE ah,al;char temperature2; /存放溫度數(shù)據(jù)float wen_val;/* 子程序聲明 */void DS18B20_Init();bit DS1820_Reset();void DS1820_WriteData(BYTE wDa

38、ta);BYTE DS1820_ReadData();void DelayXus(WORD n);void read_wendu();void crt_wendu(BYTE line,column);/*DS18B20 初始化 *函數(shù)名稱:DS1820_WriteData() *說明:本初始化程序可以不要,因為18B20 在出廠時就被配置為12 位精度了 */void DS18B20_Init()DS1820_Reset();DS1820_WriteData(0xCC); / 跳過ROM DS1820_WriteData(0x4E); / 寫暫存器 DS1820_WriteData(0x20)

39、; / 往暫存器的第三字節(jié)中寫上限值 DS1820_WriteData(0x00); / 往暫存器的第四字節(jié)中寫下限值 DS1820_WriteData(0x7F); / 將配置寄存器配置為12 位精度 DS1820_Reset();/*DS1820 復(fù)位及存在檢測(通過存在脈沖可以判斷DS1820 是否損壞) *函數(shù)名稱:DS1820_Reset() *說明:函數(shù)返回一個位標量(0 或1)flag=0 存在,反之flag=1 不存在 */bit DS1820_Reset()bit flag;DS1820_DQ = 0; /拉低總線 DelayXus(480); /延時480 微秒,產(chǎn)生復(fù)位脈

40、沖 DS1820_DQ = 1; /釋放總線 DelayXus(80); /延時80 微秒對總線采樣 flag = DS1820_DQ; /對數(shù)據(jù)腳采樣 DelayXus(400); /延時400 微秒等待總線恢復(fù) return (flag); /根據(jù)flag 的值可知DS1820 是否存在或損壞 ,可加聲音告警提示DS1820 故障 /*寫數(shù)據(jù)到DS1820*函數(shù)名稱:DS1820_WriteData()*/void DS1820_WriteData(BYTE wData)BYTE i;for (i=8;i>0;i-)DS1820_DQ = 0; /拉低總線,產(chǎn)生寫信號 DelayXu

41、s(4); /延時4us DS1820_DQ = wData&0x01; /發(fā)送1 位 DelayXus(60); /延時60us,寫時序至少要60us DS1820_DQ = 1; /釋放總線,等待總線恢復(fù) wData>>=1; /準備下一位數(shù)據(jù)的傳送 /*從DS1820 中讀出數(shù)據(jù)*函數(shù)名稱:DS1820_ReadData()*/BYTE DS1820_ReadData()BYTE i,TmepData;for (i=8;i>0;i-)TmepData>>=1;DS1820_DQ = 0; /拉低總線,產(chǎn)生讀信號 DelayXus(4); /延時4us DS1820_DQ = 1; /釋放總線,準備讀數(shù)據(jù) DelayXus(8

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論