《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)

上傳人:仙*** 文檔編號:29474128 上傳時(shí)間:2021-10-07 格式:DOC 頁數(shù):31 大小:2.54MB
收藏 版權(quán)申訴 舉報(bào) 下載
《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)_第1頁
第1頁 / 共31頁
《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)_第2頁
第2頁 / 共31頁
《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)_第3頁
第3頁 / 共31頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微型計(jì)算機(jī)控制技術(shù)》課程設(shè)計(jì)報(bào)告多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì)(31頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、 《微型計(jì)算機(jī)控制技術(shù)》 課程設(shè)計(jì)報(bào)告 課題名稱 多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì) 專 業(yè) 自動(dòng)化(交通信息與工程) 班 級 自動(dòng)化一班 學(xué)生姓名 指導(dǎo)教師 李曙光 2015年 7月 3 日 目錄 一、設(shè)計(jì)題目 2 二、任務(wù)要求 2 三、總體設(shè)計(jì)方案 2 3.1控制模塊………………………………………………………………………………..2

2、 3.2溫度顯示模塊…………………………………………………………………………..3 3.3溫度采集模塊…………………………………………………………………………..4 3.4鍵盤控制模塊…………………………………………………………………………..6 3.5報(bào)警模塊………………………………………………………………………………..6 四、各硬件模塊電路設(shè)計(jì) 4 4.1單片機(jī)最小系統(tǒng)硬件仿真圖…………………………………………………………..8 4.2溫度顯示模塊硬件仿真圖……………………………………………………………..8 4.3溫度

3、采集模塊硬件仿真圖……………………………………………………………..9 4.4按鍵控制模塊硬件仿真圖……………………………………………………………..9 4.5報(bào)警模塊硬件仿真圖…………………………………………………………………..9 4.6硬件實(shí)現(xiàn)……………………………………………………………………………....10 五、各個(gè)軟件模塊設(shè)計(jì)和流程圖 4 5.1軟件設(shè)計(jì)總流程圖……………………………………………………………………12 5.2DS18B20初始化……………………………………………………………………...13 5.3讀DS18B20測得的溫度……………………

4、………………………………………..14 5.4數(shù)碼管顯示數(shù)據(jù)處理…………………………………………………………………15. 5.5按鍵處理………………………………………………………………………………16 六.設(shè)計(jì)總結(jié)及參考資料 4 6.1設(shè)計(jì)總結(jié)………………………………………………………………………………..16 6.2參考文獻(xiàn)………………………………………………………………………………..17 七.附件 4 附件一:完整源程序……………………………………………………………………….18 附件二:完整的器件清單及硬件電路圖………………………………………………….28

5、 一、設(shè)計(jì)題目 多點(diǎn)溫度檢測系統(tǒng)設(shè)計(jì) 二、任務(wù)要求 (1) 使用ds18b20為溫度傳感器; (2)檢測點(diǎn)數(shù)為2點(diǎn)以上,檢測溫度范圍為-40到40度之間,測量相應(yīng)時(shí)間小于1s; (3)完成溫度數(shù)據(jù)的實(shí)時(shí)顯示; (4)設(shè)計(jì)一報(bào)警電路,當(dāng)采集的溫度越限(超過鍵盤設(shè)置的上下限)時(shí)產(chǎn) 生聲光報(bào)警。 三、總體設(shè)計(jì)方案 控制模塊 鍵盤控制模塊 溫度顯示模塊 報(bào)警模塊 溫度采集模塊 3.1控制模塊 1) 主要功能 采用Atmel公司的AT89S51單片機(jī),它作為系統(tǒng)的核心部分,和溫度采集單元之

6、間,它直接對溫度傳感器進(jìn)行指令操作,獲取溫度傳感器的溫度數(shù)據(jù)后進(jìn)行各種處理,然后通過顯示模塊顯示出溫度值,工作過程中,接收來自鍵盤控制模塊的信號,并對其作出相應(yīng)的響應(yīng),同時(shí),它不斷檢測DS18B20測取的溫度值是否超過了設(shè)定的上限溫度或下限溫度,如果超過則對報(bào)警模塊發(fā)出指令令其報(bào)警。 2) 器件選擇 AT89S51是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S5

7、1在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用。 AT89S51具有完整的輸入輸出、控制端口、以及內(nèi)部程序存儲(chǔ)空間。與我們通常意義上的微機(jī)原理類似,可以通過外接A/D,D/A轉(zhuǎn)換電路及運(yùn)放芯片實(shí)現(xiàn)對傳感器傳送信息的采集,且能夠提供以點(diǎn)陣或LCD液晶及外接按鍵實(shí)現(xiàn)人機(jī)交互,能對內(nèi)部眾多I/O端口連接步進(jìn)電機(jī)對外圍設(shè)備進(jìn)行精確操控,具有強(qiáng)大的工控能力。 圖一 AT89S51管腳圖 3.2溫度顯示模塊 1) 主要功能 實(shí)時(shí)顯示兩個(gè)DS18B20溫度傳感器采集到的溫度,在按鍵的設(shè)置下顯示設(shè)定的報(bào)警溫度上、下限值。 2) 器件選擇 該模塊采用兩個(gè)四位的八段譯碼管和一塊八位鎖存

8、器74HC573組成,采用掃描顯示的方式顯示八位數(shù)據(jù)。 數(shù)碼管分為共陽型和共陰型,共陽極型就是發(fā)光管的正極都連在一起 ,作為一條引線,負(fù)極分開。八段數(shù)碼發(fā)光管就是8個(gè)發(fā)光二極管組成的,在空間排列成為8字型帶個(gè)小數(shù)點(diǎn),只要將電壓加在陽極和陰極之間相應(yīng)的筆畫就會(huì)發(fā)光。8個(gè)發(fā)光二極管的陽極并接在一起,8個(gè)陰極分開,因此稱為共陽八段數(shù)碼管。相反則為共陰八段數(shù)碼管。 圖二 數(shù)碼管顯示字段 (a)八段數(shù)碼管結(jié)構(gòu) (b)共陰型數(shù)碼管 (c)共陽型數(shù)碼管 圖三 八段LED數(shù)碼顯示管原理和結(jié)構(gòu) 3.3溫

9、度采集模塊 1) 主要功能 實(shí)時(shí)測量兩個(gè)側(cè)兩點(diǎn)的溫度 2) 器件選擇 該模塊采用DALLAS公司的DS18B20溫度傳感器,該溫度傳感器將溫度檢測與數(shù)字?jǐn)?shù)據(jù)輸出全集成于一個(gè)芯片上,它的一個(gè)工作周期分為溫度檢測和數(shù)據(jù)處理兩個(gè)部分,它采用單數(shù)據(jù)總線進(jìn)行數(shù)據(jù)傳輸,由于本設(shè)計(jì)采用兩點(diǎn)測量溫度,兩個(gè)溫度傳感器的輸出數(shù)據(jù)腳共連在單片機(jī)的數(shù)據(jù)引腳上,因此在進(jìn)行溫度檢測和數(shù)據(jù)處理中需要首先利用DS18B20的ROM操作指令對溫度傳感器的ROM—ID進(jìn)行識別,以針對特定的溫度傳感器進(jìn)行操作。(對DS18B20的操作指令見附錄文件) DS18B20的主要特征: 1) 全數(shù)字溫度轉(zhuǎn)換及輸出 2

10、) 先進(jìn)的單總線技術(shù) 3) 最高12位的分辨率時(shí)的最大工作周期為750毫秒 4) 可選擇寄生工作方式 5) 檢測溫度范圍為-55C~+125C 6) 內(nèi)置EEPROM,限溫度報(bào)警 7) 64位光刻ROM,內(nèi)置產(chǎn)品序列號,方便多機(jī)掛接 8) 多種封裝形式,適應(yīng)不同硬件 圖四 DS18B20的不同封裝形式 3.4鍵盤控制模塊 1) 主要功能 通過按鍵進(jìn)行工作模式的切換,并且用按鍵進(jìn)行上限溫度和下限溫度的更改 2) 器件選擇 該模塊采用幾個(gè)按鈕開關(guān)和相應(yīng)的幾個(gè)10K電阻組成,當(dāng)按下按鈕是,得到一個(gè)低電平信號送入單片機(jī),松開開關(guān)后變回高電平信號,單片機(jī)識

11、別此信號并對此做出響應(yīng)。 圖五 按鍵 3.5報(bào)警模塊 1) 功能實(shí)現(xiàn) 當(dāng)兩個(gè)DS18B0中任意一個(gè)測取的溫度超過設(shè)定的溫度上、下限時(shí),蜂鳴器響,以此報(bào)警。 2) 器件選擇 該模塊采用蜂鳴器來實(shí)現(xiàn),蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為有源蜂鳴器和無源蜂鳴器兩種類型。 有源蜂鳴器與無源蜂鳴器的區(qū)別(注意:這里的“源”不是指電源,而是指震蕩源): 有源蜂鳴器內(nèi)部帶震蕩源,所以只要一通電就會(huì)叫;而無源內(nèi)部不帶震蕩源,所以如果用直流信號無法令

12、其鳴叫。必須用2K-5K的方波去驅(qū)動(dòng)它。有源蜂鳴器往往比無源的貴,就是因?yàn)槔锩娑鄠€(gè)震蕩電路。 無源蜂鳴器的優(yōu)點(diǎn)是: 1. 便宜 2. 聲音頻率可控,可以做出“多來米發(fā)索拉西”的效果 3. 在一些特例中,可以和LED復(fù)用一個(gè)控制口 有源蜂鳴器的優(yōu)點(diǎn)是:程序控制方便。 綜上所述,本實(shí)驗(yàn)采用無緣蜂鳴器。 圖六:有源和無源蜂鳴器的外觀 a)有源 b)無源 四、各硬件模塊電路設(shè)計(jì) 圖七 單片機(jī)端口分配圖 總的硬件仿真圖附于附錄中。下面是各模塊硬件仿真連線圖: 4.1單片機(jī)最小系統(tǒng)硬件仿真圖

13、 4.2溫度顯示模塊硬件仿真圖 4.3溫度采集模塊硬件仿真圖 4.4按鍵控制模塊硬件仿真圖 4.5報(bào)警模塊硬件仿真圖 4.6硬件實(shí)現(xiàn) 初始顯示界面(顯示兩點(diǎn)測量溫度) 設(shè)定溫度上限顯示界面(顯示溫度上限值30和第二點(diǎn)測量溫度) 設(shè)定溫度下限顯示界面(顯示溫度下限值0和第二點(diǎn)測量溫度) 五、各個(gè)軟件模塊設(shè)計(jì)和流程圖 5.1軟件設(shè)計(jì)總流程圖 首先,讀取第一個(gè)DS18B20測得的溫度存入數(shù)組temp_buff中,然后讀取第二個(gè)DS18B20測得的溫度存入數(shù)組temp

14、1_buff中,隨后進(jìn)行按鍵掃描和按鍵處理,對接下來要顯示的模式進(jìn)行選擇,然后對數(shù)碼要管顯示的數(shù)據(jù)進(jìn)行處理,根據(jù)選擇的不同的模式讀取相應(yīng)的緩存,經(jīng)過數(shù)碼管掃描讀出相應(yīng)的溫度,最后,依次判斷兩個(gè)點(diǎn)的測量溫度是否超過設(shè)定的溫度報(bào)警值,若超過,蜂鳴器報(bào)警,若未超過,繼續(xù)從開始處循環(huán)。 5.2 DS18B20初始化 DS18B20的通信方式屬于單總線通信方式,需按一定的通信協(xié)議。單總線的所有處理過程均從初始化開始。其中初始化序列包括一個(gè)由主機(jī)發(fā)出的復(fù)位脈沖和其后由從機(jī)發(fā)出的存在脈沖,存在脈沖讓主機(jī)知道DS18B20在總線上并且已準(zhǔn)備就緒。 5.3讀DS

15、18B20測得的溫度 首先對DS18B20進(jìn)行初始化,然后通過跳過ROM匹配指令、溫度轉(zhuǎn)換指令,將DS18B20采集到的數(shù)據(jù)轉(zhuǎn)化為溫度,再通過初始化、跳過ROM匹配指令、讀溫度暫存器指令,將得到的溫度讀取出來,最后對得到的溫度數(shù)據(jù)進(jìn)行處理,令TN=溫度整數(shù)部分,TD=溫度小數(shù)部分,以便后續(xù)進(jìn)行使用。 5.4數(shù)碼管顯示數(shù)據(jù)處理 1)前四位數(shù)碼管顯示數(shù)據(jù)處理 由于數(shù)碼管數(shù)量有限,所以用前四位顯示第一個(gè)DS18B20測得的溫度和設(shè)定的報(bào)警溫度(包括上限溫度和下限溫度),通過K1鍵進(jìn)行三種模式的切換。若無按鍵按下或者按下三次K1鍵(mode=0),將

16、第一個(gè)DS18B20測出的溫度存入temp[ ]前四位,后續(xù)對其進(jìn)行譯碼,經(jīng)過譯碼后,前四位數(shù)碼管顯示第一個(gè)DS18B20測得的溫度:若按下一次K1鍵(mode=1),將設(shè)定的報(bào)警溫度上限存入temp[ ]前四位,后續(xù)對其進(jìn)行譯碼,經(jīng)過譯碼后,前四位數(shù)碼管顯示設(shè)定的報(bào)警溫度上限:若按下兩次K1鍵(mode=2),將設(shè)定的報(bào)警溫度下限存入temp[ ]前四位,后續(xù)對其進(jìn)行譯碼,經(jīng)過譯碼后,前四位數(shù)碼管顯示設(shè)定的報(bào)警溫度下限。 2)后四位數(shù)碼管顯示數(shù)據(jù)處理 將第二個(gè)DS18B20測得的溫度存入temp[ ],后續(xù)對其進(jìn)行譯碼,譯碼后實(shí)時(shí)顯示第二點(diǎn)的測量溫度 5.5按鍵處理 檢測

17、鍵盤掃描是否有返回值,判斷是否有按鍵按下。若無按鍵按下,則進(jìn)行數(shù)碼管顯示數(shù)據(jù)處理;若有按鍵按下且為K1鍵,mode自加1 ,并判斷mode是否大于2,若大于2,mode清零后輸出,若不大于2,直接輸出mode;若有按鍵按下且為K2鍵,判斷mode 是否為1,若為1,上限報(bào)警溫度自加1(不超過125),若不為1,進(jìn)行下限報(bào)警溫度自加1(不超過125);若有按鍵按下且為K3鍵,判斷mode 是否為1,若為1,上限報(bào)警溫度自減1(不低于-50),若不為1,進(jìn)行下限報(bào)警溫度自減1(不超過-50)。 六.設(shè)計(jì)總結(jié)及參考資料 6.1設(shè)計(jì)總結(jié) 本次課程設(shè)計(jì)我們將兩個(gè)DS18B20和AT89C51單

18、片機(jī)相結(jié)合實(shí)現(xiàn)了多點(diǎn)溫度測量。對單片機(jī)的獨(dú)立控制外設(shè)而言難度不大,但由于不會(huì)用同一個(gè)I/O口控制多個(gè)DS18B20,因此用兩個(gè)獨(dú)立的I/O口分別對其控制,故編寫的程序有些繁瑣。本次設(shè)計(jì)的不足是,第二個(gè)DS18B20測得溫度的小數(shù)部分一直無法顯示,經(jīng)過多次調(diào)試仍然沒有結(jié)果,但基本功能都已實(shí)現(xiàn)。雖然課程設(shè)計(jì)結(jié)束了,但我們?nèi)詴?huì)努力將這一問題解決。 經(jīng)過本次設(shè)計(jì)實(shí)驗(yàn),充分認(rèn)識到自己實(shí)際操作方面的不足以及程序編寫不夠熟練等問題,因此需要多加練習(xí)。同時(shí)也更加明確了我們在接下來的學(xué)習(xí)中的側(cè)重方向,作為工科專業(yè)應(yīng)該更加注重理論與實(shí)際的結(jié)合,并且持之以恒地堅(jiān)持,只有這樣不斷提高自己的專業(yè)素養(yǎng)。 6.2參考文

19、獻(xiàn) [1]李群芳. 單片機(jī)微型計(jì)算機(jī)與接口技術(shù)第三版.電子工業(yè)出版社,2010.1 [2] 謝自美.電子線路設(shè)計(jì).實(shí)驗(yàn)測試(第二版)[M].武漢:華中科技大學(xué)出版社,2000. [3] 丘玉娟. 用串行ROM和AT89C51實(shí)現(xiàn)電子密碼鎖[J].電腦知識與技術(shù).2005,11(3):34~36 [4]李金平?電子系統(tǒng)設(shè)計(jì)?電子工業(yè)出版社?2009 七.附件 附件一:完整源程序 #include #include /

20、/--定義使用的IO--// sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; //譯碼器 sbit DQ=P3^7; //定義第一個(gè)18B20單總線端口 sbit DQ1=P3^6; //定義第二個(gè)18B20單總線端口 sbit key1=P1^0; //模式切換(上限,下限,當(dāng)前) sbit key2=P1^1; //溫度上/下限++ sbit key3=P1^2; //溫度上/下限-- sbit BEEP=P1^5; //定義蜂鳴器接口 //--定義全局變量--// unsigned char code table[]={

21、0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40,0x00}; //數(shù)碼管表,其中display[10]"." display[11]"-" display[12]"不顯示" unsigned char mode=0,KEY; //mode是模式切換變量,KEY=key_back(按鍵返回值) unsigned char n=0; //數(shù)碼管位數(shù) unsigned int temp_buff[9],temp1_buff[9],*p,*q,id_buff[8],id1_buff[8];

22、//利用指針和數(shù)組進(jìn)行數(shù)據(jù)傳輸 unsigned char symbol,symbol1; //正負(fù)標(biāo)志位 unsigned char sflag,tltemp; //負(fù)溫度標(biāo)志和臨時(shí)暫存變量 unsigned char TL; //存儲(chǔ)暫存器的溫度低位 unsigned char TH; //存儲(chǔ)暫存器的溫度高位 unsigned char TN,TN1; //TN:第一個(gè)DS18B20測得溫度的整數(shù)部分,TN1:第二個(gè)DS18B20測得溫度的整數(shù)部分 unsigned char TD,TD1; //TD:第一個(gè)DS18

23、B20測得溫度的小數(shù)部分,TD1:第二個(gè)DS18B20測得溫度的小數(shù)部分 char temp[8]; //溫度數(shù)據(jù)顯示的緩存 char H_temp=30; //上限報(bào)警溫度 char L_temp=0; //下限報(bào)警溫度 bit flag; //--函數(shù)聲明--// char cabs(char val); //取絕對值函數(shù) void delay(unsigned char); //短延時(shí)函數(shù) void delay1ms(unsigned in

24、t); //長延時(shí)函數(shù) bit Init18B20(void); //第一個(gè)DS18B20初始化函數(shù) bit Init118B20(void); //第二個(gè)DS18B20初始化函數(shù) void Write0neChar(unsigned char); //向第一個(gè)DS18B20寫一個(gè)字節(jié) void Write0neChar1(unsigned char); //向第二個(gè)DS18B20寫一個(gè)字節(jié) unsigned char Read0neChar(void); //從第一個(gè)DS18B20讀一個(gè)字節(jié) unsigned char Read0neChar1(v

25、oid); //從第二個(gè)DS18B20讀一個(gè)字節(jié) void Read_18B20(unsigned char); //讀第一個(gè)DS18B20 void Read1_18B20(unsigned char); //讀第二個(gè)DS18B20 ReadTemperature(void); //讀第一個(gè)DS18B20的溫度 ReadTemperature1(void); //讀第二個(gè)DS18B20的溫度 void beep(void); //蜂鳴器函數(shù) void check_alarm(void); //檢測第一個(gè)DS18

26、B20是否超過限值并報(bào)警 void check1_alarm(void); //檢測第二個(gè)DS18B20是否超過限值并報(bào)警 unsigned char key_scan(); //按鍵掃描 void key_action(key); //按鍵處理 void display_transaction(); //第一個(gè)DS18B20顯示數(shù)據(jù)處理 void display_transaction1(); //第二個(gè)DS18B20顯示數(shù)據(jù)處理 //--短延時(shí)--// void delay(unsigned char us) {

27、 while(us--); } //--長延時(shí)--// void delay1ms(unsigned int x) { unsigned char i,j; for(i=0;i

28、back=0; if(!key1|!key2|!key3) { delay1ms(10); if(!key1|!key2|!key3) { delay1ms(10); if(!key1) key_back=1; else if(!key2) key_back=2; //檢測哪個(gè)按鍵按下 else if(!key3) key_back=3; while(!key1|!key2|!key3); //等待按鍵釋放 } } return(key_back); } //--按鍵處理--// void key_acti

29、on(key_back) { if(key_back==1) { mode++; if(mode>2) mode=0; } else if(key_back==2) { if(mode==1) { H_temp++; if(H_temp>125) H_temp=125; } else { L_temp++; if(L_temp>125) L_temp=125; } } else if(key_back==3) { if(mode==1) { H_temp--; if(H_tem

30、p<-50) H_temp=-50; } else { L_temp--; if(L_temp<-50) L_temp=-50; } } } //--前四位數(shù)碼管顯示數(shù)據(jù)處理--// void display_transaction() { if(!mode) { temp[0]=TD; //顯示小數(shù)點(diǎn) temp[1]=TN%10; temp[2]=TN/10; if(symbol==0) //如果溫度為正值 temp[3]=12; /

31、/不顯符號 else //if(symbol==1)溫度為負(fù)值 temp[3]=11; //顯示負(fù)號 } else if(mode==1) { temp[0]=12; temp[1]=cabs(H_temp)%10; //此處調(diào)用求絕對值處理,是顯示負(fù)溫度的關(guān)鍵,下同 temp[2]=cabs(H_temp)/10; if(H_temp>0||H_temp==0) temp[3]=12; else temp[3]=11; } else if(mode==2) { temp[0]=12; te

32、mp[1]=cabs(L_temp)%10; temp[2]=cabs(L_temp)/10; if(L_temp>0||L_temp==0) temp[3]=12; else //如果溫度小于0 temp[3]=11; } } //--后四位數(shù)碼管顯示數(shù)據(jù)處理--// void display_transaction1() { temp[7]=TD1; //顯示小數(shù)點(diǎn) temp[6]=TN1%10; //顯示個(gè)位 temp[5]=TN1/10; //顯示十位 if(symbol1==0) //如果溫

33、度為正值 temp[4]=12; //不顯符號 else //if(symbol==1)溫度為負(fù)值 temp[4]=11; //顯示負(fù)號 } //--檢測第一個(gè)DS18B20是否超過限值并報(bào)警--// void check_alarm(void) { if((TN>H_temp)||(TNH_t

34、emp)||(TN1

35、y(20); _nop_(); _nop_(); return(flag); } //--第二個(gè)DS18B20初始化--// bit Init118B20(void) { DQ1=1; _nop_(); DQ1=0; delay(80); _nop_(); DQ1=1; delay(14); _nop_(); _nop_(); flag=DQ1; delay(20); _nop_(); _nop_(); return(flag); } //--向第一個(gè)DS18B20寫一個(gè)字節(jié)--//

36、 void Write0neChar(unsigned char m) { unsigned char i; for(i=0;i<8;i++) { DQ=0; _nop_(); DQ=m&0x01; delay(3); _nop_(); _nop_(); DQ=1; m>>=1; } } //--向第二個(gè)DS18B20寫一個(gè)字節(jié)--// void Write0neChar1(unsigned char m) { unsigned char i; for(i=0;i<8;i++) { DQ1=0; _nop_()

37、; DQ1=m&0x01; delay(3); _nop_(); _nop_(); DQ1=1; m>>=1; } } //--從第一個(gè)DS18B20讀一個(gè)字節(jié)--// unsigned char Read0neChar(void) { unsigned char i=0,dat=0; for(i=0;i<8;i++) { //拉低總線 DQ=0; dat>>=1; DQ=1; //釋放總線 if(DQ==1) dat|=0x80; delay(2); _nop_

38、(); } return(dat); } //--從第二個(gè)DS18B20讀一個(gè)字節(jié)--// unsigned char Read0neChar1(void) { unsigned char i=0,dat=0; for(i=0;i<8;i++) { DQ1=0; //拉低總線 dat>>=1; DQ1=1; //釋放總線 if(DQ1==1) dat|=0x80; delay(2); //延時(shí)等待數(shù)據(jù)穩(wěn)定 _nop_(); } return(dat); } //--讀第一個(gè)DS18B20--

39、// void Read_18B20(unsigned char j) { unsigned char i; for(i=0;i

40、oid) { p=id_buff; Init18B20(); Write0neChar(0xcc); //跳過ROM操作命令 Write0neChar(0x44); //溫度轉(zhuǎn)換命令 Init18B20(); Write0neChar(0xcc); Write0neChar(0xbe); //讀暫存器指令 p=temp_buff; Read_18B20(9); if((temp_buff[1]&0xf8)!=0x00) //判斷高五位,得到溫度正負(fù)標(biāo)志,前五位為0 正值,1 負(fù)值 { symbol=

41、1; flag=1; temp_buff[0]=~temp_buff[0]; //取反 temp_buff[1]=~temp_buff[1]; //取反 tltemp=temp_buff[0]+1; //低位加1 temp_buff[0]=tltemp; if(tltemp>225) temp_buff[1]++; //如果低8位大于225,向高8位進(jìn)1 TN=temp_buff[1]*16+temp_buff[0]/16; //溫度的整數(shù)部分 TD=(temp_buff[0]%16)*10/16;//溫度的

42、小數(shù)部分,一位小數(shù) } TN=temp_buff[1]*16+temp_buff[0]/16; TD=(temp_buff[0]%16)*10/16; } //--從第二個(gè)18B20讀溫度--// ReadTemperature1(void) { q=id1_buff; Init118B20(); Write0neChar1(0xcc); //跳過ROM操作命令 Write0neChar1(0x44); //溫度轉(zhuǎn)換指令 Init118B20(); Write0neChar1(0xcc); Write0neChar1(0xbe);

43、 //讀暫存器指令 q=temp1_buff; Read1_18B20(9); if((temp1_buff[1]&0xf8)!=0x00) //判斷高五位,得到溫度正負(fù)標(biāo)志,前五位為1 負(fù)值,0 正值 { symbol1=1; flag=1; temp1_buff[0]=~temp1_buff[0]; //取反 temp1_buff[1]=~temp1_buff[1]; //取反 tltemp=temp1_buff[0]+1; //低位加1 temp1_buff[0]=tltem

44、p; if(tltemp>225) temp1_buff[1]++; //如果低8位大于225,向高8位進(jìn)1 TN1=temp1_buff[1]*16+temp1_buff[0]/16; //溫度的整數(shù)部分 TD1=(temp1_buff[0]%16)*10/16; //溫度的小數(shù)部分,一位小數(shù) } TN1=temp1_buff[1]*16+temp1_buff[0]/16; TD1=(temp1_buff[0]%16)*10/16; } ////////////////////以上對18B20操作完畢///////////////////

45、////// //--數(shù)碼管掃描--// void display() { for(n=0;n<7;n++) //八位數(shù)碼管動(dòng)態(tài)掃描 { if(n==1||n==6) //此處if判斷是否顯示個(gè)位小數(shù)點(diǎn) P0=table[temp[n]]|0x80; else P0=table[temp[n]]; //顯示對應(yīng)的數(shù)字 switch(n) { case 0: LSC=0; LSB=1; LSA=1; break; case 1: LSC=0; LSB=1; LSA=0; break; cas

46、e 2: LSC=0; LSB=0; LSA=1; break; case 3: LSC=0; LSB=0; LSA=0;; break; case 4: LSC=1; LSB=0; LSA=0; break; case 5: LSC=1; LSB=0; LSA=1; break; case 6: LSC=1; LSB=1; LSA=0; break; case 7: LSC=1; LSB=1; LSA=1;; break; } delay(1000); //此處是數(shù)碼管掃描頻率,若此數(shù)值太小,則數(shù)碼管的余輝效應(yīng)將會(huì)很明顯 } } main(

47、) { while(1) { ReadTemperature(); //讀第一個(gè)DS18B20的溫度 ReadTemperature1(); //讀第二個(gè)DS18B20的溫度 KEY=key_scan(); //按鍵掃描 if(KEY) key_action(KEY); //按鍵處理 display_transaction(); //數(shù)碼管顯示數(shù)據(jù)處理 display_transaction1(); display(); //數(shù)碼管掃描 check_alarm(); //檢測報(bào)警 che

48、ck1_alarm(); } } 附件二:完整的器件清單及硬件電路圖 Bill Of Materials For .DSN Design Title : .DSN Author : Revision : Design Created : 2015630 Design Last Modified : 201573 Total Parts In Design : 17 2Resistors Quantity: References Value Ord

49、er Code 1 R9 4.7k H1K 1 R10 18 H1K 3Capacitors Quantity: References Value Order Code

50、 2 C1, C2 30pF Digikey 478-1088-6-ND 1 C3 100n Maplin VM87U 5Integrated Circuits Quantity: References Value Order Code 1

51、 U1 AT89C51 1 U2 74HC573 1 U3 74HC138 2 U5, U6 DS18B20 7Miscellaneous

52、Quantity: References Value Order Code 3 K1-K3 1 LS1 SOUNDER 2 RP1, RP2 RESPACK-8 1 X1 11.0592M 2015739:45:44 30

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!