基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作_第1頁(yè)
基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作_第2頁(yè)
基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作_第3頁(yè)
基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作_第4頁(yè)
基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

目錄

1產(chǎn)品功能分析.........................................................................................................1

2產(chǎn)品硬件設(shè)計(jì).........................................................................................................1

2.1單片機(jī)的選擇..............................................................................................1

2.2傳感器的選擇..............................................................................................2

2.3系統(tǒng)框圖設(shè)計(jì)..............................................................................................2

3產(chǎn)品硬件設(shè)計(jì).........................................................................................................3

3.1STC89C52RC單片機(jī)核心電路設(shè)計(jì).............................................................3

3.2按鍵電路設(shè)計(jì)..............................................................................................4

3.3LCD1602液晶顯示模塊電路.......................................................................5

4產(chǎn)品軟件設(shè)計(jì).........................................................................................................6

4.1主程序流程圖..............................................................................................6

4.2LCD1602液晶顯示程序設(shè)計(jì)......................................................................7

4.3傳感器模塊程序設(shè)計(jì).................................................................................8

4.4產(chǎn)品程序清單.............................................................................................9

5產(chǎn)品使用說(shuō)明.......................................................................................................10

5.1產(chǎn)品裝配圖................................................................................................10

5.2產(chǎn)品調(diào)試....................................................................................................11

5.3產(chǎn)品使用說(shuō)明............................................................................................12

6產(chǎn)品設(shè)計(jì)技術(shù)標(biāo)準(zhǔn)...............................................................................................13

附錄1元器件清單...................................................................................................14

附錄2電路原理圖...................................................................................................15

附錄3PCB設(shè)計(jì)圖....................................................................................................16

附錄4產(chǎn)品實(shí)物圖...................................................................................................17

附錄5主程序代碼...................................................................................................18

參考資料.....................................................................................................................33

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與制作

1產(chǎn)品功能分析

(1)掌握51單片機(jī)的集成開(kāi)發(fā)環(huán)境,并且利用C語(yǔ)言編程來(lái)進(jìn)行編寫(xiě)程

序文件。通過(guò)溫濕度傳感器DHT11采集溫度與濕度,即時(shí)傳輸給單片機(jī)處理。

(2)通過(guò)LCD1602液晶第一行顯示屏顯示溫度,第二行顯示濕度。

(3)閾值可以通過(guò)按鍵進(jìn)行設(shè)置安全閾值。

(4)若是超過(guò)安全閾值,蜂鳴器鳴叫報(bào)警。

(5)通過(guò)時(shí)鐘芯片液晶第一行顯示屏顯示時(shí)間和星期,第二行顯示日期。

2產(chǎn)品硬件設(shè)計(jì)

電路總體上分為顯示模塊、中央處理器、溫濕度采集、報(bào)警模塊四部分部

分。以STC89C52單片機(jī)最小系統(tǒng)作為核心控制電路,控制DHT11傳感器采集的

溫濕度的轉(zhuǎn)換,控制1602液晶屏的顯示,以及蜂鳴器的報(bào)警。具體顯示內(nèi)容及

方式由軟件來(lái)完成。采集溫濕度方面由DHT11傳感器來(lái)完成,它是一個(gè)數(shù)字溫

濕度傳感器、內(nèi)置模數(shù)轉(zhuǎn)換,可以直接與單片機(jī)相連接。而1602液晶屏是插針

式,也可以直接與單片機(jī)相連接。因此不需要手動(dòng)焊接等復(fù)雜的過(guò)程。具體步

驟是:按照原理圖將傳感器、1602液晶顯示屏分別接入單片機(jī)。通過(guò)DHT11傳

感器采集當(dāng)前的溫濕度值、再經(jīng)單片機(jī),將處理后的數(shù)據(jù)傳送到液晶屏上顯示

出來(lái),并且接入蜂鳴器,設(shè)置溫度的上下限值,從而實(shí)現(xiàn)越限報(bào)警。

2.1單片機(jī)的選擇

STC89C51系列單片機(jī)的指令系統(tǒng)和AT89C51系列的完全兼容,但實(shí)際操作

起來(lái)卻存在很多問(wèn)題:

(1)AT89C51不帶ISP下載,要用下載器才可以運(yùn)行,STC89C52可以使用

USB轉(zhuǎn)串口下載,下載軟件可以到STC廠家網(wǎng)上下載。

(2)STC單片機(jī)執(zhí)行指令的速度很快,大約是AT的三至三十倍,雖然執(zhí)行

速度加快,但這樣的話(huà),在AT上可以正常運(yùn)行的程序在STC上不一定可以運(yùn)行,

最典型的例子就是那些對(duì)時(shí)序有嚴(yán)格要求的模塊,用STC時(shí)注意得加長(zhǎng)延時(shí),

大約是AT的十至三十倍。

1

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

(3)STC單片機(jī)對(duì)工作環(huán)境的要求相對(duì)較低,電壓低于5伏時(shí)仍然正常工

作,甚至3伏到4伏之間都還可以工作,然而這樣的環(huán)境下AT就無(wú)法正常工作

了,所以當(dāng)一個(gè)系統(tǒng)用STC單片機(jī)好用,但用AT的單片機(jī)不工作時(shí),直接檢查

最小系統(tǒng),看單片機(jī)的供電是否正常。

由于在學(xué)校期間學(xué)過(guò)數(shù)字電路、單片機(jī)原理、C語(yǔ)言程序設(shè)計(jì),綜合考慮單

片機(jī)的各部分資源和作為學(xué)生能夠獲得的資源,經(jīng)過(guò)對(duì)比此次設(shè)計(jì)要求,我選

擇用STC系列芯片完成。而且學(xué)校也提供了相應(yīng)的硬件操作平臺(tái),實(shí)際操作起

來(lái)比較方便,故STC為更合理的選擇。

2.2傳感器的選擇

選用DHT11作為設(shè)計(jì)的溫濕度檢測(cè)模塊。DHT11是一款集成型的數(shù)字溫濕度

一體傳感器。它應(yīng)用專(zhuān)用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),可以確保產(chǎn)

品具有極高的可靠性以及卓越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電阻式感濕元件

和一個(gè)NTC測(cè)溫元件,并與一個(gè)高性能8位單片機(jī)相連接。因此該產(chǎn)品具有品

質(zhì)卓越、超快響應(yīng)、抗干擾能力強(qiáng)、性?xún)r(jià)比極高的優(yōu)點(diǎn)。測(cè)量范圍是

20%~90%RH,0℃~50℃。測(cè)溫精度為-\+2℃,測(cè)濕精度為-\+5%RH。完全符合本

次畢業(yè)設(shè)計(jì)的要求。

經(jīng)上述分析,此方案簡(jiǎn)便易行、可靠穩(wěn)定,具有超高的性?xún)r(jià)比。

2.3系統(tǒng)框圖設(shè)計(jì)

本產(chǎn)品系統(tǒng)框圖設(shè)計(jì)如圖2-1所示:

圖2-1系統(tǒng)框圖

2

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

3產(chǎn)品硬件設(shè)計(jì)

由STC89C52RC單片機(jī)組成的此系統(tǒng),溫濕度傳感器,LCD1602液晶顯示器,

蜂鳴器模塊,按鍵模塊,時(shí)鐘模塊,以及電源組成。

通過(guò)數(shù)字溫濕度傳感器DHT11采集溫濕度數(shù)據(jù),即時(shí)傳輸給單片機(jī);單片

機(jī)將收到的信號(hào)進(jìn)行分析和處理,將采集到時(shí)溫濕度實(shí)時(shí)數(shù)據(jù)送給1602液晶顯

示屏;通過(guò)1602LCD液晶屏完成溫濕度的數(shù)據(jù)顯示;給定溫度濕度上下限數(shù)值,

設(shè)置不同的溫濕度,接入蜂鳴器,實(shí)現(xiàn)越限報(bào)警。

電路板上有五個(gè)按鍵,一個(gè)是電源的開(kāi)關(guān)按鍵,一個(gè)是復(fù)位按鍵,其余三

個(gè)是設(shè)置鍵,設(shè)置+、設(shè)置-、設(shè)置跳轉(zhuǎn),設(shè)置+、設(shè)置-、只能在設(shè)置模式中操

作。

3.1STC89C52RC單片機(jī)核心電路設(shè)計(jì)

STC89C52RC是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)

可編程Flash存儲(chǔ)器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程

Flash,使得STC89C52RC為眾多嵌入式控制應(yīng)用系統(tǒng)提供更加靈活、有效的解

決方案。

具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線(xiàn),看門(mén)狗定

時(shí)器,內(nèi)置4KBEEPROM,MAX810復(fù)位電路,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一

個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。

STC89C52RC單片機(jī)原理圖(a)如圖3-1所示:

3

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖3-1STC89C52RC單片機(jī)原理圖(a)

STC89C52RC單片機(jī)實(shí)物圖如圖3-2所示

圖3-2STC89C52RC單片機(jī)實(shí)物圖(b)

3.2按鍵電路設(shè)計(jì)

有一種電子開(kāi)關(guān)—按鍵,僅需要按下按鍵就可以實(shí)現(xiàn)開(kāi)關(guān)接通,松開(kāi)按鍵

就可以斷開(kāi)連接,清楚按鍵內(nèi)部的金屬?gòu)椘?,受力后彈?dòng)觸發(fā)來(lái)實(shí)現(xiàn)接通、斷

開(kāi)功能。在這個(gè)設(shè)計(jì)中,按鍵是一個(gè)系統(tǒng)輸入,是實(shí)現(xiàn)人機(jī)交互的樞紐,要實(shí)

現(xiàn)對(duì)系統(tǒng)進(jìn)行輸入,按鍵單片機(jī)控制引腳默認(rèn)為高電平,按鍵按下,單片機(jī)對(duì)

應(yīng)引腳成為低電平。按鍵電路原理圖如圖3-3所示。

4

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖3-3按鍵電路原理圖

3.3LCD1602液晶顯示模塊電路

LCD1602是一種工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。(16

列2行)。在日常生活中,我們對(duì)液晶顯示器并不陌生。液晶顯示模塊已作為很

多電子產(chǎn)品的通過(guò)器件,如在計(jì)算器、萬(wàn)用表、電子表及很多家用電子產(chǎn)品中

都可以看到,顯示的主要是數(shù)字、專(zhuān)用符號(hào)和圖形。在單片機(jī)的人機(jī)交流界面

中,一般的輸出方式有以下幾種:發(fā)光管、LED數(shù)碼管、液晶顯示器。發(fā)光管

和LED數(shù)碼管比較常用,軟硬件都比較簡(jiǎn)單。

在單片機(jī)系統(tǒng)中應(yīng)用晶液顯示器作為輸出器件有以下幾個(gè)優(yōu)點(diǎn):

由于液晶顯示器的每一個(gè)點(diǎn)在收到信號(hào)后就一直保持色彩和亮度,恒定發(fā)

光,而不像陰極射線(xiàn)管顯示器(CRT)那樣需要不斷刷新亮點(diǎn)。因此,液晶顯示

器的畫(huà)質(zhì)更高且不會(huì)閃爍。

液晶顯示器都是數(shù)字式的,和單片機(jī)系統(tǒng)的接口更加簡(jiǎn)單可靠,操作更加

方便。

液晶顯示器通過(guò)顯示屏上的電極控制液晶分子狀態(tài)來(lái)達(dá)到顯示的目的,在

重量上比顯示面積相同的傳統(tǒng)顯示器要輕得多。

相對(duì)而言,液晶顯示器的功耗主要消耗在其內(nèi)部的電極和驅(qū)動(dòng)IC上,因而

耗電量比其它顯示器要少得多。

字符型液晶顯示模塊是一種專(zhuān)門(mén)用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,

目前常用16*1,16*2,20*2和40*2行等的模塊。

LCD1602管腳功能如表3-1所示。

液晶顯示器電路原理圖如圖3-4所示。

5

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

表3-1LCD1602管腳功能表

引腳符號(hào)功能描述

1VSS接地

2VDD接電源

3V0對(duì)比度調(diào)整端

4RS寄存器選擇

5R/W讀寫(xiě)信號(hào)線(xiàn)

6E使能端

7-14D0-D78位雙向數(shù)據(jù)線(xiàn)

15B背光源正極

16B背光源負(fù)極

圖3-4液晶顯示器電路原理圖

4產(chǎn)品軟件設(shè)計(jì)

本產(chǎn)品采用了C語(yǔ)言,KELL編程環(huán)境,使用的是簡(jiǎn)單的模塊化設(shè)計(jì),需要

先使用流程圖建立程序框架,劃分整個(gè)設(shè)計(jì)的各個(gè)模塊,然后逐個(gè)模塊實(shí)現(xiàn)其

功能,最終把各個(gè)子模塊合理的連接起來(lái),從而構(gòu)成總的程序。

4.1主程序流程圖

主程序首先要對(duì)整個(gè)系統(tǒng)進(jìn)行初始化,然后將采集到的溫濕度指令傳給系

統(tǒng)的主程序流程圖,主程序流程圖如圖4-1所示。

6

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖4-1主程序流程圖

4.2LCD1602液晶顯示程序設(shè)計(jì)

液晶顯示模塊是一個(gè)慢顯示器件,要先確認(rèn)模塊的忙標(biāo)志再執(zhí)行每條指令,

如果忙標(biāo)志為低電平,表示不忙,則此指令失效,要顯示字符時(shí)要先輸入顯示

字符地址,告訴模塊在哪里現(xiàn)實(shí)了字符。1602液晶顯示模塊可與STC89C52直

接接口,軟件流程圖如圖4-2所示。

7

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖4-2LCD流程圖

4.3傳感器模塊程序設(shè)計(jì)

隨著科技的不斷發(fā)展使用溫濕度模塊DH11數(shù)字溫濕傳感器加濕器溫濕度

傳感器制成的,汽車(chē)、空調(diào)、除濕器、烘干機(jī)等種類(lèi)繁多的電器都已進(jìn)入人們

的日常生活,這些電器設(shè)備大部分都離不開(kāi)對(duì)溫度、濕度等環(huán)境因素的要求。

因此,溫度、濕度傳感器用途越來(lái)越廣泛。新一代的數(shù)字傳感器不再需要外置

的AD轉(zhuǎn)換模塊,并具有標(biāo)準(zhǔn)接口,使用方便,得到了越來(lái)越多的應(yīng)用。DHT11

作為一種新型的單總線(xiàn)溫濕度數(shù)字傳感器,具有更多的優(yōu)點(diǎn),它使系統(tǒng)設(shè)計(jì)更

加簡(jiǎn)單,控制方便,易于實(shí)現(xiàn)。1單總線(xiàn)通信簡(jiǎn)介目前常用的微機(jī)與外設(shè)之間

進(jìn)行數(shù)據(jù)傳輸?shù)拇锌偩€(xiàn)主要有I2C總線(xiàn)、SPI總線(xiàn)和SCI總線(xiàn)。其中I2C總線(xiàn)

以同步串行兩線(xiàn)方式進(jìn)行通信(1條時(shí)鐘線(xiàn),1條數(shù)據(jù)線(xiàn)),SPI總線(xiàn)則以同步串行

三線(xiàn)方式進(jìn)行通信(1條時(shí)鐘線(xiàn),1條數(shù)據(jù)輸入線(xiàn),1條數(shù)據(jù)輸出線(xiàn)),而SCI總線(xiàn)

是以異步方式進(jìn)行通信的(1條數(shù)據(jù)輸入線(xiàn),1條數(shù)據(jù)輸出線(xiàn))。這些總線(xiàn)至少需

要兩條或兩條以上的信號(hào)線(xiàn)。

DHT11傳感器模塊的軟件流程圖如圖4-3所示。

8

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖4-3DHT11流程圖

4.4產(chǎn)品程序清單

在整個(gè)LCD顯示系統(tǒng)工作中,當(dāng)LCD1602進(jìn)行初始化之后,系統(tǒng)進(jìn)行延

時(shí),再者芯片收到溫濕度傳感器傳達(dá)的數(shù)據(jù)后,由芯片進(jìn)行處理分析,再把數(shù)

據(jù)傳輸進(jìn)LCD1602顯示屏中。程序清單如圖4-4所示。

9

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖4-4程序清單

5產(chǎn)品使用說(shuō)明

5.1產(chǎn)品裝配圖

產(chǎn)品由LCD1602液晶顯示模塊、DHT11溫濕度傳感器模塊、報(bào)警模塊、時(shí)

鐘模塊、電源和按鍵模塊組成。

裝配圖如圖5-1所示:

10

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖5-1裝配圖

5.2產(chǎn)品調(diào)試

對(duì)計(jì)算機(jī)的程序編寫(xiě)完成后,就需要通過(guò)軟件對(duì)編寫(xiě)的程序進(jìn)行測(cè)試及編

譯,若是不能通過(guò)編譯,則需要再進(jìn)行修改。

檢查單片機(jī)所有的器件都手工焊接到了萬(wàn)能板上,對(duì)每一個(gè)焊點(diǎn)都進(jìn)行仔

細(xì)地檢查,確保沒(méi)有虛焊、漏焊以及是否有毛刺的現(xiàn)象。

使用萬(wàn)用表進(jìn)行測(cè)試,檢查各焊接點(diǎn)連接狀況是否合格,各電源線(xiàn)與地線(xiàn)是否

有短路。

對(duì)產(chǎn)品進(jìn)行上電檢查,將編寫(xiě)好的程序燒錄到單片機(jī)中。

程序編譯、燒錄成功界面如圖5-2,5-3所示:

11

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

圖5-2程序編譯圖

圖5-3程序燒錄圖

5.3產(chǎn)品使用說(shuō)明

(1)接上電源上電,再按下開(kāi)關(guān),溫濕度傳感器自動(dòng)采集溫度與濕度。

(2)通過(guò)LCD1602液晶第一行顯示屏顯示溫度,第二行顯示濕度。

(3)若溫度或濕度超出閾值范圍,蜂鳴器開(kāi)始報(bào)警,LED燈閃爍。

(4)切換界面后液晶第一行顯示屏顯示時(shí)間和星期,第二行顯示日期。

(5)溫度與濕度的閾值范圍以及時(shí)間的調(diào)整都可以通過(guò)萬(wàn)能板上的按鍵完

成。

12

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

6產(chǎn)品設(shè)計(jì)技術(shù)標(biāo)準(zhǔn)

[1]J-STD-001E電氣與電子組件的焊接要求

[2]IPC-A-610D(中文版),IPC-A-610E電子組件的可接受性要求

[3]IPC-7711/21電子組件和電路板的返工&返修

[4]GB/T11457-2006信息技術(shù)軟件工程術(shù)語(yǔ);

[5]GB/T8566-2007信息技術(shù)軟件生存周期過(guò)程標(biāo)準(zhǔn);

[6]GB/T8567-2006計(jì)算機(jī)軟件文檔編制規(guī)范。

13

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

附錄1元器件清單

14

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

附錄2電路原理圖

15

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

附錄3PCB設(shè)計(jì)圖

16

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

附錄4產(chǎn)品實(shí)物圖

17

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

附錄5主程序代碼

//基于51單片機(jī)溫濕度檢測(cè)與數(shù)字時(shí)鐘的設(shè)計(jì)與實(shí)現(xiàn)

//20移動(dòng)互聯(lián)應(yīng)用技術(shù)1班羅旭

#include<reg52.h>//調(diào)用單片機(jī)頭文件

#defineucharunsignedchar//無(wú)符號(hào)字符型宏定義變量范圍0~255

#defineuintunsignedint//無(wú)符號(hào)整型宏定義變量范圍0~65535

#include"ds1302.h"

sbitbeep=P1^6;//蜂鳴器IO口定義

intflag_300ms;//300毫秒的變量

ucharkey_can;//按鍵值的變量

sbitwh_led=P2^2;//溫度上限報(bào)警指示燈IO口定義

sbitwl_led=P2^3;//溫度下限報(bào)警指示燈IO口定義

sbitsh_led=P2^1;//濕度上限報(bào)警指示燈IO口定義

sbitsl_led=P2^0;//濕度下限報(bào)警指示燈IO口定義

ucharflag_en=1;//手動(dòng)取消報(bào)警的變量

ucharmenu_1;//設(shè)置不同報(bào)警參數(shù)的變量

uchart_high=35,t_low=10;//溫度上下限報(bào)警值

uchars_high=80,s_low=10;//濕度上下限報(bào)警值

bitflag_moshi;

/***************************************************************

*名稱(chēng):delay_1ms()

*功能:延時(shí)1ms函數(shù)

*輸入:q

*輸出:無(wú)

****************************************************************/

voiddelay_1ms(uintq)

{

uinti,j;

for(i=0;i<q;i++)

for(j=0;j<120;j++);

}

18

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

sbitdht11=P1^7;//溫濕度傳感器IO口定義

uchartable_dht11[5]={0};//溫濕度值放到這個(gè)數(shù)組里面

sbitrs=P1^0;//寄存器選擇信號(hào)H:數(shù)據(jù)寄存器L:指令寄存器

sbitrw=P1^1;//寄存器選擇信號(hào)H:數(shù)據(jù)寄存器L:指令寄存器

sbite=P1^2;//片選信號(hào)下降沿觸發(fā)

/********************************************************************

*名稱(chēng):delay_uint()

*功能:小延時(shí)。

*輸入:無(wú)

*輸出:無(wú)

***********************************************************************/

voiddelay_uint(uintq)

{

while(q--);

}

/********************************************************************

*名稱(chēng):write_com(ucharcom)

*功能:1602指令函數(shù)

*輸入:輸入的指令值

*輸出:無(wú)

***********************************************************************/

voidwrite_com(ucharcom)

{

rs=0;//寫(xiě)指令

rw=0;//對(duì)1602寫(xiě)操作

P0=com;//P0口對(duì)1602寫(xiě)指令

delay_uint(25);

e=1;//e=1使能信號(hào)

delay_uint(100);//延時(shí)一下等1602完成操作

e=0;

}

/********************************************************************

*名稱(chēng):write_data(uchardat)

*功能:1602寫(xiě)數(shù)據(jù)函數(shù)

*輸入:需要寫(xiě)入1602的數(shù)據(jù)

*輸出:無(wú)

***********************************************************************/

voidwrite_data(uchardat)

{

19

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

rs=1;//寫(xiě)數(shù)據(jù)

rw=0;//對(duì)1602寫(xiě)操作

P0=dat;//P0口對(duì)1602寫(xiě)數(shù)據(jù)

delay_uint(25);

e=1;//e=1使能信號(hào)

delay_uint(100);//延時(shí)一下等1602完成操作

e=0;

}

/***********************lcd1602上顯示特定的字符****0XDF度

********************/

voidwrite_zifu(ucharhang,ucharadd,uchardate)

{

if(hang==1)

write_com(0x80+add);//寫(xiě)1602第一行的地址

else

write_com(0x80+0x40+add);//寫(xiě)1602第二行的地址

write_data(date);//寫(xiě)數(shù)據(jù)

}

/***********************lcd1602上顯示1位十進(jìn)制數(shù)************************/

voidwrite_lcd1(ucharhang,ucharadd,uchardate)

{

if(hang==1)

write_com(0x80+add);//1602寫(xiě)第一行的地址

else

write_com(0x80+0x40+add);//1602寫(xiě)第二行的地址

write_data(0x30+date%10);

}

/***********************lcd1602上顯示兩位十進(jìn)制數(shù)************************/

voidwrite_lcd2(ucharhang,ucharadd,uintdate)

{

if(hang==1)

write_com(0x80+add);//寫(xiě)1602第一行的地址

else

write_com(0x80+0x40+add);//寫(xiě)1602第二行的地址

write_data(0x30+date/10%10);//顯示十位數(shù)

write_data(0x30+date%10);//顯示個(gè)位數(shù)

}

/***********************lcd1602上顯示兩位16進(jìn)制數(shù)************************/

20

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

voidwrite_lcd2_ds1302(ucharhang,ucharadd,uchardate)

{

if(hang==1)

write_com(0x80+add);//1602寫(xiě)第一行的地址

else

write_com(0x80+0x40+add);//1602寫(xiě)第二行的地址

write_data(0x30+date/16);//顯示十位數(shù)

write_data(0x30+date%16);//顯示個(gè)位數(shù)

}

/***********************lcd1602上顯示這字符函數(shù)************************/

voidwrite_string(ucharhang,ucharadd,uchar*p)

{

if(hang==1)

write_com(0x80+add);//寫(xiě)1602第一行的地址

else

write_com(0x80+0x40+add);//寫(xiě)1602第二行的地址

while(1)

{

if(*p=='\0')break;//\0字符串的結(jié)尾標(biāo)志break結(jié)束while循環(huán)結(jié)

束寫(xiě)字符

write_data(*p);//寫(xiě)數(shù)據(jù)

p++;//指針地址加1

}

}

/*****************控制光標(biāo)函數(shù)********************/

voidwrite_guanbiao(ucharhang,ucharadd,uchardate)

{

if(hang==1)

write_com(0x80+add);//寫(xiě)1602第一行的地址

else

write_com(0x80+0x40+add);//寫(xiě)1602第二行的地址

if(date==1)

write_com(0x0f);//顯示光標(biāo)并且閃爍

else

write_com(0x0c);//關(guān)閉光標(biāo)

}

/***********************lcd1602初始化設(shè)置************************/

voidinit_1602()//lcd1602初始化

{

write_com(0x38);//顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口不檢

21

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

測(cè)忙信號(hào)

write_com(0x0c);//開(kāi)顯示不顯示光標(biāo)

write_com(0x06);//當(dāng)寫(xiě)一個(gè)字符是,地址指針加1

write_string(1,0,"Wd:00H00L00");//初始化1602顯示

write_string(2,0,"Sd:00%H00%L00%");//初始化1602顯示

write_zifu(1,5,0xdf);//顯示溫度單位度

write_zifu(1,10,0xdf);//顯示溫度單位度

write_zifu(1,15,0xdf);//顯示溫度單位度

write_lcd2(1,3,table_dht11[2]);//顯示溫度

write_lcd2(2,3,table_dht11[0]);//顯示濕度

write_lcd2(1,8,t_high);//顯示溫度上限

write_lcd2(2,8,s_high);//顯示濕度上限

write_lcd2(1,13,t_low);//顯示溫度下限

write_lcd2(2,13,s_low);//顯示濕度下限

}

/********************獨(dú)立按鍵程序*****************/

voidkey()//獨(dú)立按鍵程序

{

ucharkey_new;//key_new這個(gè)變量的功能是做按鍵松手檢測(cè)的

key_can=0;//按鍵值還原成0

if((P3&0xf0)!=0xf0)//按鍵按下11110000

{

delay_1ms(1);//按鍵延時(shí)消抖動(dòng)

if(((P3&0xf0)!=0xf0)&&(key_new==1))

{//確認(rèn)是按鍵按下11110000

key_new=0;//key_new=0說(shuō)明按鍵已按下

switch(P3&0xf0)

{

case0xd0:key_can=3;break;//得到按鍵值11010000

case0xb0:key_can=2;break;//得到按鍵值10110000

case0x70:key_can=1;break;//得到按鍵值01110000

}

}

}

else

key_new=1;//key_new=1說(shuō)明按鍵已經(jīng)松開(kāi)了

}

/****************按鍵設(shè)置函數(shù)***************/

voidkey_with()

22

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

{

if(menu_1==0)

{

if(key_can==3)

{

flag_moshi=~flag_moshi;

if(flag_moshi==0)//顯示溫濕度

{

init_1602();//lcd1602初始化

}else

{

write_string(1,0,"::");//顯示時(shí)間

write_string(2,0,"20--");

}

}

}

if(key_can==1)//設(shè)置鍵

{

menu_1++;

if(menu_1>10)

{

menu_1=0;//menu_1=0退出設(shè)置了,在正常顯示界面下

init_1602();//lcd1602初始化顯示

}

if(menu_1==5)//設(shè)置時(shí)間

{

write_string(1,0,"::W:");

write_string(2,0,"20--");

}

}

if(menu_1==1)//設(shè)置溫度上限報(bào)警值

{

if(key_can==2)//加鍵

{

t_high++;//設(shè)置溫度上限報(bào)警值加1

if(t_high>99)

t_high=99;

}

if(key_can==3)//減鍵

{

t_high--;//設(shè)置溫度上限報(bào)警值減1

if(t_high<=t_low)

t_high=t_low+1;//限制溫度上限不能低于溫度下限

23

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

}

write_lcd2(1,8,t_high);//顯示上限報(bào)警值

write_com(0x80+8);//將光標(biāo)移動(dòng)到第1行第8位

write_com(0x0f);//顯示光標(biāo)并且閃爍

}

if(menu_1==2)//設(shè)置溫度下限報(bào)警值

{

if(key_can==2)//加鍵

{

t_low++;//設(shè)置溫度下限報(bào)警值加1

if(t_low>=t_high)

t_low=t_high-1;//限制溫度下限不能高于溫度上限

}

if(key_can==3)//減鍵

{

t_low--;//設(shè)置溫度下限報(bào)警值減1

if(t_low<=1)

t_low=1;

}

write_lcd2(1,13,t_low);//顯示溫度下限報(bào)警值

write_com(0x80+13);//將光標(biāo)移動(dòng)到第1行第13位

write_com(0x0f);//顯示光標(biāo)并且閃爍

}

if(menu_1==3)//設(shè)置濕度上限報(bào)警值

{

if(key_can==2)//加鍵

{

s_high++;//設(shè)置濕度上限報(bào)警值加1

if(s_high>99)

s_high=99;

}

if(key_can==3)//減鍵

{

s_high--;//設(shè)置濕度上限報(bào)警值減1

if(s_high<=s_low)

s_high=s_low+1;//限制濕度上限不能低于濕度下限

}

write_lcd2(2,8,s_high);//顯示濕度上限報(bào)警值

write_com(0x80+0x40+8);//將光標(biāo)移動(dòng)到第2行第8位

write_com(0x0f);//顯示光標(biāo)并且閃爍

}

if(menu_1==4)//設(shè)置濕度下限報(bào)警值

{

24

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

if(key_can==2)//加鍵

{

s_low++;//設(shè)置濕度下限報(bào)警值加1

if(s_low>=s_high)

s_low=s_high-1;//限制濕度下限不能高于濕度上限

}

if(key_can==3)//減鍵

{

s_low--;//設(shè)置濕度下限報(bào)警值減1

if(s_low<=1)

s_low=1;

}

write_lcd2(2,13,s_low);//顯示濕度下限報(bào)警值

write_com(0x80+0x40+13);//將光標(biāo)移動(dòng)到第2行第13位

write_com(0x0f);//顯示光標(biāo)并且閃爍

}

if(menu_1==5)//設(shè)置時(shí)

{

if(key_can==2)//加鍵

{

shi+=0x01;//設(shè)置時(shí)鐘加1

if((shi&0x0f)>=0x0a)

shi=(shi&0xf0)+0x10;

if(shi>=0x24)

shi=0;

}

if(key_can==3)//減鍵

{

if(shi==0x00)

shi=0x24;

if((shi&0x0f)==0x00)

shi=(shi|0x0a)-0x10;

shi--;//設(shè)置時(shí)鐘減1

}

}

if(menu_1==6)//設(shè)置分

{

if(key_can==2)//加鍵

{

fen+=0x01;//設(shè)置分鐘加1

if((fen&0x0f)>=0x0a)

fen=(fen&0xf0)+0x10;

if(fen>=0x60)

25

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

fen=0;

}

if(key_can==3)//減鍵

{

if(fen==0x00)

fen=0x5a;

if((fen&0x0f)==0x00)

fen=(fen|0x0a)-0x10;

fen--;//設(shè)置分鐘減1

}

}

if(menu_1==7)//設(shè)置秒

{

if(key_can==2)//加鍵

{

miao+=0x01;//設(shè)置秒鐘加1

if((miao&0x0f)>=0x0a)

miao=(miao&0xf0)+0x10;

if(miao>=0x60)

miao=0;

}

if(key_can==3)//減鍵

{

if(miao==0x00)

miao=0x5a;

if((miao&0x0f)==0x00)

miao=(miao|0x0a)-0x10;

miao--;//設(shè)置秒減1

}

}

if(menu_1==8)//設(shè)置星期

{

if(key_can==2)//加鍵

{

week+=0x01;//設(shè)置星期加1

if((week&0x0f)>=0x0a)

week=(week&0xf0)+0x10;

if(week>=0x08)

week=1;

}

if(key_can==3)//減鍵

{

if(week==0x01)

26

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

week=0x08;

if((week&0x0f)==0x00)

week=(week|0x0a)-0x10;

week--;//設(shè)置星期減1

}

}

if(menu_1==9)//設(shè)置年

{

if(key_can==2)//加鍵

{

nian+=0x01;//設(shè)置年加1

if((nian&0x0f)>=0x0a)

nian=(nian&0xf0)+0x10;

if(nian>=0x9a)

nian=1;

}

if(key_can==3)//減鍵

{

if(nian==0x01)

nian=0x9a;

if((nian&0x0f)==0x00)

nian=(nian|0x0a)-0x10;

nian--;//設(shè)置年減1

}

}

if(menu_1==10)//設(shè)置月

{

if(key_can==2)//加鍵

{

yue+=0x01;//設(shè)置月加1

if((yue&0x0f)>=0x0a)

yue=(yue&0xf0)+0x10;

if(yue>=0x13)

yue=1;

}

if(key_can==3)//減鍵

{

if(yue==0x01)

yue=0x13;

if((yue&0x0f)==0x00)

yue=(yue|0x0a)-0x10;

yue--;//設(shè)置月減1

}

27

湖南商務(wù)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)

}

if(menu_1==11)//設(shè)置日

{

if(key_can==2)//加鍵

{

ri+=0x01;//設(shè)置日加1

if((ri&0x0f)>=0x0a)

ri=(ri&0xf0)+0x10;

if(ri>=0x32)

ri=0;

}

if(key_can==3)//減鍵

{

if(ri==0x01)

ri=0x32;

if((ri&0x0f)==0x00)

ri=(ri|0x0a)-0x10;

ri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論