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

正文內(nèi)容

畢業(yè)設(shè)計(jì)--基于51單片機(jī)的家用電熱水器設(shè)計(jì)(文件)

 

【正文】 B20 寄生電源供電方式電路圖 , 見(jiàn) 圖 所示,在寄生電源供電方式下, DS18B20 從單線信號(hào)線上汲取能量:在信號(hào)線 DQ 處于高電平期間把能量?jī)?chǔ)存在內(nèi)部 電容里,在信號(hào)線處于低電平期間消耗電容上的電能工作,直到高電平到來(lái)再給寄生電源(電容)充電。并且工作電源 VCC 必須保證在 5V,當(dāng)電源電壓下降時(shí),寄生電源能夠汲取的能量也降低,會(huì)使溫度誤差變大。 DS18B20 外部 電源供電方式 DS18B20 的外部電源供電方式 見(jiàn)圖 所示, 在外部電源供電方式下,DS18B20 工作電源由 VDD 引腳接入,此時(shí) I/O 線不需要強(qiáng)上拉,不存在電源電流不足的問(wèn)題,可以保 證 轉(zhuǎn)換精度, 同時(shí)在總線上理論可以掛接任意多。 圖 設(shè)計(jì)中采用的 測(cè)溫電路 直接將 DS18B20 的 I/O 口接在單片機(jī)的 P2^2 上 ,這樣在硬件方面就可以進(jìn)行數(shù)據(jù)交流,從而達(dá)到溫度數(shù)據(jù)傳輸?shù)哪康摹? 圖 外部供電方式的多點(diǎn)測(cè)溫電路圖 20 第 3 章 系統(tǒng) 軟件設(shè)計(jì) 鍵盤輸入的程序 while(temp!=0xf0) { delay(5)。0xf0。 case 0xdd:num=1。 case 0x7d:num=3。0xf0。首先要初始化DS18B20 以下 為初始化程序。 //拉低約 800us, 符合協(xié)議要求的 480us 以上 while(i0) i。 } 然后延時(shí)等待,回應(yīng)。 //等待應(yīng)答信號(hào) while(~ds)??梢栽跍囟炔杉x取時(shí)調(diào)用。 i++。 //延時(shí)約 16us, 符合協(xié)議要求的至少延時(shí) 15us 以上 b=ds。 } uchar readbyte()//讀取一個(gè)字節(jié) { uint b。 while(b8) { a=readbit()。 } 以下為寫入命令程序。 bit bit2。a++) { bit2=orderamp。 b++,b++。b++)。b++)。 } } } 當(dāng)以上程序書寫完成后,準(zhǔn)備工作基本完成。 delay(1)。 } uint gettemp()//獲取溫度 { float tt。 dswait()。//讀取溫度命令 delay(2)。 temp=8。//,變大十倍且 四舍五入 return(temp)。使用 readbyte()讀取兩個(gè)字節(jié)的數(shù)據(jù),分 25 別賦予 geta、 getb 兩個(gè)字符型變量,再將 getb 賦予 temp( temp 是一個(gè)整型變量擁有兩個(gè)字節(jié)的容量),這樣 temp 的低 8 為就是 getb 中的值了。 主函數(shù)的分析 首先給出主函數(shù): void main() { TMOD=0x01。 ET0=1。aaa=0。num3=21。 a=gettemp()。 } } 這里的 aaa 用于控制是否確定輸入的一個(gè)數(shù)字是需要的數(shù)字, bbb 用于 標(biāo)記已經(jīng)輸入到了三個(gè) 數(shù)字的 第幾個(gè)數(shù)字 。 uint dda。 27 num5=dda%100/10。 dis[2]=num5。amp。 } temp=0xfb。 wei=1。 P0=0。 delay(3)。 if(aaa==1amp。 num1=b。 else dis[2]+=10。i++) { P0=0xff。// srtemp=_crol_(srtemp,1)。 duan=0。 29 duan=0。 num2=b。 srtemp=0xfe。 wei=1。 P0=0x00。 delay(1)。 } 30 aaa=0。 dis[3]=b。 srtemp=0xfe。 wei=1。 P0=0x00。 delay(1)。 } aaa=0。 dis[3]=num3。 for(i=1。 P0=srtemp。 duan=1。 duan=1。num=21。 } 32 } 首先 要清楚 a 是 DS18B20 芯片獲取的溫度, b 是 需要 輸入的溫度,也就是要求的水溫。這里顯示時(shí) 需要 考慮 DS18B20 采集的數(shù)據(jù)中的 各種情況,第一 :超過(guò)了 100 度。 if((dis[0]==0)amp。 if(a0)//負(fù)值 后面加個(gè)小數(shù)點(diǎn) dis[3]+=10。 ccc 的作用是防止出現(xiàn)什么都不輸入直接確認(rèn)給程序帶來(lái)的 bug,出現(xiàn)這種情況時(shí)系統(tǒng)不做其他的任何反應(yīng),保持在這時(shí)的輸入狀態(tài),直到用戶輸入了一個(gè)數(shù)字為止。這里要注意的是每次都要 將 aaa 清零,因?yàn)?aaa 為 1 時(shí) ,輸 33 入子函數(shù) uchar scanff()的返回值變?yōu)橐粋€(gè)使數(shù)碼管顯示一個(gè)下劃線的數(shù)值, aaa為 0 時(shí)鍵盤可以通過(guò) uchar scanff()向數(shù)碼管顯示 09 中的任何一個(gè)數(shù)值。 TL0=(6553646000)%256。 if(a=numyamp。num2!=21amp。 jiar=0。 } } 34 } 采用定時(shí)器 T0,定時(shí)器設(shè)定每 30ms 中斷一次,判斷輸入的數(shù)值與采集的數(shù)值之間的大小,如果前者較大 就使 P2^1 變?yōu)榈碗娖?,從而?MOC3041 啟動(dòng)并引起加熱。 ( 2) 可用鍵盤方便地設(shè)定水溫,并顯示設(shè)定的溫度。 成品圖片 開(kāi)發(fā)板等待輸入見(jiàn)圖 所示。溫度輸入完成并判定加熱 見(jiàn)圖 所示。 sbit ds=P2^2。 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0xbf,0x86, 0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0xff,0xef, 0x00,0x08,0x88}。j++)。 //拉低約 800us, 符合協(xié)議要求的 480us 以上 while(i0) i。 } void dswait() { unsigned int i。 while(i0) i。 i++。 //延時(shí)約 16us, 符合協(xié)議要求的至少延時(shí) 15us 以上 b=ds。 } uchar readbyte()//讀取一個(gè)字節(jié) { uint b。 while(b8) { a=readbit()。 } void writeor(uchar order)//寫入命令 { uint b。 for(a=0。 order=1。 for(b=0。 for(b=0。 b++。 delay(1)。 } uint gettemp()//獲取溫度 { float tt。 dswait()。//讀取溫度命令 delay(2)。 temp=8。//,變大十倍且 四舍五入 return(temp)。 numx=dda/1000。 dis[0]=numx。 dis[2]+=10。//如果百位和十位都為 0 不顯示 if(a0)//負(fù)值 后面加個(gè)小數(shù)點(diǎn) dis[3]+=10。i4。 P0=temp。 P0=table[dis[i]]。 P0=0x00。ccc!=21) bbb++。 dis[3]=num3。 for(i=1。 P0=srtemp。 duan=1。 duan=1。 case 1: dis[1]=num1。 if(dis[2]==21) dis[2]++。i4。//wein 打開(kāi) 后 是低電平亮 wei=0。 P0=table[dis[i]]。 P0=0x00。 case 2: dis[1]=num1。 if(dis[2]==21) dis[2]++。i4。//wein 打開(kāi)后 是低電平亮 wei=0。 P0=table[dis[i]]。 P0=0x00。 case 3: dis[1]=num1。 else dis[2]+=10。i++) 46 { P0=0xff。// srtemp=_crol_(srtemp,1)。 duan=0。 duan=0。 default:bbb=0。 temp=P3。 P3=0xfd。 while(temp!=0xf0) { temp=P3。 break。 break。//****0000 } } } P3=0xfb。 while(temp!=0xf0) { delay(5)。0xf0。 case 0xdb:num=5。 case 0x7b:num=7。0xf0。0xf0。 temp=tempamp。break。break。 temp=tempamp。 } return num。 EA=1。 num=21。num2=21。 changetemp()。 while(1) { uint a。bbb=0。 TR0=1。 TH0=(6553646000)/256。 } } } if(aaa==1) { ccc=num。break。break。 49 while(temp!=0xf0) { temp=P3。 P3=0xf7。 temp=P3。 } while(temp!=0xf0) { temp=P3。 case 0xbb:num=6。 switch(temp) { case 0xeb:num=4。 temp=P3。 temp=tempamp。 temp=tempamp。 break。 break。 temp=tempamp。0xf0。 } } uchar scanff() { uint temp。num=21。 duan=1。 duan=1。 P0=srtemp。 for(i=1。 dis[3]=num3。 } aaa=0。 delay(1)。 P0=0x00。 wei=1。 45 srtemp=0xfe。 dis[3]=b。 } aaa=0。 delay(1)。 P0=0x00。 wei=1。 srtemp=0xfe。 num2=b。 duan=0。 duan=0。// srtemp=_crol_(srtemp,1)。i++) { P0=0xff。 else dis[2]+=10。 num1=b。 if(aaa==1amp。 delay(3)。 P0=0。 wei=1。 } temp=0xfb。amp。 dis[2]=num5。 num5=dda%100/10。 uint dda。 tt=temp*。//讀取兩個(gè)字節(jié) getb=readbyte()。 writeor(0xcc)。 uchar geta,getb。// 跳過(guò)讀序號(hào)列號(hào)的操作 writeor(0x44)。 } } } void changetemp()//溫度轉(zhuǎn)變函數(shù) { dsstart()。b++)。b++)。 b++,b++。a++) { bit2=orderamp。 bit bit2。//將 readbit()的返回值付給 date,然后 date向后移一位 重復(fù) 8 次剛好 得到一個(gè)字節(jié)的數(shù)據(jù) b++。 b=0。 39 while(i0) i。 i++。 bit b。 //等待應(yīng)答信號(hào) while(~ds)。 //產(chǎn)生一個(gè)上升沿 , 進(jìn)入等待應(yīng)答狀態(tài) i=4。 ds=0。 while(i) { for(j=0。 uchar num,num1,num2,num3,numx,num4,num5,num6, aaa,bbb,ccc,zd。實(shí)物圖見(jiàn)圖 所示 37 圖 停止加熱狀態(tài) 附錄 整體程序代碼 include include include define uchar unsigned char defin
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1