




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄第一章 設(shè)計(jì)任務(wù)及要求11.1 設(shè)計(jì)任務(wù)11.2 設(shè)計(jì)基本要求1第二章 設(shè)計(jì)原理22.1 STC12C5A60S2以及最小系統(tǒng)介紹22.2 LCD1602液晶顯示模塊42.2.1 1602液晶概述42.2.2 1602引腳介紹42.2.3 1602字符液晶使用方法52.3 DS12C887時(shí)鐘芯片62.3.1 DS12C887概述62.3.2 DS12C887引腳介紹72.3.3 DS12C887內(nèi)部地址空間82.4 DS18B20溫度傳感器82.5 HS0038紅外接收頭9第三章 硬件設(shè)計(jì)103.1 系統(tǒng)工作原理圖103.2 LCD1602模塊電路設(shè)計(jì)103.3 DS12C887模塊電
2、路設(shè)計(jì)113.4 DS18B20模塊電路設(shè)計(jì)123.5 遙控接收模塊電路設(shè)計(jì)123.6 流水燈模塊12第四章 軟件設(shè)計(jì)134.1 系統(tǒng)程序流程圖134.2 LCD1602模塊子程序設(shè)計(jì)154.3 DS12C887模塊子程序設(shè)計(jì)214.4 DS18B20模塊子程序設(shè)計(jì)244.5 遙控接收模塊子程序設(shè)計(jì)284.6 流水燈模塊子程序設(shè)計(jì)32第五章 總結(jié)34參考文獻(xiàn)34附錄I 電路原理圖35附錄II 元器件清單36附錄III 程序運(yùn)行實(shí)物圖36第一章 設(shè)計(jì)任務(wù)及要求1.1 設(shè)計(jì)任務(wù)a) 設(shè)計(jì)實(shí)現(xiàn)功能STC12C5A60S2(引腳排序及基本功能同AT89S51)作為主控芯片,設(shè)計(jì)利用LCD1602顯示時(shí)
3、間、溫度和遙控接收電路,并使發(fā)光二級(jí)管循環(huán)點(diǎn)亮。一是擴(kuò)展DS12C887外圍電路,實(shí)現(xiàn)時(shí)間信息顯示;二是DS18B20溫度信息顯示的設(shè)計(jì);三是利用遙控器設(shè)置參數(shù),控制發(fā)光二級(jí)管循環(huán)點(diǎn)亮的速度。b) 原理圖設(shè)計(jì)1.原理圖設(shè)計(jì)要符合項(xiàng)目的工作原理,連線要正確。2.圖中所使用的元器件要合理選用,電阻、電容等器件的參數(shù)要正確標(biāo)明。3.原理圖要完整,CPU、外圍器件、外擴(kuò)接口、輸入/輸出裝置要一應(yīng)俱全。c) 程序調(diào)計(jì)1.根據(jù)要求,將總體功能分解成若干個(gè)子功能模塊,每個(gè)功能模塊完成一個(gè)特定的功能。2.根據(jù)總體要求及分解的功能模塊,確定各功能模塊之間的關(guān)系,設(shè)計(jì)出完整的程序流程圖。d) 程序調(diào)試1.編寫(xiě)相關(guān)
4、程序,并進(jìn)行仿真。2.將程序下載到單片機(jī),進(jìn)行運(yùn)行調(diào)試。e) 設(shè)計(jì)說(shuō)明書(shū)1.原理圖設(shè)計(jì)說(shuō)明簡(jiǎn)要說(shuō)明設(shè)計(jì)目的,原理圖中所使用的元器件功能及在圖中的作用,各器件的工作過(guò)程及順序。2.程序設(shè)計(jì)說(shuō)明對(duì)程序設(shè)計(jì)總體功能及結(jié)構(gòu)進(jìn)行說(shuō)明,對(duì)各子模塊的功能以及各子模塊之間的關(guān)系作較詳細(xì)的描述。3.畫(huà)出工作原理圖,程序流程圖并給出相應(yīng)的程序清單。1.2 設(shè)計(jì)基本要求1.認(rèn)真認(rèn)識(shí)設(shè)計(jì)的意義,掌握設(shè)計(jì)工作程序,學(xué)會(huì)使用工具書(shū)和技術(shù)參考資料,并培養(yǎng)科學(xué)的設(shè)計(jì)思想和良好的設(shè)計(jì)作風(fēng)。2.提高模型建立和設(shè)計(jì)能力,學(xué)會(huì)應(yīng)用相關(guān)設(shè)計(jì)資料進(jìn)行設(shè)計(jì)計(jì)算的方法。3.提高獨(dú)立分析、解決問(wèn)題的能力,逐步增強(qiáng)實(shí)際應(yīng)用訓(xùn)練。4.設(shè)計(jì)的說(shuō)明書(shū)
5、要求簡(jiǎn)潔、通順,電路圖內(nèi)容完整、清楚、規(guī)范。第二章 設(shè)計(jì)原理2.1 STC12C5A60S2以及最小系統(tǒng)介紹STC12C5A60S2是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱(chēng)單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。圖2.1 ST
6、C12C5A60S2引腳圖管腳說(shuō)明:VCC:供電電壓。GND:接地。 P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P0口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的低八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須接上拉電阻。 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P
7、1口作為低八位地址接收。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流
8、。當(dāng)P3口寫(xiě)入“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(記時(shí)器0外部輸入)P3.5T1(記時(shí)器1外部輸入)P3.6/WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)P3.7/RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。 ALE/PROG:當(dāng)訪問(wèn)外部存儲(chǔ)
9、器時(shí),地址鎖存允許的輸出電平用于鎖存地址的低位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過(guò)一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無(wú)效。 PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效
10、的/PSEN信號(hào)將不出現(xiàn)。 EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。 XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。 XTAL2:來(lái)自反向振蕩器的輸出。2.2 LCD1602液晶顯示模塊2.2.1 1602液晶概述工業(yè)字符型液晶,1602是指顯示的內(nèi)容為16*2,即能夠同時(shí)顯示兩行,每行16個(gè)字符。常見(jiàn)的1602字符液晶有兩種,一種顯示的是綠色背光黑色字體
11、,另一種顯示藍(lán)色背光白色字體,目前市面上字符液晶絕大多數(shù)是基于HD44780液晶芯片的,控制原理是完全相同的。本課題所用1602液晶模塊,顯示屏是藍(lán)色背光白色字體。2.2.2 1602引腳介紹圖2.2.2 1602引腳圖編號(hào)符號(hào)引腳說(shuō)明編號(hào)符號(hào)引腳說(shuō)明1VSS電源地2VDD電源正極3VEE液晶顯示對(duì)比度調(diào)節(jié)端4RS數(shù)據(jù)/命令選擇端5R/W讀寫(xiě)選擇6E使能信號(hào)7D0數(shù)據(jù)口8D1數(shù)據(jù)口9D2數(shù)據(jù)口10D3數(shù)據(jù)口11D4數(shù)據(jù)口12D5數(shù)據(jù)口13D6數(shù)據(jù)口14D7數(shù)據(jù)口各個(gè)引腳具體功能說(shuō)明:第1腳:VSS為地電源。第2腳:VDD接5V正電源。第3腳:VEE為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱
12、,接地電源時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生重影,使用一個(gè)1K的電位器調(diào)整對(duì)比度。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器,低電平時(shí)選擇指令寄存器。第5腳:R/W為讀寫(xiě)信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫(xiě)操作。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第714腳:DB0DB7為8位雙向數(shù)據(jù)線。2.2.3 1602字符液晶使用方法(1)基本操作時(shí)序操作輸入輸出讀狀態(tài)RSL,RWH,EHD0D7狀態(tài)字寫(xiě)指令RSL,RWL,D0D7指令碼,E高脈沖無(wú)讀數(shù)據(jù)RSH,RWH,EHD0D7數(shù)據(jù)寫(xiě)數(shù)據(jù)RSH,RWL,D0D7數(shù)據(jù),E高脈沖無(wú)(2)RAM1602液晶控制
13、器芯片內(nèi)部帶有80個(gè)8位的RAM緩沖區(qū),其地址和屏幕的對(duì)應(yīng)關(guān)系如下圖所示(3)1602字符液晶字庫(kù)1602液晶模塊內(nèi)部的字符發(fā)生存儲(chǔ)器(CGROM)已經(jīng)存儲(chǔ)了160個(gè)不同的點(diǎn)陣字符圖形,如下表所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫(xiě)、常用的符號(hào)、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫(xiě)的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來(lái),我們就能看到字母“A” 。2.3 DS12C887時(shí)鐘芯片2.3.1 DS12C887概述DS12C887實(shí)時(shí)時(shí)鐘芯片功能豐富,可以用來(lái)直接代替IBM PC上的時(shí)鐘日歷芯片DS12887,同時(shí),
14、它的管腳也和MC146818B、DS12887相兼容。 由于DS12C887能夠自動(dòng)產(chǎn)生世紀(jì)、年、月、日、時(shí)、分、秒等時(shí)間信息,其內(nèi)部又增加了世紀(jì)寄存器,從而利用硬件電路解決子“千年”問(wèn)題; DS12C887自帶有鋰電池,外部掉電時(shí),其內(nèi)部時(shí)間信息還能夠保持10年之久;對(duì)于一天內(nèi)的時(shí)間記錄,有12小時(shí)制和24小時(shí)制兩種模式。在12小時(shí)制模式中,用AM和PM區(qū)分上午和下午;時(shí)間的表示方法也有兩種,一種用二進(jìn)制數(shù)表示,一種是用BCD碼表示;DS12C887中帶有128字節(jié) RAM,其中有11字節(jié)RAM用來(lái)存儲(chǔ)時(shí)間信息,4字節(jié)RAM用來(lái)存儲(chǔ)DS12C887的控制信息,稱(chēng)為控制寄存器,113字節(jié)通用R
15、AM使用戶使用;此外用戶還可對(duì)DS12C887進(jìn)行編程以實(shí)現(xiàn)多種方波輸出,并可對(duì)其內(nèi)部的三路中斷通過(guò)軟件進(jìn)行屏蔽。2.3.2 DS12C887引腳介紹管腳說(shuō)明:GND、VCC:直流電源,其中VCC接+5V輸入,GND接地,當(dāng)VCC輸入為+5V時(shí),用 戶可以訪問(wèn)DS12C887內(nèi)RAM中的數(shù)據(jù),并可對(duì)其進(jìn)行讀、寫(xiě)操作;當(dāng)VCC的輸入小于+4.25V時(shí),禁止用戶對(duì)內(nèi)部RAM進(jìn)行讀、寫(xiě)操作,此時(shí)用戶不能正確獲取芯片內(nèi)的時(shí)間信息;當(dāng)VCC的輸入小于+3V時(shí),DS12C887會(huì)自動(dòng)將電源發(fā)換到內(nèi)部自帶的鋰電池上,以保證內(nèi)部的電路能夠正常工作。(1)MOT:模式選擇腳,DS12C887有兩種工作模式,即M
16、otorola模式和Intel模式,當(dāng)MOT接VCC時(shí),選用的工作模式是Motorola模式,當(dāng)MOT接GND時(shí),選用的是Intel模式。本文主要討論Intel模式。(23)SQW:方波輸出腳,當(dāng)供電電壓VCC大于4.25V時(shí),SQW腳可進(jìn)行方波輸出,此時(shí)用戶可以通過(guò)對(duì)控制寄存器編程來(lái)得到13種方波信號(hào)的輸出。AD0AD7:復(fù)用地址數(shù)據(jù)總線,該總線采用時(shí)分復(fù)用技術(shù),在總線周期的前半部分,出現(xiàn)在AD0AD7上的是地址信息,可用以選通DS12C887內(nèi)的RAM,總線周期的后半部分出現(xiàn)在AD0AD7上的數(shù)據(jù)信息。(14)AS:地址選通輸入腳,在進(jìn)行讀寫(xiě)操作時(shí),AS的上升沿將AD0AD7上出現(xiàn)的地址信
17、息鎖存到DS12C887上,而下一個(gè)下降沿清除AD0AD7上的地址信息,不論是否有效,DS12C887都將執(zhí)行該操作。(17)DS/RD:數(shù)據(jù)選擇或讀輸入腳,該引腳有兩種工作模式。當(dāng)MOT接VCC時(shí),選用Motorola工作模式;當(dāng)MOT接GND時(shí),選用Intel工作模式。(15)R/W:讀/寫(xiě)輸入端,該管腳也有2種工作模式,當(dāng)MOT接VCC時(shí),R/W工作在Motorola模式。此時(shí),該引腳的作用是區(qū)分進(jìn)行的是讀操作還是寫(xiě)操作,當(dāng)R/W為高電平時(shí)為讀操作,R/W為低電平時(shí)為寫(xiě)操作;當(dāng)MOT接GND時(shí),該腳工作在Intel模式,此時(shí)該作為寫(xiě)允許輸入,即Write Enable。(13)CS:片選
18、輸入,低電平有效。(19)IRQ:中斷請(qǐng)求輸入,低電平有效,該腳有效對(duì)DS12C887內(nèi)的時(shí)鐘、日歷和RAM中的內(nèi)容沒(méi)有任何影響,僅對(duì)內(nèi)部的控制寄存器有影響,在典型的應(yīng)用中,RESET可以直接接VCC,這樣可以保證DS12C887在掉電時(shí),其內(nèi)部控制寄存器不受影響。2.3.3 DS12C887內(nèi)部地址空間2.4 DS18B20溫度傳感器DS18B20、 DS1822 “一線總線”數(shù)字化溫度傳感器是DALLAS最新單線數(shù)字溫度傳感器,同DS1820一樣,DS18B20也 支持“一線總線”接口,測(cè)量溫度范圍為 -55°C+125°C,在-10+85°C范圍內(nèi),精度為&
19、#177;0.5°C。DS1822的精度較差為± 2°C 。現(xiàn)場(chǎng)溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場(chǎng)溫度測(cè)量,與前一代產(chǎn)品不同,新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小。GND:為電源地;DQ:為數(shù)字信號(hào)輸入/輸出端;VDD:為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)2.5 HS0038紅外接收頭一體化的紅外接收裝置將遙控信號(hào)的接收、放大、檢波、整形集于一身,并且輸出可以讓單片機(jī)識(shí)別的TTL信號(hào),這樣大大簡(jiǎn)化了接收電路的復(fù)雜程度和電路的設(shè)計(jì)工作,方便使用。在本系
20、統(tǒng)中我們采用紅外一體化接收頭HS0038。HS0038黑色環(huán)氧樹(shù)脂封裝,不受日光、熒光燈等光源干擾,內(nèi)附磁屏蔽,功耗低,靈敏度高。在用小功率發(fā)射管發(fā)射信號(hào)情況下,其接收距離可達(dá)35 m。它能與TTL、COMS電路兼容。HS0038為直立側(cè)面收光型。它接收紅外信號(hào)頻率為38 kHz,周期約26 µs,同時(shí)能對(duì)信號(hào)進(jìn)行放大、檢波、整形,得到TTL電平的編碼信號(hào)。隨著家用電器、視聽(tīng)產(chǎn)品的普及,自動(dòng)化辦公設(shè)備的廣泛應(yīng)用和網(wǎng)絡(luò)化的不斷發(fā)展,越來(lái)越多的產(chǎn)品具有了待機(jī)功能(如遙控開(kāi)關(guān)、網(wǎng)絡(luò)喚醒、定時(shí)開(kāi)關(guān)、智能開(kāi)關(guān)等)。產(chǎn)品的待機(jī)功能實(shí)現(xiàn)遙控操作,極大地方便了我們的生活。在家庭或工業(yè)控制現(xiàn)場(chǎng),一些手
21、動(dòng)操作不太方便的場(chǎng)合,可以使用現(xiàn)有遙控器通過(guò)設(shè)置代替手動(dòng)操作,比如可以利用家中現(xiàn)有的彩電遙控器,控制其它沒(méi)有遙控功能的電器(如電燈、計(jì)算機(jī)、音響、電腦、打印機(jī)、飲水機(jī)、熱水器等),方便生活。GND:為電源地;Vs:為外接供電電源輸入端OUT:為紅外接收信號(hào)輸出端;第三章 硬件設(shè)計(jì)3.1 系統(tǒng)工作原理圖STC12C5A60S2單片機(jī)DS12C887時(shí)鐘芯片DS18B20溫度傳感 器HS0038紅外接收頭信息遙控信息時(shí)間信息溫度遙控信息時(shí)間溫度信息流速LCD1602液晶顯示鎖存器和流水燈3.2 LCD1602模塊電路設(shè)計(jì)其中,LCD1602的D0D7引腳分別與單片機(jī)的P0.0P0.7相連,RS引腳
22、與單片機(jī)P2.0相連,R/W引腳與單片機(jī)P2.1相連,E引腳通過(guò)3個(gè)與非門(mén)與單片機(jī)P2.7、WR和RD引腳相連。電位器VR1的作用是調(diào)節(jié)液晶顯示的亮度。3.3 DS12C887模塊電路設(shè)計(jì)其中,DS12887的AD0AD7引腳分別與單片機(jī)的P0.0P0.7相連,R/W引腳與單片機(jī)WR相連,DS引腳與單片機(jī)RD引腳相連,AS引腳與單片機(jī)ALE引腳相連,CS引腳與單片機(jī)P2.6引腳相連。3.4 DS18B20模塊電路設(shè)計(jì)3.5 遙控接收模塊電路設(shè)計(jì)3.6 流水燈模塊其中,八個(gè)二極管的陽(yáng)極通過(guò)470歐的排阻與VCC相連,陰極接到鎖存器74LS573的輸出端,鎖存器的輸入端接單片機(jī)的P0口,OC端接地
23、,鎖存端C通過(guò)幾個(gè)邏輯門(mén)接到單片機(jī)P2.5口和WR端。第四章 軟件設(shè)計(jì)4.1 系統(tǒng)程序流程圖否是DS12C887時(shí)間設(shè)置主函數(shù)開(kāi)始定時(shí)器、外部中斷初始化LCD1602液晶初始化DS12C887初始化是否需要修正時(shí)間否是DS18B20初始化DS18B20溫度信息顯示時(shí)間更新是否完畢DS12C887時(shí)間信息顯示圖4.1.1 主函數(shù)程序流程圖否是定時(shí)器0中斷函數(shù)開(kāi)始TH0、TL0賦初值流水燈是否應(yīng)該流動(dòng)流水燈循環(huán)移位結(jié) 束 圖4.1.2 定時(shí)器0中斷函數(shù)程序流程圖否是外部中斷0中斷函數(shù)開(kāi)始關(guān)閉定時(shí)器1是否為遙控起始信號(hào)定時(shí)器1初始化讀回TH1的值給TH1、TL1清0啟動(dòng)定時(shí)器1 結(jié) 束圖4.1.3
24、外部中斷0中斷函數(shù)程序流程圖否是定時(shí)器1中斷函數(shù)開(kāi)始關(guān)閉定時(shí)器1是否為真正的遙控信號(hào)處理遙控信息顯示遙控碼檢測(cè)第幾個(gè)按鍵按下修改控制流速變量的值 結(jié) 束 圖4.1.4 定時(shí)器1中斷函數(shù)程序流程圖4.2 LCD1602模塊子程序設(shè)計(jì)/*定義及子程序的聲明*/* 液晶12864口地址 */#define wr_com XBYTE0xC000 /寫(xiě)命令 #define wr_data XBYTE0xC100 /寫(xiě)數(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: 寫(xiě)入數(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: 寫(xiě)入字符串 */void write_string(BYTE *s) while(*s != '0') /'0'為字符串結(jié)束標(biāo)志 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: 將字符串寫(xiě)到指定的位置 Descriptions: 將字符串顯示在lcd的特定位置 */void write_string_lcd(BYTE line,column,unsigned char *string) set_display_place(line,column); write_string(string); Delay(1);/*Function name: 將字符寫(xiě)到指定的位置 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);/*顯示長(zhǎng)整型數(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);/*浮點(diǎn)數(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è)計(jì)/*定義及子程序的聲明*/* 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 /時(shí) #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; /* 顯示時(shí)間 */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í)間設(shè)置 */void write_time() DS_A=0x2f; /寄存器DS_B|=0x80; Years=0x13; /年
37、Month=0x12; /月 Day=0x30; /日 Week=0x01; /星期 Hour=0x16; /時(shí) Minute=0x24; /分 Second=0x00; /秒 DS_B &=0x7f; /寄存器 4.4 DS18B20模塊子程序設(shè)計(jì)/*定義及子程序的聲明*/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ù)名稱(chēng):DS1820_WriteData() *說(shuō)明:本初始化程序可以不要,因?yàn)?8B20 在出廠時(shí)就被配置為12 位精度了 */void DS18B20_Init()DS1820_Reset();DS1820_WriteData(0xCC); / 跳過(guò)ROM DS1820_WriteData(0x4E); / 寫(xiě)暫存器 DS1820_WriteData(0x20)
39、; / 往暫存器的第三字節(jié)中寫(xiě)上限值 DS1820_WriteData(0x00); / 往暫存器的第四字節(jié)中寫(xiě)下限值 DS1820_WriteData(0x7F); / 將配置寄存器配置為12 位精度 DS1820_Reset();/*DS1820 復(fù)位及存在檢測(cè)(通過(guò)存在脈沖可以判斷DS1820 是否損壞) *函數(shù)名稱(chēng):DS1820_Reset() *說(shuō)明:函數(shù)返回一個(gè)位標(biāo)量(0 或1)flag=0 存在,反之flag=1 不存在 */bit DS1820_Reset()bit flag;DS1820_DQ = 0; /拉低總線 DelayXus(480); /延時(shí)480 微秒,產(chǎn)生復(fù)位脈
40、沖 DS1820_DQ = 1; /釋放總線 DelayXus(80); /延時(shí)80 微秒對(duì)總線采樣 flag = DS1820_DQ; /對(duì)數(shù)據(jù)腳采樣 DelayXus(400); /延時(shí)400 微秒等待總線恢復(fù) return (flag); /根據(jù)flag 的值可知DS1820 是否存在或損壞 ,可加聲音告警提示DS1820 故障 /*寫(xiě)數(shù)據(jù)到DS1820*函數(shù)名稱(chēng):DS1820_WriteData()*/void DS1820_WriteData(BYTE wData)BYTE i;for (i=8;i>0;i-)DS1820_DQ = 0; /拉低總線,產(chǎn)生寫(xiě)信號(hào) DelayXu
41、s(4); /延時(shí)4us DS1820_DQ = wData&0x01; /發(fā)送1 位 DelayXus(60); /延時(shí)60us,寫(xiě)時(shí)序至少要60us DS1820_DQ = 1; /釋放總線,等待總線恢復(fù) wData>>=1; /準(zhǔn)備下一位數(shù)據(jù)的傳送 /*從DS1820 中讀出數(shù)據(jù)*函數(shù)名稱(chēng):DS1820_ReadData()*/BYTE DS1820_ReadData()BYTE i,TmepData;for (i=8;i>0;i-)TmepData>>=1;DS1820_DQ = 0; /拉低總線,產(chǎn)生讀信號(hào) DelayXus(4); /延時(shí)4us DS1820_DQ = 1; /釋放總線,準(zhǔn)備讀數(shù)據(jù) DelayXus(8
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 水電安裝維修活動(dòng)方案
- 桂平市廣場(chǎng)五四活動(dòng)方案
- 檢察院整治活動(dòng)方案
- 河北農(nóng)大活動(dòng)社團(tuán)活動(dòng)方案
- 氣焊工比武活動(dòng)方案
- 校長(zhǎng)走進(jìn)課堂活動(dòng)方案
- 漢字拼湊游戲活動(dòng)方案
- 汽車(chē)國(guó)慶活動(dòng)策劃方案
- 棋道育人活動(dòng)方案
- 森林昆蟲(chóng)聚會(huì)活動(dòng)方案
- 手術(shù)室人員出入管理制度
- 2025年貴州省羅甸縣事業(yè)單位人才引進(jìn)166人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《如何設(shè)定目標(biāo)》課件
- 房地產(chǎn)業(yè)智慧物業(yè)管理系統(tǒng)實(shí)施方案
- 2024年度城市公共停車(chē)場(chǎng)停車(chē)場(chǎng)承包經(jīng)營(yíng)合同范本3篇
- T∕HGJ 12402-2021 石油化工裝置火災(zāi)緊急隔離控制閥設(shè)計(jì)標(biāo)準(zhǔn)
- 辦公用紙項(xiàng)目建設(shè)實(shí)施方案
- 2024版《53天天練單元?dú)w類(lèi)復(fù)習(xí)》3年級(jí)語(yǔ)文下冊(cè)(統(tǒng)編RJ)附參考答案
- 辣椒購(gòu)銷(xiāo)合同范本
- 13J927-3 機(jī)械式停車(chē)庫(kù)設(shè)計(jì)圖冊(cè)
- 裝卸工安全培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論