基于51的溫度報(bào)警器設(shè)計(jì).._第1頁(yè)
基于51的溫度報(bào)警器設(shè)計(jì).._第2頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄1 概述21.1 研究背景21.2 設(shè)計(jì)思想及基本功能22 總體方案設(shè)計(jì)32.1 方案選取32.2 系統(tǒng)框圖52.3 總體方案設(shè)計(jì)63 硬件電路設(shè)計(jì)63.1 電源電路設(shè)計(jì)63.2 晶振電路73.3 復(fù)位電路73.4 矩陣鍵盤電路83.5 溫度檢測(cè)電路93.6 液晶顯示電路103.7 蜂鳴器報(bào)警電路114 系統(tǒng)軟件設(shè)計(jì)124.1主程序軟件設(shè)計(jì)124.2 鍵盤掃描程序設(shè)計(jì)144.3 溫度上下限設(shè)定程序設(shè)計(jì)154.4 延時(shí)程序設(shè)計(jì)165 系統(tǒng)調(diào)試166 總結(jié)18參考文獻(xiàn)18附錄1系統(tǒng)原理圖19附錄2程序清單201概述1.1研究背景溫度作為一種最基本的環(huán)境參數(shù),和人們的安全、生活,工農(nóng)業(yè)生產(chǎn)有著緊

2、密的聯(lián)系,因此在某些場(chǎng)合對(duì)溫度進(jìn)行檢測(cè),并且在溫度超過(guò)期待范圍后進(jìn)行報(bào)警便顯得尤為重要,對(duì)能實(shí)現(xiàn)溫度檢測(cè)并報(bào)警的裝置的設(shè)計(jì)和研發(fā)也就有了特別的意義。單片機(jī)作為一種微控制器,由于具有體積小,質(zhì)量輕,功耗低,價(jià)格便宜,可靠性高,功能強(qiáng)大等特點(diǎn),已經(jīng)進(jìn)入人們生活,工業(yè)生產(chǎn)的各個(gè)領(lǐng)域,現(xiàn)在很難在某個(gè)領(lǐng)域看不到單片機(jī)的痕跡。在智能儀表領(lǐng)域,由于單片機(jī)的上述優(yōu)點(diǎn),用單片機(jī)作為控制平臺(tái),結(jié)合不同類型的傳感器,可以很容易地對(duì)溫度,濕度,流量等物理量進(jìn)行檢測(cè)。針對(duì)在日常生活和工業(yè)生產(chǎn)中對(duì)溫度進(jìn)行檢測(cè)和監(jiān)控的需求,本課題以AT89C51單片機(jī)為核心設(shè)計(jì)了一種溫度報(bào)警器,它可以通過(guò)鍵盤對(duì)溫度進(jìn)行上下限設(shè)置,用液晶進(jìn)

3、行溫度顯示,并且在超出溫度設(shè)定范圍后發(fā)聲報(bào)警。本設(shè)計(jì)也具有一定的擴(kuò)展性,例如可以再加一個(gè)煙塵傳感器和光電傳感器,擴(kuò)展為火災(zāi)報(bào)警器。1.2 設(shè)計(jì)思想及基本功能本課題對(duì)溫度報(bào)警器進(jìn)行設(shè)計(jì)時(shí),在滿足溫度檢測(cè)和報(bào)警功能的基礎(chǔ)上,為了增加其應(yīng)用的靈活性,采用了矩陣鍵盤電路,從而可以對(duì)溫度報(bào)警范圍進(jìn)行設(shè)定,以適應(yīng)對(duì)溫度有檢測(cè)需求的不同應(yīng)用場(chǎng)合。為了增加人機(jī)交互性,采用了功耗低的字符型液晶顯示漢字和溫度。該溫度報(bào)警器具有以下基本功能:(1) 手動(dòng)設(shè)定溫度范圍:該功能使用戶可以根據(jù)不同場(chǎng)合設(shè)定溫度報(bào)警范圍,增強(qiáng)了該設(shè)計(jì)的應(yīng)用性。(2) 溫度采集:采用了數(shù)字溫度傳感器對(duì)現(xiàn)場(chǎng)溫度在-55°C到+125&

4、#176;C范圍內(nèi)的應(yīng)用場(chǎng)合進(jìn)行溫度采集。(3) 液晶顯示:通過(guò)常用的液晶模塊對(duì)當(dāng)前溫度傳感器采集的溫度進(jìn)行顯示。(4) 蜂鳴器報(bào)警:當(dāng)溫度傳感器采集的溫度不在設(shè)定范圍內(nèi)時(shí),使蜂鳴器發(fā)聲,進(jìn)行報(bào)警。2 總體方案設(shè)計(jì)2.1方案選取在用單片機(jī)作為控制核心進(jìn)行儀器設(shè)計(jì)時(shí),附加的外圍模塊選擇范圍是很寬的,在選用時(shí)要多加比較,從而做出最合理的設(shè)計(jì)。(1)溫度采集模塊選擇方案一:非數(shù)字型溫度傳感器ptioo,精度高,穩(wěn)定性好,測(cè)量范圍大;方案二:數(shù)字型溫度傳感器DS18B20,體積小,精度高,抗干擾能力強(qiáng),硬件開(kāi)銷低;這兩個(gè)方案都是在對(duì)溫度進(jìn)行檢測(cè)時(shí)經(jīng)常使用的,考慮到DS18B20的精度和測(cè)溫范圍對(duì)本設(shè)計(jì)

5、已經(jīng)足夠,且在使用時(shí)不需要進(jìn)行AD轉(zhuǎn)換,硬件電路簡(jiǎn)單,所以本設(shè)計(jì)采用DS18B20作為溫度檢測(cè)模塊。(2)顯示模塊選擇方案一:三位數(shù)碼管顯示,數(shù)碼管是單片機(jī)設(shè)計(jì)中常見(jiàn)的顯示模塊,可以顯示0至9十個(gè)數(shù)字和小數(shù)點(diǎn),價(jià)格便宜。方案二:字符型液晶模塊顯示,液晶模塊顯示清晰,功耗低,可以顯示數(shù)字,漢字,英文字符和某些特殊符號(hào),人機(jī)交互性好。考慮到使用數(shù)碼管顯示要占用大量的IO口引腳,且沒(méi)有液晶顯示內(nèi)容豐富,所以本溫度報(bào)警器采用液晶模塊顯示當(dāng)前溫度。2.2系統(tǒng)框圖系統(tǒng)框圖如圖2.1圖2.1系統(tǒng)框圖2.3總體方案設(shè)計(jì)本課題設(shè)計(jì)的溫度報(bào)警器是在滿足基本功能的基礎(chǔ)上,盡可能的簡(jiǎn)化電路,增加人機(jī)交互性。在溫度傳感

6、器選擇時(shí),為了避免大量的硬件設(shè)計(jì),增加成本,選擇了數(shù)字型溫度傳感器,從而不用在使用時(shí)進(jìn)行AD轉(zhuǎn)換,附加復(fù)雜的信號(hào)調(diào)理電路;在液晶模塊選擇時(shí),考慮到單片機(jī)10口的利用率,舍棄了需占用大量10口并行傳輸?shù)?602,選擇了可以進(jìn)行串行傳輸?shù)?2864;在報(bào)警方式選擇時(shí),舍棄了液晶顯示閃爍報(bào)警,選擇了更能引起用戶注意的蜂鳴器發(fā)聲報(bào)警方式。3 硬件電路設(shè)計(jì)3.1電源電路設(shè)計(jì)51單片機(jī),溫度傳感器DS18B20,12864液晶模塊所需正常的工作電壓是5V,因此設(shè)計(jì)的電源應(yīng)能夠提供5V直流電,圖3.1是設(shè)計(jì)的電源電路圖。在該電源電路中使用了三端集成穩(wěn)壓芯片LM7805,可以輸出5V直流電壓。圖3.1電源電路

7、圖3.2晶振電路電路中的晶振就是石英晶體震蕩器。石英晶體震蕩器具有非常好的頻率穩(wěn)定性和抗外界干擾的能力,所以,石英晶體震蕩器常用來(lái)產(chǎn)生基準(zhǔn)頻率的。此外它還可以產(chǎn)生振蕩電流,向單片機(jī)發(fā)出時(shí)鐘信號(hào)。圖3.2是設(shè)計(jì)的單片機(jī)晶振電路。片內(nèi)電路與片外器件構(gòu)成一個(gè)時(shí)鐘產(chǎn)生電路,晶振頻率一般多在1.2MHz24MHz之間選取。Cl、C2是反饋電容,其值在20pFlOOpF之間選取,一般為3OpF左右。本電路選用的電容為33pF,晶振頻率為12MHz。時(shí)鐘周期為lus。3.3復(fù)位電路復(fù)位電路的主要功能是使單片機(jī)進(jìn)行初始化,在初始化的過(guò)程中需要在復(fù)位引腳上加大于2個(gè)機(jī)器周期的高電平。復(fù)位后的單片機(jī)地址初始化為0

8、000H,然后單片機(jī)繼續(xù)從OOOOH單元開(kāi)始執(zhí)行程序。單片機(jī)復(fù)位有上電復(fù)位和手動(dòng)復(fù)位兩種方式,圖3.3所示的復(fù)位電路可以實(shí)現(xiàn)上電復(fù)位和手動(dòng)復(fù)位兩種基本功能。3.4矩陣鍵盤電路由于采用單個(gè)按鍵的方式會(huì)提高設(shè)計(jì)的復(fù)雜性,且占用10口較多,本設(shè)計(jì)采用了4*4矩陣鍵盤,矩陣鍵盤的應(yīng)用可以獲取16個(gè)鍵值,降低了設(shè)計(jì)難度,節(jié)約了單片機(jī)I0口,提高了單片機(jī)I0口的利用率。4*4矩陣鍵盤電路在本溫度報(bào)警器設(shè)計(jì)中起到的作用是設(shè)定報(bào)警溫度的上下限,它的四條行線和四條列線占用了單片機(jī)的P1口,如圖3.4所示。其中SO至S9用于設(shè)定溫度值,S10按下則啟動(dòng)設(shè)定溫度下限,S11按下則啟動(dòng)設(shè)定溫度上限。6P10圖3.4矩

9、陣鍵盤電路圖PllP12P13P14P1516J173.5溫度檢測(cè)電路溫度檢測(cè)電路采用的是單線數(shù)字型溫度傳感器DS18B20,其外形如圖3.5所示。DS18B20獨(dú)特的單總線接口使其僅通過(guò)一條數(shù)據(jù)線就可以完成數(shù)據(jù)傳輸。它的供電電壓在3V至5.5V之間,感溫范圍在-55攝氏度至+125攝氏度之間,9至12位可調(diào)分辨率。123DS18B20有3條輸出引線,分別接電源,地,單片機(jī)引腳,由于在正常工作時(shí),該傳感器需要約1mA的驅(qū)動(dòng)電流,所以硬件電路需要在接電源和地的兩條引線之間接一個(gè)約5K的電阻,硬件電路圖如圖3.6所示U2VCCR44.7KvccDATAGNDDS18B20圖3.6溫度檢測(cè)電路3.6

10、液晶顯示電路本課題設(shè)計(jì)的溫度報(bào)警器顯示模塊采用的是字符型液晶QC12864B,帶中文字庫(kù)的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128X64,內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示8X4行(即32個(gè))16X16點(diǎn)陣的漢字.也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的

11、價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。本設(shè)計(jì)采用的是該液晶的串行方式,其串行方式引腳接法如表1所示,硬件電路圖如圖3.7所示。表1:QC12864B串行方式引腳接線圖管腳號(hào)名稱LEVEL功能1VSS0V電源地2VDD+5V電源正3Vo-對(duì)比度調(diào)整4CSH/L片選,咼電平有效5SIDH/L串行數(shù)據(jù)輸入6CLKH/L串行同步時(shí)鐘,上升沿讀取SID數(shù)據(jù)15PSBLL:串行方式19AVDD背光源電壓+5V20KVSS背光源負(fù)端0V圖3.7液晶顯示電路3.7蜂鳴器報(bào)警電路當(dāng)溫度超過(guò)設(shè)定范圍時(shí),采用蜂鳴器模塊電路報(bào)警,電路中跳線帽的作用是可以人為地接通或斷開(kāi)該電路,電阻起到限流的作用。電路工作原理是當(dāng)溫度超

12、出溫度設(shè)定范圍時(shí),通過(guò)程序編程給P0口第7個(gè)引腳賦為低電平,三極管導(dǎo)通,蜂鳴器發(fā)聲。圖3.8蜂鳴器報(bào)警電路4 系統(tǒng)軟件設(shè)計(jì)系統(tǒng)軟件設(shè)計(jì)主要包括鍵盤掃描子程序,溫度上下限設(shè)定子程序,延時(shí)子程序等幾部分構(gòu)成。本章節(jié)系統(tǒng)的介紹了溫度報(bào)警器的主程序和各主要功能子程序的設(shè)計(jì)流程,具體的程序代碼見(jiàn)附錄2。4.1主程序軟件設(shè)計(jì)主程序構(gòu)成無(wú)限循環(huán),主要完成相關(guān)模塊初始化,溫度采集,設(shè)定溫度上下限,液晶顯示,溫度超出設(shè)定范圍時(shí)蜂鳴器報(bào)警等功能,主程序的流程圖如圖4.1所示。圖4.1主程序流程圖程序首先進(jìn)行相關(guān)宏定義,定義變量和數(shù)組,編寫(xiě)所需要的子函數(shù),然后在主函數(shù)中調(diào)用液晶初始化子函數(shù)對(duì)液晶進(jìn)行初始化,并在液晶

13、第一行顯示溫度顯示'四個(gè)漢字,調(diào)用溫度采集函數(shù)對(duì)當(dāng)前溫度進(jìn)行采集,調(diào)用溫度上下限設(shè)定子函數(shù)設(shè)定適合現(xiàn)場(chǎng)的溫度范圍,然后將采集到的溫度值同設(shè)定的溫度上下限進(jìn)行比較。若在設(shè)定范圍內(nèi),則調(diào)用液晶顯示函數(shù)顯示當(dāng)前溫度并返回到溫度采集子函數(shù)調(diào)用處;若不在設(shè)定范圍內(nèi),則調(diào)用液晶顯示函數(shù)顯示當(dāng)前溫度,使蜂鳴器報(bào)警,程序返回溫度采集子函數(shù)調(diào)用處。4.2 鍵盤掃描程序設(shè)計(jì)圖4.2鍵盤掃描程序流程圖該鍵盤掃描程序采用行掃描的方式,從第一行掃描到第四行,首先將第一行設(shè)為低電平,其余行為高電平,通過(guò)讀取P1口高四位電平情況判斷是否有鍵按下,若無(wú)鍵按下則掃描下一行,若有鍵按下,延時(shí)5ms消抖,再次判斷是否有鍵按

14、下,若無(wú)鍵按下則掃描下一行,若有鍵按下則通過(guò)switch語(yǔ)句獲取相應(yīng)鍵值,松手檢測(cè)后掃描下一行。4.3 溫度上下限設(shè)定子程序設(shè)計(jì)圖4.3溫度上下限設(shè)定子程序流程圖該程序功能是設(shè)定溫度上下限,程序開(kāi)始,調(diào)用鍵盤掃描函數(shù)獲取一個(gè)鍵值,通過(guò)第一個(gè)訐語(yǔ)句判斷該鍵值是否為10,若是則通過(guò)for循環(huán)執(zhí)行三次依次獲取三個(gè)鍵值并賦給數(shù)組b,從而計(jì)算出溫度下限1,然后再次調(diào)用鍵盤掃描函數(shù)通過(guò)第二個(gè)訐語(yǔ)句進(jìn)行所得鍵值是否為11的判斷;在第一個(gè)訐語(yǔ)句判斷中若鍵值不為10,則通過(guò)第二個(gè)訐語(yǔ)句進(jìn)行所得鍵值是否為11的判斷。在第二個(gè)訐語(yǔ)句進(jìn)行所得鍵值是否為11的判斷中,若鍵值為11,則通過(guò)for循環(huán)執(zhí)行三次依次獲取三個(gè)鍵

15、值并賦給數(shù)組c,從而計(jì)算出溫度上限h,然后程序結(jié)束;若不為11,則程序結(jié)束。4.4延時(shí)子程序設(shè)計(jì)圖4.4延時(shí)子程序流程圖由于單片機(jī)采用的是12MHZ晶振,則執(zhí)行一條空指令所用時(shí)間恰為1us,子函數(shù)中設(shè)定的參數(shù)x是空指令執(zhí)行次數(shù),所以這是一個(gè)us級(jí)的軟件延時(shí)函數(shù)。5系統(tǒng)調(diào)試由于實(shí)驗(yàn)室的儀器較老,有些損壞,為了更好地調(diào)試,最終采用了自己買的51開(kāi)發(fā)板。首先利用Keil軟件進(jìn)行編程,反復(fù)調(diào)試無(wú)錯(cuò)后生成了一個(gè)Hex文件,然后將程序燒錄進(jìn)單片機(jī)里面,進(jìn)行運(yùn)行。單片機(jī)運(yùn)行后采集到當(dāng)時(shí)室內(nèi)溫度為11.6°C,如圖5.1,用矩陣鍵盤將溫度上下限設(shè)為10°C15°C,用手捏住溫度傳

16、感器DS18B20段時(shí)間,當(dāng)傳感器采集到的溫度大于15C時(shí),如圖5.2,蜂鳴器成功報(bào)警,說(shuō)明該單片機(jī)系統(tǒng)能夠很好地完成預(yù)期的功能。6總結(jié)經(jīng)過(guò)一周多的努力,終于完成了單片機(jī)課程設(shè)計(jì),我們小組的題目是基于89C51的溫度報(bào)警器設(shè)計(jì),在經(jīng)過(guò)大量的資料查閱后,我經(jīng)過(guò)比較論證,進(jìn)行了以AT89C51單片機(jī)為微控制器的溫度報(bào)警器設(shè)計(jì)。該設(shè)計(jì)圍繞單片機(jī)附加了矩陣鍵盤電路,可以對(duì)溫度上下限進(jìn)行設(shè)定,增強(qiáng)了該設(shè)計(jì)的適應(yīng)性;附加了溫度檢測(cè)模塊,液晶模塊,蜂鳴器電路分別對(duì)溫度進(jìn)行檢測(cè)和顯示,并在溫度超出設(shè)定值時(shí)發(fā)聲報(bào)警。由于基礎(chǔ)和時(shí)間有限,在設(shè)計(jì)過(guò)程中存在一些考慮不周的地方,例如在選擇顯示模塊時(shí),只考慮到和數(shù)碼管相

17、比,液晶具有顯示內(nèi)容豐富,低功耗的特性,在價(jià)格上考慮較少,此外,由于程序較復(fù)雜,還存在一些可以簡(jiǎn)化的地方。總之,通過(guò)一個(gè)完整的課程設(shè)計(jì),讓我對(duì)所學(xué)的單片機(jī)知識(shí)有了更加深刻的理解和掌握,了解了用C語(yǔ)言對(duì)單片機(jī)進(jìn)行編程的方法,此外使我復(fù)習(xí)了protel畫(huà)電路圖,visio畫(huà)流程圖,從而為以后的畢業(yè)設(shè)計(jì)打下了堅(jiān)實(shí)的基礎(chǔ)。參考文獻(xiàn)1 張迎新.單片微型計(jì)算機(jī)原理、應(yīng)用及接口技術(shù)(第2版)M.北京:國(guó)防工業(yè)出版社,20042 偉福LAB6000系列單片機(jī)仿真實(shí)驗(yàn)系統(tǒng)使用說(shuō)明書(shū)3 閻石數(shù)字電路技術(shù)基礎(chǔ)(第五版)北京:高等教育出版社,20064 郭天祥.新概念51單片機(jī)C語(yǔ)言教程.北京:電子工業(yè)出版社,200

18、918附錄1系統(tǒng)原理圖附錄2程序清單#include<reg51.h>19包含_nop_()的定義/對(duì)無(wú)符號(hào)整型數(shù)據(jù)類型進(jìn)行宏定義/對(duì)無(wú)符號(hào)字符型數(shù)據(jù)類型進(jìn)行宏定義對(duì)P0口的相關(guān)引腳進(jìn)行位定義#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharsbitP03=P0A3;sbitP04=P0A4;sbitP05=P0A5;sbitP06=P0A6;sbitP07=P0A7;#definers_1P03=1#definers_0P03=0#definerw_1P04=1#definerw_0P04

19、=0#defineen_1P05=1#defineen_0P05=0#defineDS_0P06=0#defineDS_1P06=1#defineDS_HDS_1#defineDS_LDS_0uintTEMP_Result,te;uchartable="溫度顯示"uinti,a3,b3,c3,l=100,h=300uchartemp_low,temp_high,num;ucharkey,temp;voiddelay_us(uintx)for(i=0;i<x;i+)/宏定義rs_1表示寄存數(shù)據(jù)/宏定義rs_0表示寄存指令/宏定義rw_1表示讀操作/宏定義rw_0表示寫(xiě)操

20、作/宏定義en_1表示使能/宏定義en_0表示禁止/設(shè)P0.6引腳為低電平設(shè)P0.6引腳為高電平設(shè)P0.6引腳為輸入設(shè)P0.6引腳為輸出/定義整型變量/定義無(wú)符號(hào)字符型數(shù)組/定義無(wú)符號(hào)整型變量和數(shù)組/定義無(wú)符號(hào)字符型變量/定義us級(jí)延時(shí)函數(shù)_nop_();ucharkeyscan()/定義鍵盤掃描函數(shù)/*掃描第一行*/P1=0xfe;temp=P1;temp=temp&0xf0;while(temp!=0xf0)/將第一行設(shè)為低電平/讀取P1口電平/獲取列線電平狀態(tài)/當(dāng)有鍵按下時(shí)掃描第一行delay_us(5000);/延時(shí)5ms消抖temp=Pl;temp=temp&0xf0

21、;讀取Pl口電平/獲取列線電平狀態(tài)while(temp!=0xf0)/當(dāng)有鍵按下時(shí)temp=P1;讀取Pl口電平switch(temp)/switch語(yǔ)句獲取鍵值caseOxee:key=1;若Pl口電平為Oxee,break;caseOxde:key=2;若Pl口電平為Oxde,break;caseOxbe:key=3;若Pl口電平為Oxbe,break;case0x7e:key=4;若Pl口電平為0x7e,則得到鍵值l則得到鍵值2則得到鍵值3則得到鍵值4break;while(temp!=OxfO)/松手檢測(cè)temp=Pl;temp=temp&OxfO;21/*掃描第二行*/P1=

22、0xfd;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay_us(5000);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case0xed:key=5;break;case0xdd:key=6;break;case0xbd:key=7;break;case0x7d:key=8;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;/*掃描第三行*/P1=0xfb;temp=P1;temp=temp&0xf0;

23、while(temp!=0xf0)delay_us(5000);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case0xeb:key=9;break;case0xdb:key=0;break;case0xbb:key=10;break;case0x7b:key=11;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;/*掃描第四行*/23P1=0xf7;temp=P1;temp=temp&0xf0;while(temp!=0xf0)delay_us(50

24、00);temp=P1;temp=temp&0xf0;while(temp!=0xf0)temp=P1;switch(temp)case0xe7:key=12;break;case0xd7:key=13;break;case0xb7:key=14;break;case0x77:key=15;break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;returnkey;/將鍵值返回至鍵盤掃描函數(shù)調(diào)用處voidarea()溫度上下限設(shè)定函數(shù),程序設(shè)定溫度上下限最大范圍為00.0到99.9keyscan();調(diào)用鍵盤掃描函數(shù)獲取鍵值if(key=10

25、)如果鍵值為10,開(kāi)始設(shè)定溫度下限for(i=0;i<3;i+)keyscan();bi=key;delay_us(5000);l=100*b0+10*b1+b2;/b0為十位數(shù)值,b1為個(gè)位數(shù)值,b2為十分位數(shù)值keyscan();if(key=11)如果鍵值為11,開(kāi)始設(shè)定溫度上限for(i=0;i<3;i+)keyscan();ci=key;delay_us(5000);h=100*c0+10*c1+c2;voidSendbyte(uchardat)串行發(fā)送數(shù)據(jù)子函數(shù)for(i=0;i<8;i+)en_0;if(dat&0x80)如果最高位數(shù)據(jù)被發(fā)送25rw_1

26、;elserw_0;en_1;dat=datvvl;左移一位voidwrite_com(ucharcom)/寫(xiě)指令子函數(shù)rs_l;Sendbyte(0xf8);Sendbyte(com&0xfO);取高四位,數(shù)據(jù)分兩次傳送/每字節(jié)的內(nèi)容被送入兩個(gè)字節(jié)/高四位放在第一個(gè)字節(jié)的高四位Sendbyte(com&0x0f)vv4);低四位放在第二個(gè)字節(jié)的高四位rs_0;voidwrite_date(uchardate)/寫(xiě)數(shù)據(jù)子函數(shù)rs_l;Sendbyte(0xfa);Sendbyte(date&0xf0);Sendbyte(date&0x0f)vv4);rs_0;v

27、oidlcd_init()液晶初始化子函數(shù)write_com(0x0l);/清除顯示屏幕write_com(0x30);/基本指令集動(dòng)作write_com(0x0c);/開(kāi)顯示,無(wú)游標(biāo)write_com(0x06);/設(shè)定光標(biāo)右移,整屏不移動(dòng)24write_com(0x02);/清DDRAM位址歸位write_com(0x82);/將第一行顯示位置設(shè)為第3個(gè)漢字位for(num=0;num<8;num+)/在第一行顯示漢字“溫度顯示”write_date(tablenum);voidlcd_display()/lcd顯示函數(shù)write_com(0x92);/設(shè)定溫度值顯示的位置write

28、_date(0x30+a0);顯示溫度十位數(shù)值write_date(0x30+al);顯示溫度個(gè)位數(shù)值write_date(0x2e);/顯示小數(shù)點(diǎn)write_date(0x30+a2);顯示溫度十分位數(shù)值write_date(0xAl);/*lcd顯示溫度值符號(hào)*/write_date(0xE6);intDSl8B20_init(void)intt;DS_H;delay_us(50);_nop_();/_nop_();是單周期指令,實(shí)現(xiàn)短時(shí)間延時(shí)_nop_();DS_L;DS_0;/主器件拉低delay_us(500);/最少480usDS_H;/電阻上拉delay_us(60);/等待l5

29、60usif(P06=0)t=l;elset=0;判斷存在脈沖,DS18B20是否拉低31delay_us(3);/延時(shí)大于1usDS_H;高,/IO口設(shè)為輸出,DS18B20拉低,則讀出0;電阻上拉拉delay_us(3);/延時(shí)小于15usif(P06=1)date=1;elsedate=0;判斷10輸入狀態(tài)delay_us(80);/延時(shí)大于45us/主器件拉低開(kāi)始DS_0;DS_H;delay_us(480);return(t);voidDS18B20_w(uchardate)DS_L;DS_0;delay_us(3);if(date)DS_H;elseDS_L;DS_0;delay_us(80);DS_H;delay_us(60);ucharDS18B20_r(void)chardate;DS_L;/最小480us/若DS18B20復(fù)位,返回值t=1/主器件拉低開(kāi)始/最少延時(shí)1us/電阻上拉,寫(xiě)1/主器件拉低,寫(xiě)0/寫(xiě)時(shí)隙必須至少持續(xù)60ms/大于1us延時(shí)即可delay_us(60);return(date);voidwrite_byte(unsignedcharbyte)for(i=0;i<8;i+)DS18B20_w(byte&0x01);時(shí)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論