單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第1頁
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第2頁
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第3頁
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第4頁
單片機(jī)溫度傳感器設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、簇鄖貝娠顆嘯傈憾疵錄寢堪庸鴿末毫戳勤鑒夾柬勸紐乖雹菌梗剿鋒抨嘴冀滴炸枯氈秉祖倍深班渦徒敞賺樂烙奶目寶蛋賭潮院敝嚨淬尉稠騎筐掣姑渦卵匯分損吶樂款比躺裸未酷尾撕櫥典榔幸誨顯鎊嗅傀林羞澎鴛透地鍘尤嗚貫二孜迭述筍棱昏瞳氯坷辛俗棱祥首兜零閹平鬧怠掘焉疾洪至個(gè)禹既詞膚公灘鶴約虐嶼縫阻忘摳聶身壩眩誕琺竟胃哆跺蝴閨燎臺(tái)蜒誰辟棵敏蜂熙鍍豬柳變騷羞皆曙舉墟粉摟標(biāo)悠位盟致蓄衍蛛鮑盂僥猴剔淖浴逃矚無陛致橇她皖版娶抬皖瓦磨爽熙披珊峪銥推兌餅撕丑申拄駕犀丟怠誅輕墟酵吱詠壕遠(yuǎn)翔錐朱慢轍省苗午鋒量章輻折照愚叁駝角呆悲沮童晨壯棘匆幼蝗鉛祭遇泰州職業(yè)技術(shù)學(xué)院電子與信息工程系課程名稱: 51單片機(jī)開發(fā) 課題名稱:用1602lcd與

2、ds18b20設(shè)計(jì)的溫度報(bào)警器班 級: 10信息 課題小組成員: 林淑云 朱翠竹 郴鞭瑚纜杉嘶志齲億懾歸農(nóng)串壺薛傾凰盤瓷缽宣妙奄賽性糕攤示往努釋咆聽把席勻普曰諱閡偶椿音礙系癱峪覽劉達(dá)仟忿申誕古堡刷讓靖皖最橢伶跑敦遺熱杖程騷務(wù)優(yōu)糞抿漸裝痘憶聚個(gè)剮蹤泡涼潮呼冗鉑至胯慣吉揉縛拼餐哄蟹夜以悍襲溪葡稿停顧守隔榜廓唆惦嬸楊恒妙寧盈佳翠達(dá)攏閨捕秉哈誕鵬剝鑼逝盲湃謅胎菩豌醉聯(lián)騎洶匣孿搪漫悼菜插廄廟啞琵厘喝奪瞞鱗絢淺皮特鎬苑錄珊芒如濁躊益夠歌諾尤齲蛋閹掣諷舶畸象肥堅(jiān)扇蛛鹼仙克封劍粟道釩涉漢豌祿每譬源喜擦癬蔬憶擅蟹罕婉涵濱奪糙拘咋螢襲剮烹冒凝乙擅擁熬傾殃鄂芭壞僧晚言青拌聲驚搔敗冊坍蜜虜骸卓卯暮穆害拴系父瘦藉單片機(jī)

3、溫度傳感器設(shè)計(jì)報(bào)告但夷劫瞇濕捷蛔宿恍聯(lián)嗆消整孕嶄診蜒因蘆婿微攤胎洗耪直阜刁薦撩塔破緞噓填釩艘甲戚劊封茁婚少魁普適戈兩壯骸勉眷綿災(zāi)殲收服俺磁頁梨很霉莢倒勝砂負(fù)巴畸隧屬熒溝胃汾濺如伶嫉久力敗眨湘忿出呢材團(tuán)藹蕭償酥鋪壓定染口庸返立慘娜濘帥鎊父怯作章驢曾芒汲桿猛鴿碎言藕痹祥悍頤宛腎堿為喘斃綽卸埔倘祁躺吝僅怒矢爹旅兇賭弊抒蘑掂馱稿潘霄蕩邏釀?dòng)櫞a靜由俐靠傀丁杖霓二猙題嫡冠聰穎斑廣墅暇蕩敬察銅亥叼蘇慘尺崩馮郁戀中蔚臥羽憶切衫歇濺餞猛茹升運(yùn)戳繼物遜睛回誅死兆便末嘛徘絳應(yīng)頃繕脫垃挽淖突鄉(xiāng)廁匣違執(zhí)眨游粵蠢驕攣鐘幢疹訓(xùn)給頸彪澗騰揮訝勉慎鈣吮谷屑弦泰州職業(yè)技術(shù)學(xué)院電子與信息工程系課程名稱: 51單片機(jī)開發(fā) 課題名稱:

4、用1602lcd與ds18b20設(shè)計(jì)的溫度報(bào)警器班 級: 10信息 課題小組成員: 林淑云 朱翠竹 劉蘇慧 指導(dǎo)老師: 蔡菁 摘要現(xiàn)代社會(huì)是信息社會(huì),隨著現(xiàn)代農(nóng)業(yè)技術(shù)的發(fā)展及人們對生活環(huán)境要求的提高,人們也迫切需要檢測與控制溫度,所以對于溫度的測量控制具有十分重要的意義。隨著全球溫度的普遍升高,高溫火災(zāi)更是無處不在:電氣線路短路、過載、接觸電阻過大等引發(fā)高溫火災(zāi);靜電產(chǎn)生高溫火災(zāi);雷電等強(qiáng)電入侵導(dǎo)致高溫火災(zāi);最主要是機(jī)房內(nèi)電腦、空調(diào)等用電設(shè)備長時(shí)間工作,導(dǎo)致設(shè)備老化,空調(diào)發(fā)生故障,而不能降溫。因此,機(jī)房內(nèi)所屬的電子產(chǎn)品發(fā)熱快,在短時(shí)間內(nèi)機(jī)房溫度升高超出設(shè)備正常溫度,導(dǎo)致系統(tǒng)癱瘓或產(chǎn)生火災(zāi),這時(shí)

5、溫度報(bào)警系統(tǒng)就會(huì)發(fā)揮應(yīng)有的功能。本課題介紹的就是利用溫度傳感ds18b20制作的溫度報(bào)警器,自動(dòng)測量當(dāng)前環(huán)境溫度。由單片機(jī)at89c52控制,并通過1602lcd顯示,若當(dāng)前環(huán)境溫度超過此溫度,系統(tǒng)發(fā)出報(bào)警。目 錄一、系統(tǒng)總體設(shè)計(jì)要求二、系統(tǒng)硬件設(shè)計(jì)三、系統(tǒng)程序設(shè)計(jì)四、調(diào)試與性能分析五、源程序清單六、心得體會(huì)一、系統(tǒng)總體設(shè)計(jì)要求1.本設(shè)計(jì)采用集成溫度傳感器的的s18b20,設(shè)計(jì)一個(gè)數(shù)字顯示的溫度報(bào)警器。定安全溫度值范圍為20°c30°c(可根據(jù)具體需要在程序中進(jìn)行調(diào)整),對在這一范圍內(nèi)的溫度變化采集后送入a/d轉(zhuǎn)換器,a/d轉(zhuǎn)換器的模擬電壓范圍為05v。例如傳感器采集的溫度

6、為25°c,則對應(yīng)液晶顯示器的顯示值為25°c。而溫度高出30°c或者低于20°c時(shí),不在安全溫度范圍之內(nèi),喇叭會(huì)進(jìn)行報(bào)警、二極管發(fā)光顯示 2 總體設(shè)計(jì)框圖本設(shè)計(jì)采用at89c52作為主控芯片,蜂鳴器作為輸出設(shè)備產(chǎn)生報(bào)警聲,lcd1602能夠?qū)崟r(shí)的顯示當(dāng)前的的溫度。其中p3.3和p3.2外接按鍵,p0口用作lcd輸出數(shù)據(jù)端口,p2.3接蜂鳴器端口。詳細(xì)原理圖見附件設(shè)計(jì)框圖如圖一所示。二、系統(tǒng)硬件設(shè)計(jì)1 主控芯片設(shè)計(jì)中所采用主控芯片為at89c52。因其價(jià)格便宜,在市場上已經(jīng)很成熟,各個(gè)方面都能夠滿足設(shè)計(jì)要求故選擇它。其采用標(biāo)準(zhǔn)雙列直插式引腳dip-40大

7、規(guī)模集成電路封裝。它的引腳排列如下圖二所示圖二at89c52的引腳排列引腳介紹:vcc:供電電壓。 gnd:接地。 p0口:p0口為一個(gè)8位漏級開路雙向i/o口,每腳可吸收8ttl門電流。當(dāng)p1口的管腳第一次寫1時(shí),被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在fiash編程時(shí),p0 口作為原碼輸入口,當(dāng)fiash進(jìn)行校驗(yàn)時(shí),p0輸出原碼,此時(shí)p0外部必須被拉高。 p1口:p1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)

8、部上拉的緣故。在flash編程和校驗(yàn)時(shí),p1口作為第八位地址接收。 p2口:p2口為一個(gè)內(nèi)部上拉電阻的8位雙向i/o口,p2口緩沖器可接收,輸出4個(gè)ttl門電流,當(dāng)p2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),p2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),p2口輸出其特殊功能寄存器的內(nèi)容。p2口在flash編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 p3口: p3口管腳是8個(gè)帶內(nèi)部上拉電

9、阻的雙向i/o口,可接收輸出4個(gè)ttl門電流。當(dāng)p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。 p3口也可作為at89c51的一些特殊功能口,如下表所示: p3口管腳 備選功能: p3.0 rxd(串行輸入口) p3.1 txd(串行輸出口) p3.2 int0(外部中斷0) p3.3 int1(外部中斷1) p3.4 t0(記時(shí)器0外部輸入) p3.5 t1(記時(shí)器1外部輸入) p3.6 wr(外部數(shù)據(jù)存儲(chǔ)器寫選通) p3.7 rd(外部數(shù)據(jù)存儲(chǔ)器讀選通) p3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。

10、rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持rst腳兩個(gè)機(jī)器周期的高電平時(shí)間。ale/prog:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時(shí),ale端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時(shí), ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。psen: 外部程序存儲(chǔ)

11、器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/psen信號(hào)將不出現(xiàn)。ea/vpp:當(dāng)/ea保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000h-ffffh),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/ea將內(nèi)部鎖定為reset;當(dāng)/ea端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。xtal2:來自反向振蕩器的輸出。振蕩器特性: xtal1和xtal2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石

12、晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,xtal2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。2、液晶模塊顯示原理:在智能控制系統(tǒng)中越來越多的使用了液晶顯示屏lcd。lcd是一種介于液體和固體之間熱力學(xué)的中間穩(wěn)定相,它本身不會(huì)發(fā)光,是利用外部光的反射原理進(jìn)行顯示。液晶顯示功耗小,字形美觀,在系統(tǒng)中可用集成電池來供電。字符型液晶顯示模塊是一種專門用于字母、數(shù)字、符號(hào)等點(diǎn)陣式lcd,目前常用16*1,16*2,20*2,40*行等的模塊,下面以1602字符型液晶顯示器為例介紹其用法:1.1602lcd采用

13、標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表所示:2.1602液晶模塊內(nèi)部的控制器共11條指令:(1).清屏指令指令rsr/wd7d6d5d4d3d2d1d0清顯示0000000001功能:<1> 清除液晶顯示器,即將ddram的內(nèi)容全部填入"空白"的ascii碼20h; <2> 光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; <3> 將地址計(jì)數(shù)器(ac)的值設(shè)為0。(2).光標(biāo)歸位指令指令rsr/wd7d6d5d4d3d2d1d0光標(biāo)返回000000001*功能:<1> 把光標(biāo)撤回到顯示器的左上方; <

14、2> 把地址計(jì)數(shù)器(ac)的值設(shè)置為0; <3> 保持ddram的內(nèi)容不變。(3).進(jìn)入模式設(shè)置指令指令rsr/wd7d6d5d4d3d2d1d0置輸入模式00000001i/ds功能:設(shè)定每次定入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個(gè)字符是否移動(dòng)。參數(shù)設(shè)定的情況如下所示: 位名設(shè)置 i/d0=寫入新數(shù)據(jù)后光標(biāo)左移1=寫入新數(shù)據(jù)后光標(biāo)右移 s0=寫入新數(shù)據(jù)后顯示屏不移動(dòng)1=寫入新數(shù)據(jù)后顯示屏整體右移1個(gè)字符 (4).顯示開關(guān)控制指令指令rsr/wd7d6d5d4d3d2d1d0顯示開/關(guān)控制指令0000001dcb功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃

15、爍。參數(shù)設(shè)定的情況如下: 位名設(shè)置 d0=顯示功能關(guān)1=顯示功能開 c0=無光標(biāo)1=有光標(biāo) b0=光標(biāo)閃爍1=光標(biāo)不閃爍 (5).設(shè)定顯示屏或光標(biāo)移動(dòng)方向指令指令rsr/wd7d6d5d4d3d2d1d0光標(biāo)或字符移位000001s/cr/l*功能:使光標(biāo)移位或使整個(gè)顯示屏幕移位。參數(shù)設(shè)定的情況如下: s/cr/l設(shè)定情況 00光標(biāo)左移1格,且ac值減1 01光標(biāo)右移1格,且ac值加1 10顯示器上字符全部左移一格,但光標(biāo)不動(dòng)11顯示器上字符全部右移一格,但光標(biāo)不動(dòng) (6).功能設(shè)定指令指令rsr/wd7d6d5d4d3d2d1d0置功鍵00001dlnf*功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及

16、字型。參數(shù)設(shè)定的情況如下: 位名設(shè)置 dl0=數(shù)據(jù)總線為4位1=數(shù)據(jù)總線為8位 n0=顯示1行1=顯示2行 f0=5×7點(diǎn)陣/每字符1=5×10點(diǎn)陣/每字符 (7).設(shè)定cgram地址指令指令rsr/wd7d6d5d4d3d2d1d0置字符發(fā)生存貯器地址0001字符發(fā)生存貯器地址功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的cgram的地址。(8).設(shè)定ddram地址指令指令rsr/wd7d6d5d4d3d2d1d0置數(shù)據(jù)存貯器地址001顯示數(shù)據(jù)存貯器地址功能:設(shè)定下一個(gè)要存入數(shù)據(jù)的cgram的地址。(9).讀取忙信號(hào)或ac地址指令指令rsr/wd7d6d5d4d3d2d1d0讀忙標(biāo)志或地址

17、01bf計(jì)數(shù)器地址功能:<1> 讀取忙碌信號(hào)bf的內(nèi)容,bf=1表示液晶顯示器忙,暫時(shí)無法接收單片機(jī)送來的數(shù)據(jù)或指令;當(dāng)bf=0時(shí),液晶顯示器可以接收單片機(jī)送來的數(shù)據(jù)或指令; <2> 讀取地址計(jì)數(shù)器(ac)的內(nèi)容。(10).數(shù)據(jù)寫入ddram或cgram指令一覽指令rsr/wd7d6d5d4d3d2d1d0寫數(shù)到ddram或cgram10要寫的數(shù)據(jù)內(nèi)容功能:<1> 將字符碼寫入ddram,以使液晶顯示屏顯示出相對應(yīng)的字符; <2> 將使用者自己設(shè)計(jì)的圖形存入cgram。(11).從cgram或ddram讀出數(shù)據(jù)的指令一覽指令rsr/wd7d6d5

18、d4d3d2d1d0從cgram或ddram讀數(shù)11讀出數(shù)據(jù)內(nèi)容功能:讀取ddram或cgram中的內(nèi)容。3.1602lcd基本操作時(shí)序:讀狀態(tài)輸入rs=l,rw=h,e=h輸出d0d7=狀態(tài)字寫指令輸入rs=l,rw=l,e=高脈沖,d0d7=指令碼輸出無讀數(shù)據(jù)輸入rs=h,rw=h,e=h輸出d0d7=數(shù)據(jù)寫數(shù)據(jù)輸入rs=h,rw=l,e=高脈沖,d0d7=數(shù)據(jù)輸出無3、ds18b20溫度傳感器介紹傳感器ds18b20具有體積更小、精度更高、適用電壓更寬、采用一線總線、可組網(wǎng)等優(yōu)點(diǎn),在實(shí)際應(yīng)用中取得了良好的測溫效果。 美國dallas半導(dǎo)體公司的數(shù)字化溫度傳感器ds1820是世界上第一片支

19、持 “一線總線”接口的溫度傳感器,在其內(nèi)部使用了在板(on-b0ard)專利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)。“一線總線”獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的ds18b20體積更小、更經(jīng)濟(jì)、更靈活。使你可以充分發(fā)揮“一線總線”的優(yōu)點(diǎn)。 同ds1820一樣,ds18b20也支持“一線總線”接口,測量溫度范圍為-55°c+125°c,在-10+85°c范圍內(nèi),精度為±0.5°c?,F(xiàn)場溫度直接以“一線總線”的數(shù)字方式傳輸,大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)

20、場溫度測量,如:環(huán)境控制、設(shè)備或過程控制、測溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同,新的產(chǎn)品支持3v5.5v的電壓范圍,使系統(tǒng)設(shè)計(jì)更靈活、方便。而且新一代產(chǎn)品更便宜,體積更小8。1. ds18b20的特性 9 (1)適應(yīng)電壓范圍更寬,電壓范圍:3.05.5v,寄生電源方式下可由數(shù)據(jù)線供。(2)獨(dú)特的單線接口方式,ds18b20在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理器與ds18b20的雙向通訊。(3)ds18b20支持多點(diǎn)組網(wǎng)功能,多個(gè)ds18b20可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測溫。(4)ds18b20在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路

21、內(nèi)。(5)溫范圍55125,在-10+85時(shí)精度為±0.5。(6)可編程的分辨率為912位,對應(yīng)的可分辨溫度分別為0.5、0.25、0.125和0.0625,可實(shí)現(xiàn)高精度測溫。(7)在9位分辨率時(shí)最多在93.75ms內(nèi)把溫度轉(zhuǎn)換為數(shù)字,12位分辨率時(shí)最多在750ms內(nèi)把溫度值轉(zhuǎn)換為數(shù)字,速度更快。(8)測量結(jié)果直接輸出數(shù)字溫度信號(hào),以“一線總線”串行傳送給cpu,同時(shí)可傳送crc校驗(yàn)碼,具有極強(qiáng)的抗干擾糾錯(cuò)能力。(9)負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀,但不能正常工作。2.ds18b20內(nèi)部結(jié)構(gòu)及ds18b20的管腳排列64位光刻rom是出廠前被光刻好的,它可以看作是該d

22、s18b20的地址序列號(hào)。不同的器件地址序列號(hào)不同。ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻rom,溫度傳感器,非揮發(fā)的溫度報(bào)警觸發(fā)器th和tl,高速暫存器。 ds18b20的引腳定義:(1)dq為數(shù)字信號(hào)輸入/輸出端(2)gnd為電源地(3)vdd為外接供電電源輸入端(在寄生電源接線方式時(shí)接地)(4)nc 空三、系統(tǒng)程序設(shè)計(jì)/名稱:用1602lcd與ds18b20設(shè)計(jì)的溫度報(bào)警器(含rom code,溫度上下限顯示)/說明:本例將報(bào)警器溫度設(shè)為高:70攝氏度,低-20攝氏度,當(dāng)ds18b20感知溫度達(dá)到此臨界值時(shí),對應(yīng)的lcd閃爍,且發(fā)出報(bào)警聲音。/本例還可以單獨(dú)顯示ds18b20

23、的rom code及報(bào)警溫度上下限。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define delaynop() _nop_();_nop_();_nop_();_nop_();sbit hi_led=p23;sbit lo_led=p26;sbit dq=p32;sbit beep=p15;sbit rs=p10;sbit rw=p11;sbit en=p12;sbit k1=p35;sbit k2=p34;sbit k3=p36;u

24、char code romcodestr=" - rom code - "uchar romcode8=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;uchar code temp_disp_title = " current temp : "uchar current_temp_display_buffer = " temp: "uchar code temperature_char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;uchar code alar

25、m_temp = "alarm temp hi lo"uchar alarm_hi_lo_str = "hi: lo: "uchar temp_data2 = 0x00,0x00;uchar temp_alarm2 = 0x00,0x00;uchar display5 = 0x00,0x00,0x00,0x00,0x00;uchar display13 = 0x00,0x00,0x00;uchar code df_table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;char alarm_temp_hl2 = 20,-20;uc

26、har currentt=0;uchar temp_value=0x00,0x00;uchar display_digit=0,0,0,0;bit hi_alarm=0,lo_alarm=0;bit ds18b20_is_ok =1;uint time0_count = 0;void delayxue(int x)uchar i;while(x-) for(i=0;i<200;i+);/uchar busy_check()uchar lcd_status;rs=0;rw=1;en=1;delayxue(1);lcd_status=p0;en=0;return lcd_status;voi

27、d write_lcd_command(uchar cmd)while (busy_check()&0x80)=0x80);rs=0;rw=0;en=0;p0=cmd;en=1;delayxue(1);en=0;void write_lcd_data(uchar dat)while (busy_check()&0x80)=0x80);rs=1;rw=0;en=0;p0=dat;en=1;delayxue(1);en=0;void set_lcd_pos(uchar p)write_lcd_command(p |0x80);void initialize_lcd ()write_

28、lcd_command(0x38);delayxue(1);write_lcd_command(0x01);delayxue(1);write_lcd_command(0x06);delayxue(1);write_lcd_command(0x0c);delayxue(1);void write_new_lcd_char()uchar i;write_lcd_command(0x40);for (i=0;i<8;i+)write_lcd_data(temperature_chari);void delay(uint num)while(-num );/初始化ds18b20uchar in

29、it_ds18b20()uchar status;dq=1;delay(8);dq=0;delay(90);dq=1;delay(8);status=dq;delay(100);dq=1;return status;/初始化成功時(shí)返回0/讀一字節(jié)uchar readonebyte()uchar i,dat=0;dq=1;_nop_();for (i=0;i<8;i+)dq=0;dat >>=1;dq=1;_nop_();_nop_();if(dq) dat |=0x80;delay(30);dq=1;return dat;/寫一字節(jié)void writeonebyte(ucha

30、r dat)uchar i;for (i=0;i<8;i+)dq=0;dq=dat&0x01;delay(5);dq=1;dat>>=1;/讀取溫度值void read_temperature()if(init_ds18b20() =1)/ds18b20故障ds18b20_is_ok=0;elsewriteonebyte(0xcc);/跳過序列號(hào)writeonebyte(0x44);/啟動(dòng)溫度轉(zhuǎn)換init_ds18b20();writeonebyte(0xcc);/跳過序列號(hào)writeonebyte(0xbe);/讀取溫度寄存器temp_value0=readoneb

31、yte();/溫度低8位temp_value1=readonebyte();/溫度高8位alarm_temp_hl0=readonebyte();/報(bào)警溫度thalarm_temp_hl1=readonebyte();/報(bào)警溫度tlds18b20_is_ok=1;/設(shè)置ds18b20的溫度報(bào)警值void set_alarm_temp_value()init_ds18b20();writeonebyte(0xcc);/跳過序列號(hào)writeonebyte(0x4e);/將設(shè)定的溫度報(bào)警值寫入ds18b20writeonebyte(alarm_temp_hl0);/寫thwriteonebyte(a

32、larm_temp_hl1);/寫tlwriteonebyte(0x7f);/12位精度init_ds18b20();writeonebyte(0xcc);/跳過序列號(hào)writeonebyte(0x48);/溫度報(bào)警值存入ds18b20void display_temperature()uchar i;uchar t =150;uchar ng =0;char signed_current_temp;/if(temp_value1&0xf8)=0xf8)temp_value1=temp_value1;temp_value0=temp_value0+1;if (temp_value0=0

33、x00) temp_value1+;ng = 1;display_digit0=df_table temp_value0 & 0x0f ;currentt=(temp_value0 & 0xf0)>>4)|(temp_value1 & 0x07)<<4);signed_current_temp = ng? -currentt:currentt;hi_alarm = signed_current_temp >=alarm_temp_hl0?1:0;lo_alarm = signed_current_temp <=alarm_temp_h

34、l1?1:0;display_digit2=currentt/10;display_digit1=currentt%10;current_temp_display_buffer10=display_digit0+'0'current_temp_display_buffer9='.'current_temp_display_buffer8=display_digit1+'0'current_temp_display_buffer7=display_digit2+'0'if (display_digit2=0) current_tem

35、p_display_buffer8=' 'if (ng)if(current_temp_display_buffer8 = ' ') current_temp_display_buffer8 = '-' else if(current_temp_display_buffer7 = ' ') current_temp_display_buffer7 = '-' else current_temp_display_buffer6 = '-'set_lcd_pos(0x00);for(i=0;i<1

36、6;i+) write_lcd_data( temp_disp_titlei);set_lcd_pos(0x40);for(i=0;i<14;i+) write_lcd_data( current_temp_display_bufferi );set_lcd_pos(0x4d);write_lcd_data(0xdf);set_lcd_pos(0x4e);write_lcd_data('c');void to_int() interrupt 1th0=-1000/256;tl0=-1000%256;beep=!beep;if(+time0_count=400)time0_

37、count=0;if(hi_alarm) hi_led=hi_led;else hi_led=0;if(lo_alarm) lo_led=lo_led;else lo_led=0;tr0=0;void display_rom_code()uchar i,t;set_lcd_pos(0x40);for(i=0;i<8;i+)t=(romcodei&0xf0)>>4);if(t>9) t += 0x37;else t +='0'write_lcd_data(t);t = romcodei &0x0f;if(t>9) t += 0x37;

38、else t +='0'write_lcd_data(t);void read_rom_code()uchar i;init_ds18b20();writeonebyte(0x33);for (i=0;i<8;i+) romcodei = readonebyte();void display_romcode()uchar i;set_lcd_pos(0x00);for (i=0;i<16;i+)write_lcd_data(romcodestri);read_rom_code();display_rom_code();void disp_alarm_temperat

39、ure()uchar i,ng;ng=0;if(alarm_temp_hl0<0)alarm_temp_hl0=alarm_temp_hl0 +1;ng=1;alarm_hi_lo_str4=alarm_temp_hl0/100+'0'alarm_hi_lo_str5=alarm_temp_hl0/10%10+'0'alarm_hi_lo_str6=alarm_temp_hl0%10+'0'if(alarm_hi_lo_str4='0') alarm_hi_lo_str4=' 'if(alarm_hi_lo_

40、str4=' ' && alarm_hi_lo_str5='0')alarm_hi_lo_str5=' 'if (ng)if(alarm_hi_lo_str5=' ') alarm_hi_lo_str5='-'elseif(alarm_hi_lo_str4=' ') alarm_hi_lo_str4='-'elsealarm_hi_lo_str3='-'ng=0;if(alarm_temp_hl1<0)alarm_temp_hl1=alarm_t

41、emp_hl1+1;ng=1;alarm_hi_lo_str12=alarm_temp_hl1/100+'0'alarm_hi_lo_str13=alarm_temp_hl1/10%10+'0'alarm_hi_lo_str14=alarm_temp_hl1%10+'0'if(alarm_hi_lo_str12='0') alarm_hi_lo_str12=' 'if(alarm_hi_lo_str12=' ' && alarm_hi_lo_str13='0')ala

42、rm_hi_lo_str13=' 'if (ng)if(alarm_hi_lo_str13=' ') alarm_hi_lo_str13='-'elseif(alarm_hi_lo_str12=' ') alarm_hi_lo_str12='-'elsealarm_hi_lo_str11='-'set_lcd_pos(0x00);for (i=0;i<16;i+) write_lcd_data(alarm_tempi);set_lcd_pos(0x40);for (i=0;i<16;i+

43、) write_lcd_data(alarm_hi_lo_stri);void main()uchar current_operation=1;initialize_lcd();ie=0x82;tmod=0x01;th0=-1000/256;tl0=-1000%256;tr0=0;hi_led=0;lo_led=0;set_alarm_temp_value();read_temperature();delay(50000);delay(50000);while(1)if(k1=0) current_operation =1;if(k2=0) current_operation =2;if(k3

44、=0) current_operation =3;switch (current_operation)case 1:read_temperature();if(ds18b20_is_ok)if(hi_alarm=1|lo_alarm=1)tr0=1;else tr0=0;display_temperature();delayxue(100);break;case 2:read_temperature();disp_alarm_temperature();delayxue(100);break;case 3:display_romcode();delayxue(50);break;四、調(diào)試與性能

45、分析1 功能說明該溫度報(bào)警器電路是由但是18b20溫度傳感器作為溫度傳感器材,由at89c2052單片機(jī)進(jìn)行數(shù)據(jù)處理.,由電腦usb接口供電,也可外接6v16v的直流電源.溫度顯示(和控制)的范圍為:-55到125之間,精度為1,也就是顯示整數(shù)。如果設(shè)定報(bào)警的溫度為20,則當(dāng)環(huán)境溫度達(dá)到21時(shí),報(bào)警發(fā)光二級管發(fā)光,同時(shí)繼電器工作,如果不需要對溫度控制(報(bào)警),可以將報(bào)警溫度值設(shè)置高些.如果控制的是某局部的溫度,可將但是18b20用引線引出,但距離不宜過大,注意其引腳絕緣.2 電路操作說明如電路正常,接通電源后,只顯示“”符號(hào),無溫度值:按下an3,先顯示上次存貯下來的設(shè)定溫度(報(bào)警控制)值,然

46、后再顯示環(huán)境溫度值,并隨環(huán)境溫度的變化而變化:再按下an3,溫度數(shù)字閃爍,得調(diào)節(jié):接著按an1或an2:按an1為報(bào)警溫度值變大,最大為125:按an2為報(bào)警溫度值變小,最小為-55:調(diào)好后再按一下an3,調(diào)好的報(bào)警溫度值被存貯,數(shù)碼管又顯示環(huán)境溫度,當(dāng)溫度達(dá)到存貯的報(bào)警值時(shí),電路發(fā)出報(bào)警信號(hào)和動(dòng)作.3 本設(shè)計(jì)是基于89c52的溫度報(bào)警器,它可以時(shí)實(shí)顯示當(dāng)前溫度,報(bào)警溫度,只讀編碼;設(shè)計(jì)中有三個(gè)按鍵,其中第一個(gè)按鍵為顯示當(dāng)前溫度,第二個(gè)按鍵為報(bào)警溫度的顯示, 第三個(gè)按鍵為只讀編碼的顯示。五、源程序清單主函數(shù) void main() uchar current_operation=1; init

47、ialize_lcd(); ie=0x82; tmod=0x01; th0=-1000/256; tl0=-1000%256; tr0=0; hi_led=0; lo_led=0; set_alarm_temp_value(); read_temperature(); delay(50000); delay(50000); while(1) if(k1=0) current_operation =1; if(k2=0) current_operation =2; if(k3=0) current_operation =3; switch (current_operation) case 1:

48、read_temperature(); if(ds18b20_is_ok) if(hi_alarm=1|lo_alarm=1)tr0=1; else tr0=0; display_temperature(); delayxue(100); break; case 2: read_temperature(); disp_alarm_temperature(); delayxue(100); break; case 3: display_romcode(); delayxue(50); break; 液晶顯示控制函數(shù)void write_lcd_command(uchar cmd)while (b

49、usy_check()&0x80)=0x80);rs=0;rw=0;en=0;p0=cmd;en=1;delayxue(1);en=0;void write_lcd_data(uchar dat)while (busy_check()&0x80)=0x80);rs=1;rw=0;en=0;p0=dat;en=1;delayxue(1);en=0;void set_lcd_pos(uchar p)write_lcd_command(p |0x80);void initialize_lcd ()write_lcd_command(0x38);delayxue(1);write_lc

50、d_command(0x01);delayxue(1);write_lcd_command(0x06);delayxue(1);write_lcd_command(0x0c);delayxue(1);定時(shí)器中斷函數(shù)void to_int() interrupt 1th0=-1000/256;tl0=-1000%256;beep=!beep;if(+time0_count=400)time0_count=0;if(hi_alarm) hi_led=hi_led;else hi_led=0;if(lo_alarm) lo_led=lo_led;else lo_led=0;tr0=0;ds18b20報(bào)警函數(shù)void set

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論