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

正文內(nèi)容

基于ds18b20的溫度顯示與報(bào)警系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-資料下載頁(yè)

2025-07-02 01:59本頁(yè)面

【導(dǎo)讀】單片機(jī)來(lái)對(duì)這些被控參數(shù)進(jìn)行控制已成為當(dāng)今的主流。DS18B20具有性能穩(wěn)定、靈敏度高、抗干擾能力強(qiáng)、使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于冰箱、空調(diào)器、糧倉(cāng)等日常生活中溫度的測(cè)量和控制。文采用51單片機(jī)來(lái)實(shí)現(xiàn)對(duì)溫度的測(cè)量和報(bào)警。它的主要組成部分有:。它可以實(shí)時(shí)地檢測(cè)和顯示溫度,可以設(shè)

  

【正文】 y()。 sda=CY。 delay()。 scl=1。 delay()。 } scl=0。 delay()。 sda=1。 delay()。 } /***********從 EEPROM 讀一個(gè)字節(jié) ***********/ uchar read_byte() { uchar i,k。 scl=0。 delay()。 sda=1。 delay()。 for(i=0。i8。i++) { scl=1。 delay()。 k=(k1)|sda。 scl=0。 delay()。 } return k。 } 43 /***********向 EEPROM 指定地址寫一個(gè)字節(jié) ***********/ void write_add(uchar address,uchar date) { start()。 write_byte(0xa0)。 respons()。 write_byte(address)。 respons()。 write_byte(date)。 respons()。 stop()。 } /***********從 EEPROM 指定地址讀一個(gè)字節(jié) ***********/ uchar read_add(uchar address) { uchar date。 start()。 write_byte(0xa0)。 respons()。 write_byte(address)。 respons()。 start()。 write_byte(0xa1)。 respons()。 date=read_byte()。 stop()。 return date。 } /***********顯示程序 ***********/ void dis_temp(uint t) { uchar i。 i=t/100。 P0=table[i]。 P1=0x04。 delayms(5)。 i=(t%100)/10。 44 P0=tabler[i]。 P1=0x02。 delayms(5)。 i=t%10。 P0=table[i]。 P1=0x01。 delayms(7)。 } /***********18B20 復(fù)位,初始化函數(shù) ***********/ void dsreset(void) { uint i。 ds=0。 i=103。 while(i0)i。 ds=1。 i=4。 while(i0)i。 } /***********讀 1位函數(shù) ***********/ bit tempreadbit(void) { uint i。 bit dat。 ds=0。i++。 //i++ 起延時(shí)作用 ds=1。i++。i++。 dat=ds。 i=8。while(i0)i。 return (dat)。 } /***********讀 1個(gè)字節(jié) ***********/ uchar tempread(void) { uchar c,d,dat。 45 dat=0。 for(c=1。c=8。c++) { d=tempreadbit()。 dat=(d7)|(dat1)。 //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在 DAT 里 } return(dat)。 } /***********向 18B20 寫一個(gè)字節(jié)數(shù)據(jù) ***********/ void tempwritebyte(uchar dat) { uint i。 uchar j。 bit testb。 for(j=1。j=8。j++) { testb=datamp。0x01。 dat=dat1。 if(testb) //寫 1 { ds=0。 i++。i++。 ds=1。 i=8。while(i0)i。 } else { ds=0。 //寫 0 i=8。while(i0)i。 ds=1。 i++。i++。 } } } /***********DS18B20 開始獲取溫度并轉(zhuǎn)換 ***********/ void tempchange() { 46 TR0=0。 dsreset()。 dis_temp(temp)。 tempwritebyte(0xcc)。 // 寫跳過(guò)讀 ROM 指令 tempwritebyte(0x44)。 // 寫溫度轉(zhuǎn)換指令 } /***********讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù) ***********/ uint get_temp() { uchar a,b。 TR0=0。 tempchange()。 //溫度轉(zhuǎn)換 dsreset()。 delayms(1)。 tempwritebyte(0xcc)。 tempwritebyte(0xbe)。 a=tempread()。 //讀低 8 位 b=tempread()。 //讀高 8 位 temp=b。 temp=8。 //兩個(gè)字節(jié)組合為 1 個(gè)字 temp=temp|a。 f_temp=temp*。 //溫度在寄存器中為 12位 分辨率位 176。 f_temp=f_temp+。 //加 是四舍五入 temp=f_temp*10。 //乘以 10 表示小數(shù)點(diǎn)后面只取 1 位 return temp。 //temp 是整型 } /***********報(bào)警和控制函數(shù) ***********/ void deal() { uint i=temp/10。 //把擴(kuò)大了 10 倍的溫度值縮小 10 倍從而與上下限溫度對(duì)比 if(ixia) //溫度低于下限將報(bào)警并加熱 { TR0=1。 //啟動(dòng)定時(shí)器 0 buz=5。 //蜂鳴器低頻 feng=1。 //關(guān)風(fēng)扇 warm=1。 //點(diǎn)亮 LED } 47 else if((i(xia+1))amp。amp。(i(xia+3))) { TR0=0。buzzer=1。 //關(guān)閉定時(shí)器 0 feng=1。 //關(guān)風(fēng)扇 warm=1。 //點(diǎn)亮 LED } else if(i(shang3)amp。amp。(i(shang1))) { TR0=0。buzzer=1。 //關(guān)閉定時(shí)器 0 feng=0。 //開風(fēng)扇 warm=0。 //關(guān) LED } else if(ishang) { TR0=1。 //開啟定時(shí)器 0 buz=1。 //蜂鳴器高頻 feng=0。 //開風(fēng)扇 warm=0。 //關(guān) LED } else if((i(xia+3))amp。amp。(i(shang3))) { TR0=0。buzzer=1。 //關(guān)閉定時(shí)器 0 feng=1。 //關(guān)風(fēng)扇 warm=0。 //關(guān) LED } } /***********上下線溫度設(shè)置 ***********/ void set() { uint i=10。 key1++。 while(i)dis_temp(xia*10)。 //首先顯示下限溫度,用于延時(shí) while(key13) { if(key1==1) //轉(zhuǎn)換成下限溫度模式 { dis_temp(xia*10)。 //顯示下限溫度 if(KEY1==0) //同時(shí)掃描 KEY1, KEY2, KEY3 鍵 { key1++。 i=10。 48 while(i)dis_temp(xia*10)。 //去抖延時(shí) } if(KEY2==0) //如果按 KEY2 則下限溫度加 1 { xia++。 i=10。 while(i)dis_temp(xia*10)。 //用顯示下限溫度延時(shí)去抖 } if(KEY3==0) //如果按 KEY3 則下限溫度減 1 { xia。 i=10。 while(i)dis_temp(xia*10) } } if(key1==2) { dis_temp(shang*10) if(KEY1==0) { key1++。 i=10。 while(i)dis_temp(shang*10)。 //去抖延時(shí) } if(KEY2==0) { shang++。 i=10。 while(i)dis_temp(shang*10)。 } if(KEY3==0) { shang。 i=10。 while(i)dis_temp(shang*10)。 } } } is_temp(temp)。 if(key12)key1=0。 //如果按鍵值大于 2 則調(diào)零 write_add(2,xia)。 //將上下線溫度儲(chǔ)存起來(lái) dis_temp(temp)。 //利用溫度顯示延時(shí) write_add(4,shang)。 } 49 /***********主程序 ***********/ void main() { uint j。 //計(jì)數(shù)器 xia=read_add(2)。 delayms(10)。 shang=read_add(4)。 //讀出保存的上限數(shù)據(jù) TMOD=0x01。 //定時(shí)器工作在方式 1 ET0=1。 EA=1。 TH0=(65536250)/256。 TL0=(65536250)%256。 TR0=0。 while(1) { tempchange()。 //溫度轉(zhuǎn)換 dis_temp(temp)。 //顯示溫度 dis_temp(temp)。 get_temp()。 //獲取溫度 dis_temp(temp)。 dis_temp(temp)。 deal()。 //溫度處理 j=50。 while(j) { dis_temp(temp)。 if(KEY1==0)set()。 //鍵盤掃描 } } }
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1