freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)--基于51單片機(jī)的家用電熱水器設(shè)計(jì)(編輯修改稿)

2025-02-13 00:31 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 留 6 保留 7 CRC 校驗(yàn)值 8 根據(jù) DS18B20 的通訊協(xié)議,主機(jī)(單片機(jī))控制 DS18B20 完成溫度轉(zhuǎn)換必須經(jīng) 過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì) DS18B20 進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條 ROM 指令,最后發(fā)送 RAM 指令,這樣才能對(duì) DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主 CPU 將數(shù)據(jù)線下拉 500 微秒,然后釋放,當(dāng)DS18B20 收到信號(hào)后等待 16~ 60 微秒左右,后發(fā)出 60~ 240 微秒的存在低脈沖,主 CPU 收到此信號(hào)表示復(fù)位成功。 ROM 指令表見(jiàn)表 所示, RAM指令表見(jiàn)表 所示。 15 表 ROM 指令表 指 令 約定代碼 功 能 讀 ROM 33H 讀 DS1820 溫度傳感器 ROM 中的編碼(即 64 位地址) 符 合 ROM 55H 發(fā)出此命令之后,接著發(fā)出 64 位 ROM 編碼,訪問(wèn)單總線上與該編碼相對(duì)應(yīng)的 DS1820 使之作出響應(yīng),為下一步對(duì)該 DS1820 的讀寫(xiě)作準(zhǔn)備。 搜索 ROM 0FOH 用于確定掛接在同一總線上 DS1820 的個(gè)數(shù)和識(shí)別 64 位 ROM 地址。為操作各器件作好準(zhǔn)備。 跳過(guò) ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS1820 發(fā)溫度變換命令。適用于單片工作。 警告搜索命令 0ECH 執(zhí)行后只有溫度超過(guò)設(shè)定值上限或下限的片子才做出響應(yīng)。 表 RAM 指令表 指 令 約定代碼 功 能 溫度變換 44H 啟動(dòng) DS1820 進(jìn)行溫度轉(zhuǎn)換, 12 位轉(zhuǎn)換時(shí)最長(zhǎng)為 750ms( 9位為 )。結(jié)果存入內(nèi)部 9 字節(jié) RAM 中。 讀暫存器 0BEH 讀內(nèi)部 RAM 中 9 字節(jié)的內(nèi)容 寫(xiě)暫存器 4EH 發(fā)出向內(nèi)部 RAM 的 4 字節(jié)寫(xiě)上、下限溫度數(shù)據(jù)命令,緊跟該命令之后,是傳送兩字節(jié)的數(shù)據(jù)。 復(fù)制暫存器 48H 將 RAM 中第 3 、 4 字節(jié)的內(nèi)容復(fù)制到 EEPROM 中。 重調(diào) EEPROM 0B8H 將 EEPROM 中內(nèi)容恢復(fù)到 RAM 中的第 3 、 4 字節(jié)。 讀供電方式 0B4H 讀 DS1820 的供電模式。寄生供電時(shí) DS1820 發(fā)送 “ 0 ” ,外接電源供電 DS1820 發(fā)送 “ 1 ” 。 DS18B20 寄生電源供電方式 DS18B20 測(cè)溫系統(tǒng)具有測(cè)溫系統(tǒng)簡(jiǎn)單、測(cè)溫精度高、連接方便、占用口線少等優(yōu)點(diǎn)。下面就是 DS18B20 幾個(gè)不同應(yīng)用方式下的 測(cè)溫電路圖: 16 DS18B20 寄生電源供電方式電路圖 , 見(jiàn) 圖 所示,在寄生電源供電方式下, DS18B20 從單線信號(hào)線上汲取能量:在信號(hào)線 DQ 處于高電平期間把能量?jī)?chǔ)存在內(nèi)部電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,直到高電平到 來(lái)再給寄生電源(電容)充電。 獨(dú)特的寄生電源方式有三個(gè)好處: 1. 進(jìn)行遠(yuǎn)距離測(cè)溫時(shí),無(wú)需本地電源 ; 2. 可以在沒(méi)有常規(guī)電源的條件下讀取 ROM; 3. 電路更加簡(jiǎn)潔,僅用一根 I/O 口實(shí)現(xiàn)測(cè)溫 。 要想使 DS18B20 進(jìn)行精確的溫度轉(zhuǎn)換, I/O 線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由于每個(gè) DS18B20 在溫度轉(zhuǎn)換期間工作電流達(dá)到 1mA,當(dāng)幾個(gè)溫度傳感器掛在同一根 I/O 線上進(jìn)行多點(diǎn)測(cè)溫時(shí),只靠 上拉電阻就無(wú)法提供足夠的能量,會(huì)造成無(wú)法轉(zhuǎn)換溫度或溫度誤差極大。 因此, 這種 電 路只適應(yīng)于單一溫度傳感器測(cè)溫情況下使用,不適宜采用供電系統(tǒng)中。并且工作電源 VCC 必須保證在 5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。 圖 DS18B20 寄生電源供電方式 DS18B20 改進(jìn)的 寄生電源供電方式 DS18B20 寄生電源強(qiáng)上拉供電方式電路圖 , 改進(jìn) 的寄生電源供電方式見(jiàn) 圖 所示,為了使 DS18B20 在動(dòng)態(tài)轉(zhuǎn)換周期中獲得足夠的電流供應(yīng),當(dāng)進(jìn)行溫度轉(zhuǎn)換或拷貝到 E2 存儲(chǔ)器操作時(shí),用 MOSFET 把 I/O 線直接拉到VCC 就可提供足夠的電流,在發(fā)出任何涉及到拷貝到 E2 存儲(chǔ)器或啟動(dòng)溫度轉(zhuǎn)換的指令后,必須在最多 10μS 內(nèi)把 I/O 線轉(zhuǎn)換到強(qiáng)上拉狀態(tài)。在強(qiáng)上拉 17 方式下可以解決電流供應(yīng)不走的問(wèn)題,因此也適合于多點(diǎn)測(cè)溫應(yīng)用,缺點(diǎn)就是要多占用一根 I/O 口線進(jìn)行強(qiáng)上拉切換。 圖 改進(jìn)的寄生電源供電方式 注意:在 見(jiàn) 圖 所示、見(jiàn) 圖 所示 寄生電源供電方式中, DS18B20的 VDD 引腳必須接地 。 DS18B20 外部 電源供電方式 DS18B20 的外部電源供電方式 見(jiàn)圖 所示, 在外部電源供電方式下,DS18B20 工作電源由 VDD 引腳接入,此時(shí) I/O 線不需要強(qiáng)上拉,不存在電源電流不足的問(wèn)題,可以保證 轉(zhuǎn)換精度, 同時(shí)在總線上理論可以掛接任意多。 DS18B20 傳感器 ,組成多點(diǎn)測(cè)溫系統(tǒng)。注意:在外部供電的方式下,DS18B20 的 GND 引腳不能懸空 , 否則不能轉(zhuǎn)換溫度,讀取的溫度總是 85℃ 。 18 圖 外部供電方式單點(diǎn)測(cè)溫電路 在本次設(shè)計(jì)中 采用外部電源供電方式 , 連接方法 見(jiàn)圖 所示。 圖 設(shè)計(jì)中采用的 測(cè)溫電路 直接將 DS18B20 的 I/O 口接在單片機(jī)的 P2^2 上 ,這樣在硬件方面就可以進(jìn)行數(shù)據(jù)交流,從而達(dá)到溫度數(shù)據(jù)傳輸?shù)哪康摹? DS18B20 寄生電源供電方式 外部供電方式的多點(diǎn)測(cè)溫電路圖見(jiàn)圖 所示, 外部電源供電方式是DS18B20 最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡(jiǎn)單,可以開(kāi)發(fā)出穩(wěn)定可靠的多點(diǎn)溫度監(jiān)控系統(tǒng)。站長(zhǎng)推薦大家在開(kāi)發(fā)中使 用外部電源供電方式,畢竟比寄生電源方式只多接一根 VCC 引線。在外接電源方式下,可以充分發(fā)揮 DS18B20 寬電源電壓范圍的優(yōu)點(diǎn),即使電源 19 電壓 VCC 降到 3V 時(shí),依然能夠保證溫度量精度。 圖 外部供電方式的多點(diǎn)測(cè)溫電路圖 20 第 3 章 系統(tǒng) 軟件設(shè)計(jì) 鍵盤(pán)輸入的程序 while(temp!=0xf0) { delay(5)。 P3=0xfd。 temp=P3。 temp=tempamp。0xf0。 while(temp!=0xf0) { temp=P3。 switch(temp) { case 0xed:num=0。 break。 case 0xdd:num=1。 break。 case 0xbd:num=2。 break。 case 0x7d:num=3。 break。 } while(temp!=0xf0) { temp=P3。 temp=tempamp。0xf0。//****0000 } 21 } 在這里使用了 _crol_函數(shù),所以頭文件中要增加 include,這里包括去抖和松手檢測(cè)。 經(jīng)過(guò)檢測(cè)以后通過(guò)不同的 temp 值,使 num 被賦予相應(yīng)的數(shù)值,這樣 num 就是要輸入的一個(gè)數(shù)字。 DS18B20 溫度傳感器設(shè)計(jì) 連接好電路以后,就可以開(kāi) 始 設(shè)計(jì) DS18B20 的軟件 環(huán)節(jié) 。首先要初始化DS18B20 以下 為初始化程序。 void dsstart() { unsigned int i。 ds=0。 i=100。 //拉低約 800us, 符合協(xié)議要求的 480us 以上 while(i0) i。 ds=1。 //產(chǎn)生一個(gè)上升沿 , 進(jìn)入等待應(yīng)答狀態(tài) i=4。 while(i0) i。 } 然后延時(shí)等待,回應(yīng)。如以下子函數(shù)。 void dswait() { unsigned int i。 while(ds)。 //等待應(yīng)答信號(hào) while(~ds)。 //檢測(cè)到應(yīng)答脈沖 i=4。 while(i0) i。 } 以下兩個(gè)子函數(shù)為讀取的數(shù)據(jù)時(shí)用到的。可以在溫度采集讀取時(shí)調(diào)用。 bit readbit()//讀取一個(gè) bit 22 { unsigned int i。 bit b。 ds=0。 i++。 //延時(shí)約 8us, 符合協(xié)議要求至少保持 1us ds=1。 i++。 i++。 //延時(shí)約 16us, 符合協(xié)議要求的至少延時(shí) 15us 以上 b=ds。 i=8。 while(i0) i。 //延時(shí)約 64us, 符合讀時(shí)隙不低于 60us 要求 return b。 } uchar readbyte()//讀取一個(gè)字節(jié) { uint b。 uchar date,a。 b=0。date=0。 while(b8) { a=readbit()。 date=(a7)|(date1)。 b++。 } return date。 } 以下為寫(xiě)入命令程序。用于操控 DS18B20。 void writeor(uchar order)//寫(xiě)入命令 { uint b。 23 uchar a。 bit bit2。 b=0。 for(a=0。a8。a++) { bit2=orderamp。0x01。 order=1。 if(bit2)//寫(xiě)入 1 { ds=0。 b++,b++。 ds=1。 for(b=0。b8。b++)。 } else//0 { ds=0。 for(b=0。b8。b++)。 ds=1。 b++。b++。 } } } 當(dāng)以上程序書(shū)寫(xiě)完成后,準(zhǔn)備工作基本完成?,F(xiàn)在只要調(diào)用這些函數(shù),來(lái)操控 DS18B20 使其能夠按協(xié)議規(guī)定將溫度數(shù)據(jù)傳送給單片機(jī)。軟件實(shí)施方法如下: void changetemp()//溫度轉(zhuǎn)變函數(shù) { dsstart()。 dswait()。 delay(1)。 24 writeor(0xcc)。// 跳過(guò)讀序號(hào)列號(hào)的操作 writeor(0x44)。// 啟動(dòng)溫度轉(zhuǎn)換 delay(1)。 } uint gettemp()//獲取溫度 { float tt。 int temp。 uchar geta,getb。 dsstart()。 dswait()。 delay(1)。 writeor(0xcc)。 writeor(0xbe)。//讀取溫度命令 delay(2)。 geta=readbyte()。//讀取兩個(gè)字節(jié) getb=readbyte()。 temp=getb。 temp=8。//左移 8 位 temp=temp|geta。 tt=temp*。//將 temp 中的數(shù)轉(zhuǎn)化成實(shí)際的溫度值 temp=tt*10+(temp 0 ? : )。//,變大十倍且 四舍五入 return(temp)。 } 以上兩個(gè)程序流程為, changetemp()子函數(shù)中先初始化 DS18B20,芯片應(yīng)答以后寫(xiě)入兩個(gè)以字節(jié)為 一個(gè) 單位的命令, 0xcc 與 0x44 它 們的作用分別為跳過(guò)讀序號(hào)列號(hào)的操作和啟動(dòng)溫度轉(zhuǎn)換。然后溫度獲 取 gettemp()子函數(shù)完成。在gettemp()子函數(shù)中首先也是初始化 DS18B等待應(yīng)答,寫(xiě)入命令 0xcc 跳過(guò)讀序號(hào)列號(hào)的操作和 0xbe 讀取溫度命令。使用 readbyte()讀取兩個(gè)字節(jié)的數(shù)據(jù),分 25 別賦予 geta、 getb 兩個(gè)字符型變量,再將 getb 賦予 temp( temp 是一個(gè)整型變量擁有兩個(gè)字節(jié)的容量),這樣 temp 的低 8 為就是 getb 中的值了。 temp=8 的意義 是 temp=temp8, 所以 temp 的低 8 位將變成 temp 中的高 8 位,而 C 語(yǔ)言規(guī)定低 8 移位操作后不足的位數(shù)由 0 補(bǔ)上,這時(shí)的目的就是要將 geta 中的數(shù)據(jù)賦予 temp 中的低 8 位,只需要將 temp 按位與上 geta, geta 中位為 1 與 上 temp中低 8 位 中 的 0 就是 1,而 geta 中位為 0 與 temp 中低 8 位的 0 相與就是 0,這樣就將 geta 中的值賦給了 temp 的低 8 位。 現(xiàn)在已 獲得了 溫度的數(shù)據(jù), 還要通過(guò)軟件計(jì)算出具體傳送數(shù)據(jù)代表的溫度值,在前面已經(jīng)談到數(shù)據(jù)中的 1 就代表了 攝氏度。直接將 temp 值乘 就是需要的溫度 , temp 乘以 后的值 賦予 tt , temp=tt*10+(temp 0 ? : )這句話是先將 tt 由一個(gè)最高位為十位保留小數(shù)點(diǎn)后 一位的數(shù)擴(kuò)大了十倍,變?yōu)榱艘粋€(gè)最高位為百位的三位數(shù),而后面加上的十一個(gè)四舍五入的賦值語(yǔ)句,
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1