基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計論文說明_第1頁
基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計論文說明_第2頁
基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計論文說明_第3頁
基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計論文說明_第4頁
基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計論文說明_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、. . . . 2014屆本科生畢業(yè)設(shè)計 分類號:TP311.52題 目: 基于單片機的生產(chǎn)車間環(huán)境測試儀的設(shè)計作 者 姓 名:遙 學 號:2010103124學 院:機械與電子工程學院 專 業(yè):自動化 指導教師:翠俠 秀萍 指導教師職稱:講師 工程師2014年5月9日摘 要本設(shè)計是利用單片機實現(xiàn)溫度、濕度等生產(chǎn)環(huán)境的測量與控制。系統(tǒng)采用集溫濕度傳感器與A/D轉(zhuǎn)換器為一體的SHT11芯片,通過單片機處理進行顯示,其它模塊包括了實時時鐘/日期產(chǎn)生電路和超限報警處理電路,對所測量的值進行實時顯示和報警處理。本文介紹了基于ATMEL公司的AT89C51系列單片機的溫濕度實時測量與控制系統(tǒng)和顯示系統(tǒng)的

2、設(shè)計,包括介紹了硬件結(jié)構(gòu)原理,并分析了相應的軟件的設(shè)計與其要點,包括測試精度高等眾多的優(yōu)點。關(guān)鍵詞:AT89C51; SHT11; LCD; DS1302; 溫濕度控制ABSTRACT This design is that using single chip microcomputer to realize the temperature and humidity measurement and control of the production environment.The system adopts SHT11 chip which set temperature and humidi

3、ty sensor and A/D converter as a whole,and display through the single-chip processing.Other modules include real-time clock /date generation circuit and alarm circuit,and they are real time display and alarm processing the measured value.This paper introduces the design of temperature and humidity m

4、easurement and control system and display system that based on the AT89C51 Series MCU of ATMEL company.The paper introduces the hardware structure principle and analysis of the design and key points of corresponding software,including many advantages such as high accuracy in test.Key words:AT89C51;

5、SHT11; LCD; DS1302; Temperature and humidity control32 / 37目 錄緒 論11 整體方案設(shè)計22 硬件設(shè)計部分32.1 芯片介紹32.1.1溫濕度傳感器32.1.2 單片機32.1.3 DS130242.1.4 LCD160452.2模塊功能介紹52.2.1 復位電路部分52.2.2 傳感器電路部分62.2.3 時鐘電路部分72.2.4 顯示電路部分72.2.5 超限處理電路部分82.3 整體電路圖93 軟件設(shè)計104 仿真軟件和仿真測試114.1 Proteus簡介114.2 KEIL C51編譯器簡介114.3 仿真測試12結(jié) 論14

6、參考文獻15附 錄16致 32緒 論近年來我國工業(yè)生產(chǎn)一直都在飛速發(fā)展,隨著工業(yè)生產(chǎn)水平的提高,對生產(chǎn)環(huán)境的要求越來越苛刻,主要體現(xiàn)在生產(chǎn)環(huán)境的溫度和濕度的控制上,例如:面粉加工場、電子產(chǎn)品裝配車間、特殊材料加工工場等場所,都必須嚴格控制環(huán)境的溫度與相對濕度,使其保持在一定的圍。從安全生產(chǎn)的角度來說,對生產(chǎn)環(huán)境進行監(jiān)測也是必要的,在危險發(fā)生前可以提前預警,與時發(fā)現(xiàn)并且排除危險,確保工作人員的人生安全,也避免了工業(yè)財產(chǎn)的損失。現(xiàn)代溫濕度傳感器測量技術(shù)主要以數(shù)據(jù)采集為依據(jù),主要類型包括:虛擬儀器、智能儀器、數(shù)字式儀器等等。伴隨電子科學技術(shù)的進一步發(fā)展,數(shù)據(jù)采集系統(tǒng)也發(fā)生了日新月異的變化,其整體的性

7、能、實用性方面都有所改進。因此,依托于數(shù)據(jù)采集結(jié)構(gòu)而發(fā)展的溫濕度傳感器測量系統(tǒng)在實際應用中也發(fā)揮這越來越重要的作用。目前,許多外國大型企業(yè)都很重視傳感器的研發(fā)工作,例如,日本的Figaro公司、芬蘭的Vaisala公司等,都致力于傳感器的發(fā)展和完善,以保障其在整個銷售市場的競爭力。在九十年代,先后出現(xiàn)了集成溫度濕度測量套件和應用于濕度傳感器的測試系統(tǒng),這個新技術(shù)的產(chǎn)生都大大刺激了傳感器的進一步發(fā)展。與此同時,國許多機構(gòu)也在傳感器測試裝置的研發(fā)上不斷探索、研發(fā)。例如通過采用傳統(tǒng)電子儀器進行設(shè)計研發(fā)而成的多種動態(tài)測試系統(tǒng)、動進樣裝置的氣體傳感器智能測試系統(tǒng)等等,這些成績都體現(xiàn)了我國在傳感器領(lǐng)域取得

8、的成就。最近幾年,國外溫濕度傳感器測量系統(tǒng)正向著集成化、智能化發(fā)展,隨著科研人員的不斷努力,該類型系統(tǒng)取得的巨大的成就。滿足各類工業(yè)生產(chǎn)對于環(huán)境溫濕度的不同需求,可以隨時進行調(diào)節(jié),對于不利情況能夠與時的作出顯示,并能夠采取相應的措施提醒用戶進行調(diào)整,以達到最適宜的溫濕度。在此的基礎(chǔ)上,本次研究主要是為了設(shè)計一款結(jié)構(gòu)簡單、測量精度高、工作穩(wěn)定可靠的基于單片機的生產(chǎn)環(huán)境溫濕度測試儀。可以由用戶根據(jù)環(huán)境要求設(shè)定系統(tǒng)的溫濕度閾值;系統(tǒng)實時地測量顯示環(huán)境的溫濕度值,實現(xiàn)溫濕度自動控制,使其在較寬的溫度圍具有較高的測試精度;同時還可以根據(jù)用戶設(shè)定報警閾值報警,一旦發(fā)現(xiàn)環(huán)境溫濕度超限,立即報警。1整體方案設(shè)

9、計本次設(shè)計的核心部件單片機使用的是最常用的AT89C51,信號采集與處理部分由SHT11構(gòu)成,進入單片機后經(jīng)處理后通過LCD1604顯示溫濕度,信號顯示采用的液晶屏為5X7點陣,一行可顯示16字,四行。其他組成部分為實時時鐘發(fā)生電路,產(chǎn)生同現(xiàn)在一樣的時間和具體日期,通過LCD1604液晶模塊顯示。在軟件設(shè)計部分有對測量的溫濕度進行上下值的設(shè)定,當測量超過限定值,通過超限報警處理電路對其進行處理分別顯示不同的二極管燈亮,蜂鳴器產(chǎn)生長鳴。 硬件中包括一個開關(guān),為復位開關(guān)。開機后,所有器件初始化,DS1302 產(chǎn)生實時時間和日期,溫濕度傳感器SHT11開始進行溫濕度測量和計算,最后通過LCD液晶顯示

10、器顯示結(jié)果。在測量結(jié)果中有超過設(shè)定的溫濕度上下限的,通過超限模塊作出反應。 其他是一些附件,比如復位、晶振電路,整體電路框圖如圖1。AT89C51DS1302超限模塊SHT11LCD1604信號顯示晶振電路復位電路 電源圖1 整體電路框圖2硬件設(shè)計部分2.1 芯片介紹2.1.1溫濕度傳感器(1)SHT11簡介 SHT11 是瑞士Scnsirion 公司推出的一款數(shù)字溫濕度傳感器芯片。溫濕度傳感器SHT11集溫度傳感器和濕度傳感器于一體,因此采用SHT11 進行溫濕度實時監(jiān)測的系統(tǒng)具有精度高、成本低、體積小、接口簡單等優(yōu)點。 (2)SHT11的引腳功能 SHT11溫濕度傳感器采用SMD(LCC)

11、表面貼片封裝形式,接口非常簡單,引腳名稱與排列順序如圖2所示。圖2 SHT11引腳圖各引腳的功能如下: >> 腳1和4-信號地和電源,其工作電壓圍是2.45.5 V; >> 腳2和腳3-二線串行數(shù)字接口,其中DA-TA為數(shù)據(jù)線,SCK為時鐘線; >> 腳58-未連接。2.1.2 單片機89C51 是一種帶4k 字節(jié)可編 程可 擦除 只讀 存儲 器的低電壓,高性能CMOS8位微處理器,俗稱單片機。89C2051是一種帶2K字節(jié)可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)

12、標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的89C51是一種高效微控制器,89C2051是它的一種精簡版本。89C51單片機為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。它的引腳如圖3所示。圖3 AT89C51引腳圖2.1.3 DS1302DS1302是DALLAS公司推出的涓流充電時鐘芯片,含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM,通過簡單的串行接口與單片機進行通信。實時時鐘/日歷電路提供秒分時日、日期月年的信息。每月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過AM/PM指示決定采用24或12小時格式。DS1302與單片機

13、之間能簡單地采用同步串行的方式進行通信僅需用到三個口線:RES復位、I/O數(shù)據(jù)線、 SCLK串行時鐘。時鐘/RAM的讀/寫數(shù)據(jù)以一個字節(jié)或多達31個字節(jié)的字符組方式通信,DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW,引腳如圖4所示。圖4 DS1302引腳圖2.1.4 LCD1604(1)字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,16*4和20*2行等的模塊。(2)引腳功能說明 如表1所示。表1 引腳接口說明表1604LCD采用標準16腳接口,各引腳接口說明如表 編號符號引腳說明1VSS地2VDD正極3V0液晶顯示偏壓4RS

14、數(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ù)15、16空腳1604液晶模塊的讀寫操作,屏幕和光標的操作都是通過指令編程來實現(xiàn)的。2.2模塊功能介紹2.2.1 復位電路部分這種復位電路的工作原理是:單片機的復位電路在剛接通電時,剛開始電容是沒有電的,電容的電阻很低,通電后,5V 的電通過電阻給電容進行充電,電容兩端的電會由0V慢慢的升到4V左右(此時間很短一般小于0.3秒),RC構(gòu)成的微分電路在上電瞬間產(chǎn)生一個微分脈沖,其寬度大于兩個機器周期,89C51將復位。正因為這樣,復位腳的電由低電位升到高電位,引起

15、了部電路的復位工作,RST端電壓慢慢下降,降到一定電壓值以后,即為低電平,單片機開始正常工作(這是單片機的上電復位,也叫初始化復位);當按下復位鍵時,電容兩端放電,電容又回到0V了,于是又進行了一次復位工作(這是手動復位原理)。圖5 手動復位與晶振電路2.2.2 傳感器電路部分此模塊是整個電路設(shè)計的信號采集與初步處理的模塊,由溫濕度傳感器芯片SHT11構(gòu)成,主要的功能結(jié)構(gòu)在前面的芯片介紹中已有,這里不重新介紹。圖6 SHT11傳感器電路2.2.3 時鐘電路部分 此模塊是系統(tǒng)時間的實時顯示而設(shè)計的,主要由芯片DS1302構(gòu)成,其中引腳RST、CLK、I/O分別接單片機P3.0、P3.1、P3.2

16、口,屬于控制引腳。此模塊是產(chǎn)生實時的系統(tǒng)時間和日歷,能對某個確定環(huán)境的實時溫濕度控制起到一定的作用。芯片連接電路簡單,時間日期準確。圖7 實時時鐘電路2.2.4 顯示電路部分此模塊是由LCD1604芯片組成的日期時間和實時溫濕度顯示的電路部分。LCD1604是一個四行每行16字的液晶顯示屏,D0-D7接P0口,RS、RW、E接P3.5、P3.6、P3.7起控制作用。圖8 LCD1604顯示與其連接電路2.2.5 超限處理電路部分 此部分電路是由5個發(fā)光二極管和一個蜂鳴報警器構(gòu)成,分別是D0、D1、D2、D4和D5,蜂鳴器接單片機的P1.0口,發(fā)光二極管與單片機的連接部分如圖所示。D0、D1、D

17、2、D4、D5 分別代表著發(fā)光、降溫、加熱、干燥和加濕,一旦傳感器測定的溫濕度超過設(shè)定的限額,就會產(chǎn)生不同的發(fā)光反應,起警示作用,同時蜂鳴報警器連續(xù)發(fā)出“滴” 的聲音。圖9 超限處理警示電路部分圖10 蜂鳴器電路2.3整體電路圖圖11 整體電路圖3軟件設(shè)計軟件設(shè)計是本次設(shè)計中不可缺少的環(huán)節(jié),貫穿了整個畢業(yè)設(shè)計,是本次設(shè)計能夠完成的最重要的環(huán)節(jié)之一。軟件部分經(jīng)本人調(diào)試可以運行,能夠正確顯示結(jié)果。具體模塊由一個C(xc.C)主函數(shù)文件和8個h文件構(gòu)成。 reg51.h(8051的相關(guān)參數(shù)初始化); absacc.h; intrins.h(偽本征函數(shù)); math.h(數(shù)學公式函數(shù));LCD1604

18、.h(1604液晶顯示函數(shù)); DS1302.h(實時時間/日期產(chǎn)生函數(shù));SHT11.h(溫濕度采集計算函數(shù)); set_key.h;(限額報警函數(shù))。 根據(jù)溫濕度監(jiān)控系統(tǒng)功能,系統(tǒng)軟件流程圖如圖12所示。開始單片機開機初始化LCD初始化 DS1302初始化 SHT11初始化DS1302運行 確定時間/日期SHT11運行進行溫濕度采集與測量LCD顯示實時溫濕度檢測溫濕度是否改變YN等待 圖12 主程序框圖 點擊運行按鍵,仿真開始運行。首先單片機開機初始化,然后LCD、DS1302、SHT11初始化,喇叭發(fā)出一聲提示音,各個模塊開始運行,DS1302運行確定時間和日期,SHT11運行進行溫濕度

19、的采集和測量,最后LCD顯示日期時間以與溫濕度測量值;當環(huán)境溫度濕度發(fā)生改變時,LCD都會實時準確顯示當前溫濕度值。4 仿真軟件和仿真測試本設(shè)計用到了proteus和keil c51兩種軟件,兩者能完美的結(jié)合在一起,實現(xiàn)虛擬的實物效果,也就是仿真效果。4.1 Proteus簡介Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件,Proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線與電路仿真的功能外,其革命性的功能是,他的電路仿真是互動的,針對微處理器的應用,還可以直接在基于原理圖的虛擬原型上編程

20、,并實現(xiàn)軟件源碼級的實時調(diào)試,如有顯示與輸出,還能看到運行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等。 其功能模塊:個易用而又功能強大的ISIS原理布圖工具;PROSPICE混合模型SPICE仿真; ARES PCB設(shè)計。 PROSPICE 仿真器的一個擴展PROTEUS VSM:便于包括所有相關(guān)的器件的基于微處理器設(shè)計的協(xié)同仿真。此外,還可以結(jié)合微控制器軟件使用動態(tài)的鍵盤,開關(guān),按鈕,LEDs甚至LCD顯示CPU模型。 4.2 KEIL C51編譯器簡介 KEIL C51標準C編譯器為8051微控制器的軟件開發(fā)提供了C語言環(huán)境,同時保留了匯編代碼高效,快速的特點。C51

21、編譯器的功能不斷增強,使你可以更加貼近CPU本身,與其它的衍生產(chǎn)品。C51已被完全集成到uVision2的集成開發(fā)環(huán)境中,這個集成開發(fā)環(huán)境包含:編譯器,匯編 器,實時操作系統(tǒng),項目管理器,調(diào)試器。uVision2 IDE可為它們提供單一而靈活的開發(fā)環(huán)境。 工程(project)是由源文件、開發(fā)工具選項以與編程說明三部分組成的。一個單一的uVision2工程能夠產(chǎn)生一個或多個目標程序。產(chǎn)生目標程序的源文件構(gòu)成“組”。開發(fā)工具選項可以對應目標,組或單個文件。 uVision2包含一個器件數(shù)據(jù)庫(device database),可以自動設(shè)置匯編器、編譯器、連接定位器與調(diào)試器選項,來滿足用戶充分利用

22、特定微控制器的要求。此數(shù)據(jù)庫包含:片上存儲器和外圍設(shè)備的信息,擴展數(shù)據(jù)指針(extra data pointer)或者加速器(math accelerator)的特性。uVision2可以為片外存儲器產(chǎn)生必要的連接選項:確定起始地址和規(guī)模。4.3 仿真測試整個軟件通過C語言編程,先在Keil C51集成開發(fā)環(huán)境下將編好的程序進行編譯、調(diào)試,調(diào)試通過后會生成“*.HEX”文件。運行PROTEUS模擬仿真軟件,打開已繪制好的仿真電路原理圖,選中單片機AT89C51,右鍵點擊AT89C51,出現(xiàn)對應的對話框,在Program File中找到編譯好的“*.HEX”文件,然后點擊“OK”就可以進行仿真了

23、,仿真結(jié)果如圖13所示。圖13 仿真運行效果LCD液晶顯示四行分別顯示“Date:*”、“Time:*”、“Temper:*”、“Humidi:*”,其中“*”為測定的數(shù)據(jù)。SHT11顯示值為溫濕度測量所得的 模擬值,可以通過SHT11上的按鍵調(diào)整模擬值,得到相應的試驗效果。圖14 SHT11運行效果本次試驗溫度臨界值設(shè)定為20T80,濕度臨界值設(shè)定為30H90。如當溫度在臨界值圍,濕度大于臨界值時,此時D1燈亮,喇叭發(fā)出警報聲,D4燈亮,提示車間過于潮濕,需要干燥。如圖15所示。圖15 仿真測量效果經(jīng)過一系列的仿真試驗,得到了七種試驗結(jié)果,如表2所示(注:表示燈點亮,×表示燈熄滅)

24、。表2 仿真試驗結(jié)果溫度圍濕度圍D1聲音D2降溫D3加熱D4干燥D5加濕120T8030H90×××××2H<30×××3H>90×××4T<2030H90×××5T>80×××6T<20H<30××7T>80H>90×× D1燈亮,喇叭發(fā)出警報聲,提醒人員過來檢查;D2燈亮,表示車間環(huán)境過熱,需要降溫;D3燈亮,表示車間環(huán)境過冷,需要加熱

25、;D4燈亮,表示車間環(huán)境過于潮濕,需要干燥;D5燈亮,表示車間環(huán)境過于干燥,需要加濕。結(jié) 論 該系統(tǒng)主要是基于AT89C51單片機的的環(huán)境測試儀的設(shè)計,所謂的環(huán)境測試主要是側(cè)重于對生產(chǎn)環(huán)境的溫度與濕度的測量,整體設(shè)計采用的是以高效單片機作為核心,以SHT11作為主要的采集與測量系統(tǒng),集溫度傳感器和濕度傳感器于一體的設(shè)計,其中它自帶的A/D轉(zhuǎn)換器,使得此溫濕度測試儀具有精度高、成本低、體積小、接口簡單等優(yōu)點,還具有良好抗干擾能力。加上優(yōu)化程序,使得本系統(tǒng)具有很高的實用性。 單片機的應用如今已經(jīng)在工業(yè)、電子等方方面面展示出了它的優(yōu)越性,利用單片機在設(shè)計電路逐漸成了趨勢,它與外圍的簡單電路再加上優(yōu)化

26、程序就可以構(gòu)建任意的產(chǎn)品,使得本設(shè)計成為現(xiàn)實。隨著單片機的日益發(fā)展,它必將在未來顯示出更大的活力,為電子設(shè)計增加更多精彩。 在設(shè)計過程中,由于時間和本人能力的限制,設(shè)計中存在一些需要改進和優(yōu)化的地方。測量精度有待進一步提高,軟件設(shè)計也存在不合理之處,歡迎各位老師批評指正。參考文獻1 苗新法. 便攜式環(huán)境測試儀電源電路設(shè)計J. 通信電源技術(shù), 2010 (3): 41-42.2 文強. 環(huán)境參數(shù)測試系統(tǒng)的數(shù)據(jù)傳輸技術(shù)研究D. 中北大學, 2013.3 王世磊,文環(huán)明,冰,等. 便捷式煤礦井環(huán)境測試儀的設(shè)計J. 中國儀器儀表, 2010 (6): 29-31.4 王靜,閆增峰,立新. 土遺址博物館

27、室熱濕環(huán)境測試與分析J. 建筑科學, 2010 (8): 27-31.5 王登甲,艷峰,王怡,等. 市住宅建筑冬季室熱環(huán)境測試評價J. 建筑科學,2012,27(12):20-24. 6 友德等. 單片微型機原理、應用和實驗M.電子工業(yè). 7 吳經(jīng)國等.單片機應用技術(shù)M. 中國電力. 8 群芳.單片機微型計算機與接口技術(shù)M. 電子工業(yè).9 周立功.單片機實驗與實踐M. 航空航天大學. 10 XU Yi - min .The Design for Stepping Motor of SCM Control SystemJ. Heilongjiang Science and Technology

28、Institute.2005.(1)附 錄參加課題情況:參與了學院一般科研項目(批準號2013yyb01):生產(chǎn)車間“碳足跡”監(jiān)測與控制源程序:main.h#include<reg51.h> #include<absacc.h> #include<intrins.h> #include<math.h> #include<LCD1604.h> #include<DS1302.h> #include<SHT11.h> #include<set_key.h> void Delay1ms(unsigned

29、int count) /延時函數(shù) unsigned int i,j; for(i=0;i<count;i+) for(j=0;j<120;j+); main() SYSTEMTIME CurrentTime; /定義時間日期結(jié)構(gòu)體 SHT_dat aa; /定義溫濕度測量處理結(jié)構(gòu)體 Initial_DS1302(); /DS1302初始化*/ LCD_Initial(); /LCD初始化 GotoXY(0,0); /LCD顯示函數(shù) Print("Date:"); GotoXY(16,0); Print("Temper:"); GotoXY(0

30、,1); Print("Time:"); GotoXY(16,1); Print("Humidi:"); while(1) convert_SHT(&aa,TEMP); /溫度轉(zhuǎn)換 convert_SHT(&aa,HUMI); /濕度轉(zhuǎn)換 caculation_SHT(&aa); /溫度和濕度的補償 float_convert(&aa); /將浮點數(shù)轉(zhuǎn)換成整型,各個位的數(shù)分別保存 doing_temp(&aa); /檢測溫度是否超限 doing_humi(&aa); /檢測濕度是否超限 DS1302_Get

31、Time(&CurrentTime); DateToStr(&CurrentTime); TimeToStr(&CurrentTime); GotoXY(5,0); /第一行顯示日期 Print(CurrentTime.DateString); GotoXY(23,0); /第三行顯示溫度 Print(aa.num_temp); GotoXY(28,0); Print(" "); GotoXY(5,1); /第二行顯示時間 Print(CurrentTime.TimeString); GotoXY(23,1); /第四行顯示濕度 Print(aa.n

32、um_humi); GotoXY(28,1); Print(" "); Delay1ms(300); /延時 DS1302.h#ifndef _REAL_TIMER_DS1302 #define _REAL_TIMER_DS1302 sbit DS1302_CLK = P31; /實時時鐘時鐘線引腳 sbit DS1302_IO = P32; /實時時鐘數(shù)據(jù)線引腳 sbit DS1302_RST = P30; /實時時鐘復位線引腳 sbit ACC0 = ACC0; sbit ACC7 = ACC7; typedef struct _SYSTEMTIME_ unsigned

33、 char Second; unsigned char Minute; unsigned char Hour; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString9; unsigned char TimeString9; SYSTEMTIME; /定義的時間類型 #define AM(X) X #define PM(X) (X+12) / 轉(zhuǎn)成24小時制 #define DS1302_SECOND 0x80 #define DS1302_MINUTE 0x82 #define

34、DS1302_HOUR 0x84 #define DS1302_DAY 0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C #define DS1302_RAM(X) (0xC0+(X)*2) /用于計算 DS1302_RAM 地址的宏 void DS1302InputByte(unsigned char d) /實時時鐘寫入一字節(jié)(部函數(shù)) unsigned char i; ACC = d; for(i=8; i>0; i-) DS1302_IO = ACC0; /相當于匯編中的 RRC DS1302_CLK = 1; DS1

35、302_CLK = 0; ACC = ACC >> 1; unsigned char DS1302OutputByte(void) /實時時鐘讀取一字節(jié)(部函數(shù)) unsigned char i; for(i=8; i>0; i-) ACC = ACC >>1; /相當于匯編中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) DS1302_RST = 0; DS13

36、02_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 寫1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr) /讀取DS1302某地址的數(shù)據(jù) unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucDa

37、ta = DS1302OutputByte(); / 讀1Byte數(shù)據(jù) DS1302_CLK = 1; DS1302_RST = 0; return(ucData); void DS1302_SetProtect(bit flag) /是否寫保護 if(flag) Write1302(0x8E,0x10); else Write1302(0x8E,0x00); void DS1302_SetTime(unsigned char Address, unsigned char Value) / 設(shè)置時間函數(shù) DS1302_SetProtect(0); Write1302(Address, (Val

38、ue/10)<<4 | (Value%10); void DateToStr(SYSTEMTIME *Time) Time->DateString0 = Time->Year/10 + '0' Time->DateString1 = Time->Year%10 + '0' Time->DateString2 = '-' Time->DateString3 = Time->Month/10 + '0' Time->DateString4 = Time->Month%1

39、0 + '0' Time->DateString5 = '-' Time->DateString6 = Time->Day/10 + '0' Time->DateString7 = Time->Day%10 + '0' Time->DateString8 = '0' void TimeToStr(SYSTEMTIME *Time) Time->TimeString0 = Time->Hour/10 + '0' Time->TimeString1

40、= Time->Hour%10 + '0' Time->TimeString2 = ':' Time->TimeString3 = Time->Minute/10 + '0' Time->TimeString4 = Time->Minute%10 + '0' Time->TimeString5 = ':' Time->TimeString6 = Time->Second/10 + '0' Time->TimeString7 = Time-&

41、gt;Second%10 + '0' Time->DateString8 = '0' void DS1302_GetTime(SYSTEMTIME *Time) unsigned char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time->Second = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MINUTE); Time->Minute = (ReadVa

42、lue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time->Day = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH

43、); Time->Month = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time->Year = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); void Initial_DS1302(void) unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) DS1302_SetTime(DS1302

44、_SECOND,0); void BurstWrite1302(unsigned char *pWClock) /往DS1302寫入時鐘數(shù)據(jù)(多字節(jié)方式) unsigned char i; Write1302(0x8e,0x00); / 控制命令,WP=0,寫操作? DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(0xbe); / 0xbe:時鐘多字節(jié)寫命令 for (i = 8; i>0; i-) /8Byte = 7Byte 時鐘數(shù)據(jù) + 1Byte 控制 DS1302InputByte(*pWClock

45、); / 寫1Byte數(shù)據(jù) pWClock+; DS1302_CLK = 1; DS1302_RST = 0; void BurstRead1302(unsigned char *pRClock) /讀取DS1302 時鐘數(shù)據(jù)(時鐘多字節(jié)方式) unsigned char i; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(0xbf); / 0xbf:時鐘多字節(jié)讀命令 for (i=8; i>0; i-) *pRClock = DS1302OutputByte(); / 讀1Byte數(shù)據(jù) pRClock+;

46、 DS1302_CLK = 1; DS1302_RST = 0; void DS1302_TimeStop(bit flag) / 是否將時鐘停止 unsigned char Data; Data=Read1302(DS1302_SECOND); DS1302_SetProtect(0); if(flag) Write1302(DS1302_SECOND, Data|0x80); else Write1302(DS1302_SECOND, Data&0x7F); #endif LCD1604.h#ifndef LCD_CHAR_1604 #define LCD_CHAR_1604 #i

47、nclude <intrins.h> sbit LcdRs = P35; sbit LcdRw = P36; sbit LcdEn = P37; sfr DBPort = 0x80; /P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口 unsigned char LCD_Wait(void) LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); /while(DBPort&0x80);/ LcdEn=0; return DBPort; #define LCD_COMMAND 0 / Command #define

48、LCD_DATA 1 / Data #define LCD_CLEAR_SCREEN 0x01 / 清屏 #define LCD_HOMING 0x02 / 光標返回原點 void LCD_Write(bit style, unsigned char input) LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_();/注意順序 LcdEn=1; _nop_();/注意順序 LcdEn=0; _nop_(); LCD_Wait(); #define LCD_SHOW 0x04 /顯示開 #define LCD_HIDE 0x

49、00 /顯示關(guān) #define LCD_CURSOR 0x02 /顯示光標 #define LCD_NO_CURSOR 0x00 /無光標 #define LCD_FLASH 0x01 /光標閃動 #define LCD_NO_FLASH 0x00 /光標不閃動 void LCD_SetDisplay(unsigned char DisplayMode) LCD_Write(LCD_COMMAND, 0x08|DisplayMode); #define LCD_AC_UP 0x02 #define LCD_AC_DOWN 0x00 / default#define LCD_MOVE 0x01

50、/ 畫面可平移#define LCD_NO_MOVE 0x00 /defaultvoid LCD_SetInput(unsigned char InputMode) LCD_Write(LCD_COMMAND, 0x04|InputMode); void LCD_Initial() LcdEn=0; LCD_Write(LCD_COMMAND,0x38); /8位數(shù)據(jù)端口,2行顯示,5*7點陣 LCD_Write(LCD_COMMAND,0x38); LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /開啟顯示, 無光標 LCD_Write(LCD_COMMAND

51、,LCD_CLEAR_SCREEN); /清屏 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC遞增, 畫面不動 void GotoXY(unsigned char x, unsigned char y) /x列,y行 if(y=0) LCD_Write(LCD_COMMAND,0x80|x); if(y=1) LCD_Write(LCD_COMMAND,0x80|(x-0x40); void Print(unsigned char *str) while(*str!='0') LCD_Write(LCD_DATA,*str); str+; #endifset_key.h#ifndef _setkey_h_ #define _setkey_h_ #include<SHT11.h> float setwen_h,setwen_l,setshi_h,setshi_l; sbit hot =P14;/ 加熱 sbit cold =P13;/ 降溫 sbit speek =P12;/ 發(fā)光 sbit ganzao =P15;/干燥 sbit jiashi =P16;/加濕 sbit speaker

溫馨提示

  • 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

提交評論