




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 2014屆本科生畢業(yè)設(shè)計 分類號:tp311.52題 目: 基于單片機(jī)的生產(chǎn)車間環(huán)境測試儀的設(shè)計作 者 姓 名: 陳遙 學(xué) 號: 2010103124 學(xué) 院: 機(jī)械與電子工程學(xué)院 專 業(yè): 自動化 指導(dǎo)教師姓名: 張翠俠 陳秀萍 指導(dǎo)教師職稱: 講師 工程師 2014年5月9日摘 要 本設(shè)計是利用單片機(jī)實(shí)現(xiàn)溫度、濕度等生產(chǎn)環(huán)境的測量與控制。系統(tǒng)采用集溫濕度傳感器與a/d轉(zhuǎn)換器為一體的sht11芯片,通過單片機(jī)處理進(jìn)行顯示,其它模塊包括了實(shí)時時鐘/日期產(chǎn)生電路和超限報警處理電路,對所測量的值進(jìn)行實(shí)時顯示和報警處理。本文介紹了基于atmel公司的at89c51系列單片機(jī)的溫濕度實(shí)時測量與控制系
2、統(tǒng)和顯示系統(tǒng)的設(shè)計,包括介紹了硬件結(jié)構(gòu)原理,并分析了相應(yīng)的軟件的設(shè)計及其要點(diǎn),包括測試精度高等眾多的優(yōu)點(diǎn)。關(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 an
3、d humidity 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 hu
4、midity measurement 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:
5、at89c51; sht11; lcd; ds1302; temperature and humidity control目 錄緒 論11 整體方案設(shè)計22 硬件設(shè)計部分32.1 芯片介紹32.1.1溫濕度傳感器32.1.2 單片機(jī)32.1.3 ds130242.1.4 lcd160452.2模塊功能介紹52.2.1 復(fù)位電路部分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é) 論
6、14參考文獻(xiàn)15附 錄16致 謝32緒 論近年來我國工業(yè)生產(chǎn)一直都在飛速發(fā)展,隨著工業(yè)生產(chǎn)水平的提高,對生產(chǎn)環(huán)境的要求越來越苛刻,主要體現(xiàn)在生產(chǎn)環(huán)境的溫度和濕度的控制上,例如:面粉加工場、電子產(chǎn)品裝配車間、特殊材料加工工場等場所,都必須嚴(yán)格控制環(huán)境的溫度及相對濕度,使其保持在一定的范圍內(nèi)。從安全生產(chǎn)的角度來說,對生產(chǎn)環(huán)境進(jìn)行監(jiān)測也是必要的,在危險發(fā)生前可以提前預(yù)警,及時發(fā)現(xiàn)并且排除危險,確保工作人員的人生安全,也避免了工業(yè)財產(chǎn)的損失。現(xiàn)代溫濕度傳感器測量技術(shù)主要以數(shù)據(jù)采集為依據(jù),主要類型包括:虛擬儀器、智能儀器、數(shù)字式儀器等等。伴隨電子科學(xué)技術(shù)的進(jìn)一步發(fā)展,數(shù)據(jù)采集系統(tǒng)也發(fā)生了日新月異的變化,
7、其整體的性能、實(shí)用性方面都有所改進(jìn)。因此,依托于數(shù)據(jù)采集結(jié)構(gòu)而發(fā)展的溫濕度傳感器測量系統(tǒng)在實(shí)際應(yīng)用中也發(fā)揮這越來越重要的作用。目前,許多外國大型企業(yè)都很重視傳感器的研發(fā)工作,例如,日本的figaro公司、芬蘭的vaisala公司等,都致力于傳感器的發(fā)展和完善,以保障其在整個銷售市場的競爭力。在九十年代,先后出現(xiàn)了集成溫度濕度測量套件和應(yīng)用于濕度傳感器的測試系統(tǒng),這個新技術(shù)的產(chǎn)生都大大刺激了傳感器的進(jìn)一步發(fā)展。與此同時,國內(nèi)許多機(jī)構(gòu)也在傳感器測試裝置的研發(fā)上不斷探索、研發(fā)。例如通過采用傳統(tǒng)電子儀器進(jìn)行設(shè)計研發(fā)而成的多種動態(tài)測試系統(tǒng)、動進(jìn)樣裝置的氣體傳感器智能測試系統(tǒng)等等,這些成績都體現(xiàn)了我國在傳
8、感器領(lǐng)域取得的成就。最近幾年,國內(nèi)外溫濕度傳感器測量系統(tǒng)正向著集成化、智能化發(fā)展,隨著科研人員的不斷努力,該類型系統(tǒng)取得的巨大的成就。滿足各類工業(yè)生產(chǎn)對于環(huán)境溫濕度的不同需求,可以隨時進(jìn)行調(diào)節(jié),對于不利情況能夠及時的作出顯示,并能夠采取相應(yīng)的措施提醒用戶進(jìn)行調(diào)整,以達(dá)到最適宜的溫濕度。在此的基礎(chǔ)上,本次研究主要是為了設(shè)計一款結(jié)構(gòu)簡單、測量精度高、工作穩(wěn)定可靠的基于單片機(jī)的生產(chǎn)環(huán)境溫濕度測試儀??梢杂捎脩舾鶕?jù)環(huán)境要求設(shè)定系統(tǒng)的溫濕度閾值;系統(tǒng)實(shí)時地測量顯示環(huán)境的溫濕度值,實(shí)現(xiàn)溫濕度自動控制,使其在較寬的溫度范圍內(nèi)具有較高的測試精度;同時還可以根據(jù)用戶設(shè)定報警閾值報警,一旦發(fā)現(xiàn)環(huán)境溫濕度超限,立即
9、報警。1 整體方案設(shè)計本次設(shè)計的核心部件單片機(jī)使用的是最常用的at89c51,信號采集及處理部分由sht11構(gòu)成,進(jìn)入單片機(jī)后經(jīng)處理后通過lcd1604顯示溫濕度,信號顯示采用的液晶屏為5x7點(diǎn)陣,一行可顯示16字,四行。其他組成部分為實(shí)時時鐘發(fā)生電路,產(chǎn)生同現(xiàn)在相同的時間和具體日期,通過lcd1604液晶模塊顯示。在軟件設(shè)計部分有對測量的溫濕度進(jìn)行上下值的設(shè)定,當(dāng)測量超過限定值,通過超限報警處理電路對其進(jìn)行處理分別顯示不同的二極管燈亮,蜂鳴器產(chǎn)生長鳴。 硬件中包括一個開關(guān),為復(fù)位開關(guān)。開機(jī)后,所有器件初始化,ds1302 產(chǎn)生實(shí)時時間和日期,溫濕度傳感器sht11開始進(jìn)行溫濕度測量和計算,最
10、后通過lcd液晶顯示器顯示結(jié)果。在測量結(jié)果中有超過設(shè)定的溫濕度上下限的,通過超限模塊作出反應(yīng)。 其他是一些附件,比如復(fù)位、晶振電路,整體電路框圖如圖1。at89c51ds1302 超限模塊sht11lcd1604信號顯示晶振電路復(fù)位電路 電源圖1 整體電路框圖 2 硬件設(shè)計部分 2.1 芯片介紹 2.1.1溫濕度傳感器 (1)sht11簡介 sht11 是瑞士scnsirion 公司推出的一款數(shù)字溫濕度傳感器芯片。溫濕度傳感器sht11集溫度傳感器和濕度傳感器于一體,因此采用sht11 進(jìn)行溫濕度實(shí)時監(jiān)測的系統(tǒng)具有精度高、成本低、體積小、接口簡單等優(yōu)點(diǎn)。 (2)sht11的引腳功能 sht11
11、溫濕度傳感器采用smd(lcc)表面貼片封裝形式,接口非常簡單,引腳名稱及排列順序如圖2所示。圖2 sht11引腳圖 各引腳的功能如下: >> 腳1和4-信號地和電源,其工作電壓范圍是2.45.5 v; >> 腳2和腳3-二線串行數(shù)字接口,其中da-ta為數(shù)據(jù)線,sck為時鐘線; >> 腳58-未連接。2.1.2 單片機(jī)89c51 是一種帶4k 字節(jié)可編 程可 擦除 只讀 存儲 器的低電壓,高性能cmos8位微處理器,俗稱單片機(jī)。89c2051是一種帶2k字節(jié)可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除100次。該器件采用atmel高
12、密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容。由于將多功能8位cpu和閃爍存儲器組合在單個芯片中,atmel的89c51是一種高效微控制器,89c2051是它的一種精簡版本。89c51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。它的引腳如圖3所示。圖3 at89c51引腳圖2.1.3 ds1302ds1302是dallas公司推出的涓流充電時鐘芯片,內(nèi)含有一個實(shí)時時鐘/日歷和31字節(jié)靜態(tài)ram,通過簡單的串行接口與單片機(jī)進(jìn)行通信。實(shí)時時鐘/日歷電路提供秒分時日、日期月年的信息。每月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過am/pm指示決定采用2
13、4或12小時格式。ds1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信僅需用到三個口線:res復(fù)位、i/o數(shù)據(jù)線、 sclk串行時鐘。時鐘/ram的讀/寫數(shù)據(jù)以一個字節(jié)或多達(dá)31個字節(jié)的字符組方式通信,ds1302工作時功耗很低,保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mw,引腳如圖4所示。圖4 ds1302引腳圖2.1.4 lcd1604(1)字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點(diǎn)陣式lcd,目前常用16*1,16*2,16*4和20*2行等的模塊。(2)引腳功能說明 如表1所示。表1 引腳接口說明表1604lcd采用標(biāo)準(zhǔn)16腳接口,各引腳接口說明如表 編號符號引腳說明1vss
14、地2vdd正極3v0液晶顯示偏壓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ù)15、16空腳1604液晶模塊的讀寫操作,屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。2.2模塊功能介紹 2.2.1 復(fù)位電路部分 這種復(fù)位電路的工作原理是:單片機(jī)的復(fù)位電路在剛接通電時,剛開始電容是沒有電的,電容內(nèi)的電阻很低,通電后,5v 的電通過電阻給電容進(jìn)行充電,電容兩端的電會由0v慢慢的升到4v左右(此時間很短一般小于0.3秒),rc構(gòu)成的微分電路在上電瞬間產(chǎn)生一個微分脈沖,其寬度大于兩個機(jī)器周期,89c51將復(fù)位。正
15、因?yàn)檫@樣,復(fù)位腳的電由低電位升到高電位,引起了內(nèi)部電路的復(fù)位工作,rst端電壓慢慢下降,降到一定電壓值以后,即為低電平,單片機(jī)開始正常工作(這是單片機(jī)的上電復(fù)位,也叫初始化復(fù)位);當(dāng)按下復(fù)位鍵時,電容兩端放電,電容又回到0v了,于是又進(jìn)行了一次復(fù)位工作(這是手動復(fù)位原理)。圖5 手動復(fù)位及晶振電路2.2.2 傳感器電路部分 此模塊是整個電路設(shè)計的信號采集及初步處理的模塊,由溫濕度傳感器芯片sht11構(gòu)成,主要的功能結(jié)構(gòu)在前面的芯片介紹中已有,這里不重新介紹。圖6 sht11傳感器電路2.2.3 時鐘電路部分 此模塊是系統(tǒng)時間的實(shí)時顯示而設(shè)計的,主要由芯片ds1302構(gòu)成,其中引腳rst、clk
16、、i/o分別接單片機(jī)p3.0、p3.1、p3.2口,屬于控制引腳。此模塊是產(chǎn)生實(shí)時的系統(tǒng)時間和日歷,能對某個確定環(huán)境的實(shí)時溫濕度控制起到一定的作用。芯片連接電路簡單,時間日期準(zhǔn)確。圖7 實(shí)時時鐘電路2.2.4 顯示電路部分 此模塊是由lcd1604芯片組成的日期時間和實(shí)時溫濕度顯示的電路部分。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,蜂鳴器接單片機(jī)的p1.0口,發(fā)
17、光二極管與單片機(jī)的連接部分如圖所示。d0、d1、d2、d4、d5 分別代表著發(fā)光、降溫、加熱、干燥和加濕,一旦傳感器測定的溫濕度超過設(shè)定的限額,就會產(chǎn)生不同的發(fā)光反應(yīng),起警示作用,同時蜂鳴報警器連續(xù)發(fā)出“滴” 的聲音。圖9 超限處理警示電路部分圖10 蜂鳴器電路2.3 整體電路圖圖11 整體電路圖3 軟件設(shè)計軟件設(shè)計是本次設(shè)計中不可缺少的環(huán)節(jié),貫穿了整個畢業(yè)設(shè)計,是本次設(shè)計能夠完成的最重要的環(huán)節(jié)之一。軟件部分經(jīng)本人調(diào)試可以運(yùn)行,能夠正確顯示結(jié)果。具體模塊由一個c(xc.c)主函數(shù)文件和8個h文件構(gòu)成。 reg51.h(8051的相關(guān)參數(shù)初始化); absacc.h; intrins.h(偽本征
18、函數(shù)); math.h(數(shù)學(xué)公式函數(shù));lcd1604.h(1604液晶顯示函數(shù)); ds1302.h(實(shí)時時間/日期產(chǎn)生函數(shù));sht11.h(溫濕度采集計算函數(shù)); set_key.h;(限額報警函數(shù))。 根據(jù)溫濕度監(jiān)控系統(tǒng)功能,系統(tǒng)軟件流程圖如圖12所示。開始單片機(jī)開機(jī)初始化lcd初始化 ds1302初始化 sht11初始化ds1302運(yùn)行 確定時間/日期sht11運(yùn)行進(jìn)行溫濕度采集與測量lcd顯示實(shí)時溫濕度檢測溫濕度是否改變yn等待 圖12 主程序框圖 點(diǎn)擊運(yùn)行按鍵,仿真開始運(yùn)行。首先單片機(jī)開機(jī)初始化,然后lcd、ds1302、sht11初始化,喇叭發(fā)出一聲提示音,各個模塊開始運(yùn)行,d
19、s1302運(yùn)行確定時間和日期,sht11運(yùn)行進(jìn)行溫濕度的采集和測量,最后lcd顯示日期時間以及溫濕度測量值;當(dāng)環(huán)境溫度濕度發(fā)生改變時,lcd都會實(shí)時準(zhǔn)確顯示當(dāng)前溫濕度值。4 仿真軟件和仿真測試本設(shè)計用到了proteus和keil c51兩種軟件,兩者能完美的結(jié)合在一起,實(shí)現(xiàn)虛擬的實(shí)物效果,也就是仿真效果。 4.1 proteus簡介 proteus軟件是來自英國labcenter electronics公司的eda工具軟件,proteus軟件有十多年的歷史,在全球廣泛使用,除了其具有和其它eda工具一樣的原理布圖、pcb自動或人工布線及電路仿真的功能外,其革命性的功能是,他的電路仿真是互動的,
20、針對微處理器的應(yīng)用,還可以直接在基于原理圖的虛擬原型上編程,并實(shí)現(xiàn)軟件源碼級的實(shí)時調(diào)試,如有顯示及輸出,還能看到運(yùn)行后輸入輸出的效果,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等。 其功能模塊:個易用而又功能強(qiáng)大的isis原理布圖工具;prospice混合模型spice仿真; ares pcb設(shè)計。 prospice 仿真器的一個擴(kuò)展proteus vsm:便于包括所有相關(guān)的器件的基于微處理器設(shè)計的協(xié)同仿真。此外,還可以結(jié)合微控制器軟件使用動態(tài)的鍵盤,開關(guān),按鈕,leds甚至lcd顯示cpu模型。 4.2 keil c51編譯器簡介 keil c51標(biāo)準(zhǔn)c編譯器為8051微控制器的軟件開發(fā)提供
21、了c語言環(huán)境,同時保留了匯編代碼高效,快速的特點(diǎn)。c51 編譯器的功能不斷增強(qiáng),使你可以更加貼近c(diǎn)pu本身,及其它的衍生產(chǎn)品。c51已被完全集成到uvision2的集成開發(fā)環(huán)境中,這個集成開發(fā)環(huán)境包含:編譯器,匯編 器,實(shí)時操作系統(tǒng),項(xiàng)目管理器,調(diào)試器。uvision2 ide可為它們提供單一而靈活的開發(fā)環(huán)境。 工程(project)是由源文件、開發(fā)工具選項(xiàng)以及編程說明三部分組成的。一個單一的uvision2工程能夠產(chǎn)生一個或多個目標(biāo)程序。產(chǎn)生目標(biāo)程序的源文件構(gòu)成“組”。開發(fā)工具選項(xiàng)可以對應(yīng)目標(biāo),組或單個文件。 uvision2包含一個器件數(shù)據(jù)庫(device database),可以自動設(shè)置
22、匯編器、編譯器、連接定位器及調(diào)試器選項(xiàng),來滿足用戶充分利用特定微控制器的要求。此數(shù)據(jù)庫包含:片上存儲器和外圍設(shè)備的信息,擴(kuò)展數(shù)據(jù)指針(extra data pointer)或者加速器(math accelerator)的特性。uvision2可以為片外存儲器產(chǎn)生必要的連接選項(xiàng):確定起始地址和規(guī)模。 4.3 仿真測試整個軟件通過c語言編程,先在keil c51集成開發(fā)環(huán)境下將編好的程序進(jìn)行編譯、調(diào)試,調(diào)試通過后會生成“*.hex”文件。運(yùn)行proteus模擬仿真軟件,打開已繪制好的仿真電路原理圖,選中單片機(jī)at89c51,右鍵點(diǎn)擊at89c51,出現(xiàn)對應(yīng)的對話框,在program file中找到
23、編譯好的“*.hex”文件,然后點(diǎn)擊“ok”就可以進(jìn)行仿真了,仿真結(jié)果如圖13所示。圖13 仿真運(yùn)行效果lcd液晶顯示四行分別顯示“date:*”、“time:*”、“temper:*”、“humidi:*”,其中“*”為測定的數(shù)據(jù)。sht11顯示值為溫濕度測量所得的 模擬值,可以通過sht11上的按鍵調(diào)整模擬值,得到相應(yīng)的試驗(yàn)效果。圖14 sht11運(yùn)行效果本次試驗(yàn)溫度臨界值設(shè)定為20t80,濕度臨界值設(shè)定為30h90。如當(dāng)溫度在臨界值范圍,濕度大于臨界值時,此時d1燈亮,喇叭發(fā)出警報聲,d4燈亮,提示車間過于潮濕,需要干燥。如圖15所示。圖15 仿真測量效果經(jīng)過一系列的仿真試驗(yàn),得到了七種
24、試驗(yàn)結(jié)果,如表2所示(注:表示燈點(diǎn)亮,×表示燈熄滅)。表2 仿真試驗(yàn)結(jié)果溫度范圍濕度范圍d1聲音d2降溫d3加熱d4干燥d5加濕120t8030h90×××××2h<30×××3h>90×××4t<2030h90×××5t>80×××6t<20h<30××7t>80h>90×× d1燈亮,喇叭發(fā)出警報聲,提醒人員過來檢查;d2燈亮
25、,表示車間環(huán)境過熱,需要降溫;d3燈亮,表示車間環(huán)境過冷,需要加熱;d4燈亮,表示車間環(huán)境過于潮濕,需要干燥;d5燈亮,表示車間環(huán)境過于干燥,需要加濕。結(jié) 論 該系統(tǒng)主要是基于at89c51單片機(jī)的的環(huán)境測試儀的設(shè)計,所謂的環(huán)境測試主要是側(cè)重于對生產(chǎn)環(huán)境的溫度與濕度的測量,整體設(shè)計采用的是以高效單片機(jī)作為核心,以sht11作為主要的采集與測量系統(tǒng),集溫度傳感器和濕度傳感器于一體的設(shè)計,其中它自帶的a/d轉(zhuǎn)換器,使得此溫濕度測試儀具有精度高、成本低、體積小、接口簡單等優(yōu)點(diǎn),還具有良好抗干擾能力。加上優(yōu)化程序,使得本系統(tǒng)具有很高的實(shí)用性。 單片機(jī)的應(yīng)用如今已經(jīng)在工業(yè)、電子等方方面面展示出了它的優(yōu)越
26、性,利用單片機(jī)在設(shè)計電路逐漸成了趨勢,它與外圍的簡單電路再加上優(yōu)化程序就可以構(gòu)建任意的產(chǎn)品,使得本設(shè)計成為現(xiàn)實(shí)。隨著單片機(jī)的日益發(fā)展,它必將在未來顯示出更大的活力,為電子設(shè)計增加更多精彩。 在設(shè)計過程中,由于時間和本人能力的限制,設(shè)計中存在一些需要改進(jìn)和優(yōu)化的地方。測量精度有待進(jìn)一步提高,軟件設(shè)計也存在不合理之處,歡迎各位老師同仁批評指正。參考文獻(xiàn)1 苗新法. 便攜式環(huán)境測試儀電源電路設(shè)計j. 通信電源技術(shù), 2010 (3): 41-42.2 鄭文強(qiáng). 環(huán)境參數(shù)測試系統(tǒng)的數(shù)據(jù)傳輸技術(shù)研究d. 中北大學(xué), 2013.3 王世磊,文環(huán)明,韓冰,等. 便捷式煤礦井環(huán)境測試儀的設(shè)計j. 中國儀器儀表
27、, 2010 (6): 29-31.4 王靜,閆增峰,孫立新. 土遺址博物館室內(nèi)熱濕環(huán)境測試與分析j. 建筑科學(xué), 2010 (8): 27-31.5 王登甲,劉艷峰,王怡,等. 拉薩市住宅建筑冬季室內(nèi)熱環(huán)境測試評價j. 建筑科學(xué),2012,27(12):20-24. 6 張友德等. 單片微型機(jī)原理、應(yīng)用和實(shí)驗(yàn)m.電子工業(yè)出版社. 7 吳經(jīng)國等.單片機(jī)應(yīng)用技術(shù)m. 中國電力出版社. 8 李群芳.單片機(jī)微型計算機(jī)與接口技術(shù)m. 電子工業(yè)出版社.9 周立功.單片機(jī)實(shí)驗(yàn)與實(shí)踐m. 北京航空航天大學(xué)出版社. 10 xu yi - min .the design for stepping motor o
28、f scm control systemj. heilongjiang science and technology institute.2005.(1)附 錄參加課題情況:參與了宿州學(xué)院一般科研項(xiàng)目(批準(zhǔn)號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<
29、sht11.h> #include<set_key.h> void delay1ms(unsigned 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("dat
30、e:"); gotoxy(16,0); print("temper:"); gotoxy(0,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); /溫度和濕度的補(bǔ)償 float_convert(&aa); /將浮點(diǎn)數(shù)轉(zhuǎn)換成整型,各個位的數(shù)分別保存 doing_temp(
31、&aa); /檢測溫度是否超限 doing_humi(&aa); /檢測濕度是否超限 ds1302_gettime(¤ttime); datetostr(¤ttime); timetostr(¤ttime); gotoxy(5,0); /第一行顯示日期 print(currenttime.datestring); gotoxy(23,0); /第三行顯示溫度 print(aa.num_temp); gotoxy(28,0); print(" "); gotoxy(5,1); /第二行顯示時間 pri
32、nt(currenttime.timestring); gotoxy(23,1); /第四行顯示濕度 print(aa.num_humi); gotoxy(28,1); print(" "); delay1ms(300); /延時 ds1302.h #ifndef _real_timer_ds1302 #define _real_timer_ds1302 sbit ds1302_clk = p31; /實(shí)時時鐘時鐘線引腳 sbit ds1302_io = p32; /實(shí)時時鐘數(shù)據(jù)線引腳 sbit ds1302_rst = p30; /實(shí)時時鐘復(fù)位線引腳 sbit acc0
33、= acc0; sbit acc7 = acc7; typedef struct _systemtime_ unsigned 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小時制
34、#define ds1302_second 0x80 #define ds1302_minute 0x82 #define 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) /實(shí)時時鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; acc = d; for(i=8;
35、 i>0; i-) ds1302_io = acc0; /相當(dāng)于匯編中的 rrc ds1302_clk = 1; ds1302_clk = 0; acc = acc >> 1; unsigned char ds1302outputbyte(void) /實(shí)時時鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i>0; i-) acc = acc >>1; /相當(dāng)于匯編中的 rrc acc7 = ds1302_io; ds1302_clk = 1; ds1302_clk = 0; return(acc); void write130
36、2(unsigned char ucaddr, unsigned char ucda) ds1302_rst = 0; ds1302_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
37、 = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr|0x01); / 地址,命令 ucdata = ds1302outputbyte(); / 讀1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; return(ucdata); void ds1302_setprotect(bit flag) /是否寫保護(hù) if(flag) write1302(0x8e,0x10); else write1302(0x8e,0x00); void ds1302_settime(unsigned char address, unsigned ch
38、ar value) / 設(shè)置時間函數(shù) ds1302_setprotect(0); write1302(address, (value/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-&g
39、t;month/10 + '0' time->datestring4 = time->month%10 + '0' time->datestring5 = '-' time->datestring6 = time->day/10 + '0' time->datestring7 = time->day%10 + '0' time->datestring8 = '0' void timetostr(systemtime *time) time->ti
40、mestring0 = time->hour/10 + '0' time->timestring1 = time->hour%10 + '0' time->timestring2 = ':' time->timestring3 = time->minute/10 + '0' time->timestring4 = time->minute%10 + '0' time->timestring5 = ':' time->timestring6
41、= time->second/10 + '0' time->timestring7 = time->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)
42、; readvalue = read1302(ds1302_minute); time->minute = (readvalue&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)>>
43、;4)*10 + (readvalue&0x0f); readvalue = read1302(ds1302_month); 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=re
44、ad1302(ds1302_second); if(second&0x80) ds1302_settime(ds1302_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&g
45、t;0; i-) /8byte = 7byte 時鐘數(shù)據(jù) + 1byte 控制 ds1302inputbyte(*pwclock); / 寫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;
46、 i>0; i-) *prclock = ds1302outputbyte(); / 讀1byte數(shù)據(jù) prclock+; 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)
47、; #endif lcd1604.h #ifndef lcd_char_1604 #define lcd_char_1604 #include <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);/
48、 lcden=0; return dbport; #define lcd_command 0 / command #define lcd_data 1 / data #define lcd_clear_screen 0x01 / 清屏 #define lcd_homing 0x02 / 光標(biāo)返回原點(diǎn) void lcd_write(bit style, unsigned char input) lcden=0; lcdrs=style; lcdrw=0; _nop_(); dbport=input; _nop_();/注意順序 lcden=1; _nop_();/注意順序 lcden=0; _n
49、op_(); lcd_wait(); #define lcd_show 0x04 /顯示開 #define lcd_hide 0x00 /顯示關(guān) #define lcd_cursor 0x02 /顯示光標(biāo) #define lcd_no_cursor 0x00 /無光標(biāo) #define lcd_flash 0x01 /光標(biāo)閃動 #define lcd_no_flash 0x00 /光標(biāo)不閃動 void lcd_setdisplay(unsigned char displaymode) lcd_write(lcd_command, 0x08|displaymode); #define lcd_ac
50、_up 0x02 #define lcd_ac_down 0x00 / default#define lcd_move 0x01 / 畫面可平移#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點(diǎn)陣 lcd_write(lcd_command,0x38); lcd_set
51、display(lcd_show|lcd_no_cursor); /開啟顯示, 無光標(biāo) lcd_write(lcd_command,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+; #endif set_key.h #ifndef _setkey_h_ #define _setkey_h_ #include<sht11.h> float setwen_h,setwen_l,setshi_h,
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)用混合氣體系統(tǒng)競爭策略分析報告
- 中國曝氣充氧設(shè)備行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 南京升降桌項(xiàng)目投資分析報告范文模板
- 2025年旋轉(zhuǎn)式浴缸排水吊桶行業(yè)深度研究分析報告
- 中國開關(guān)設(shè)備研發(fā)行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 2025年阻燃中密度纖維板行業(yè)深度研究分析報告
- 單開門機(jī)柜行業(yè)深度研究分析報告(2024-2030版)
- 中國升降機(jī)攪拌機(jī)配件行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 高純鎵項(xiàng)目可行性分析報告
- 2025年銀川數(shù)控刀柄項(xiàng)目投資分析報告模板范本
- 醫(yī)院培訓(xùn)課件:《產(chǎn)前準(zhǔn)備-為順產(chǎn)做準(zhǔn)備》
- 《管理學(xué)原理》(課件)
- 長城汽車2025人才測評答案
- 幼兒園法制教育講座
- 《中華人民共和國產(chǎn)品質(zhì)量法》知識培訓(xùn)
- 技能人才評價命題技術(shù)規(guī)程
- 中職不等式的試題及答案
- 深信服aES產(chǎn)品技術(shù)白皮書-V1.5
- 浙江省金華義烏市稠州中學(xué)2024-2025學(xué)年九年級下學(xué)期3月獨(dú)立作業(yè)英語試卷(原卷版+解析版)
- Unit+2+Expressing+yourself+PartB(課件)【知識精研】人教PEP版(2024)英語三年級下冊
- 電子商務(wù)與電子政務(wù)的互補(bǔ)關(guān)系
評論
0/150
提交評論