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

正文內(nèi)容

基于51單片機(jī)及ds18b20溫度傳感器的數(shù)字溫度計(jì)程序-文庫(kù)吧

2024-09-30 15:27 本頁(yè)面


【正文】 //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸; } /***************************ds18b20 字節(jié)讀函數(shù) ************************/ uchar ds18b20_read() //DS18B20 字節(jié)讀取 { uchar i。 //定義一個(gè)局部變量 i(局部變量只在本函數(shù)中有效 ) uchar d = 0。 //定義一個(gè)局部變量 d DQ = 1。 //準(zhǔn)備讀; for(i=8。i0。i) //一位一位的讀,循環(huán) 8次 { d = 1。 //d 左移一位,低位先發(fā); DQ = 0。 _nop_()。_nop_()。_nop_()。 DQ = 1。 //必須寫(xiě) 1,否則讀出來(lái)的將是不預(yù)期的數(shù)據(jù); if(DQ) //在 12us 處讀取數(shù)據(jù),送給 d的最高位 d |= 0x80。 ds18b20_delayus(10)。 } return d。 //返回讀取的值 } /*************************ds18b20 字節(jié)寫(xiě)函數(shù) **************************/ void ds18b20_write(uchar d) // ds18b20字節(jié)寫(xiě) { uchar i。 for(i=8。i0。i) //一位一位的寫(xiě) { DQ=0。 _nop_()。 _nop_()。_nop_()。 DQ=damp。0x01。 //寫(xiě)數(shù)據(jù) ds18b20_delayus(5)。 DQ=1。 d = 1。 } } /***************************獲取溫度函數(shù) ****************************/ void get_temperature(bit f) { uchar a=0,b=0,c=0,d=0。 uint i。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。//向 DS18B20發(fā)跳過(guò)讀 ROM 命令 ds18b20_write(0x44)。//寫(xiě)啟動(dòng) DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部 RAM if(f==1) { //首次啟動(dòng) DS18B20進(jìn)行溫度轉(zhuǎn)換需要 500ms,若轉(zhuǎn)換時(shí)間不夠就出錯(cuò),讀出的是 85度的錯(cuò)誤值。 display1(1)。 //用開(kāi)機(jī)動(dòng)畫(huà)耗時(shí) } else ds18b20_delayms(1)。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向 DS18B20發(fā)跳過(guò)讀 ROM 命令 ds18b20_write(0xbe)。 //寫(xiě)讀內(nèi)部 RAM 中 9字節(jié)的內(nèi)容命令 a=ds18b20_read()。 //讀內(nèi)部 RAM ( LSB) b=ds18b20_read()。 //讀內(nèi)部 RAM ( MSB) if(f==1) //局部位變量 f=1時(shí)讀上下線報(bào)警溫度 { max=ds18b20_read()。 //讀內(nèi)部 RAM ( TH) min=ds18b20_read()。 //讀內(nèi)部 RAM ( Tl) } if((maxamp。0x80)==0x80) //若讀取的上限溫度的最高位(符號(hào)位)為‘ 1’表明是負(fù)溫度 智筆記 5 {f_max=1。max=(max0x80)。} //將上限溫度符號(hào)標(biāo)志位置‘ 1’表示負(fù)溫度,將上限溫度裝換成無(wú)符號(hào)數(shù)。 if((minamp。0x80)==0x80)//若讀取的下限溫度的最高位(符號(hào)位)為‘ 1’表明是負(fù)溫度 {f_min=1。min=(min0x80)。}//將下限溫度符號(hào)標(biāo)志位置‘ 1’表示負(fù)溫度,將下限溫度裝換成無(wú)符號(hào)數(shù)。 i=b。i=4。 if (i==0) { f=0。 //i為 0,表示讀取的溫度是正溫度 ,設(shè)立正溫度標(biāo)記 temp=((a4)|(b4))。 //整數(shù)部分 a=(aamp。0x0f)。 temp_d=a。 //小數(shù)部分 } else { f=1。 //i為 1,表示讀取的溫度是負(fù)溫度 ,設(shè)立負(fù)溫度標(biāo)記 a=~a+1。 //負(fù)數(shù)的小數(shù)部分取反加 1 b=~b。 //負(fù)數(shù)的整數(shù)部分取反 temp=((a4)|(b4))。 //整數(shù)部分 a=(aamp。0x0f)。 //小數(shù)部分 temp_d=a。 } } /*************************存儲(chǔ)極限溫度函數(shù) ***************************/ void store_t() { if(f_max==1) //若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù)(最高 1是負(fù), 0是正) max=max+0x80。 if(f_min==1) //若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號(hào)數(shù) min=min+0x80。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向 DS18B20發(fā)跳過(guò)讀 ROM 命令 ds18b20_write(0x4e)。 //向 DS18B20發(fā)寫(xiě)字節(jié)至?xí)捍嫫?2和 3( TH和 TL)命令 ds18b20_write(max)。 //向暫存器 TH(上限溫度暫存器)寫(xiě)溫度 ds18b20_write(min)。 //向暫存器 TL(下限溫度暫存器)寫(xiě)溫度 ds18b20_write(0xff)。 //向配置寄存器寫(xiě)命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向 DS18B20發(fā)跳過(guò)讀 ROM 命令 ds18b20_write(0x48)。 //向 DS18B20發(fā)將 RAM 中 3字節(jié)的內(nèi)容寫(xiě)入 EEPROM } //DS18B20上電后會(huì)自動(dòng)將 EEPROM 中的上下限溫度拷貝到 TH、 TL暫存器 /**************************溫度超限報(bào)警函數(shù) *************************/ void alarm() { //若上限值是正值 if(f_max==0) { if(f_min==0) //若下限值是正值 { if(f==0) //若測(cè)量值是正值 { if((temp+temp_d*)=min||(temp+temp_d*)=max) {w=1。TR1=1。} //當(dāng)測(cè)量值小于最小值或大于最大值時(shí)報(bào)警 if((temp+temp_d*)maxamp。amp。(temp+temp_d*)min) {w=0。} //當(dāng)測(cè)量值大于最小值且小于最大值時(shí)不報(bào)警 } if(f==1){w=1。TR1=1。} //若測(cè)量值是負(fù)值時(shí)報(bào)警 } if(f_min==1) //若下限值是負(fù)值 { if(f==0) //若測(cè)量值是正值 智筆記 6 { if((temp+temp_d*)=max)//當(dāng)測(cè)量值大于最大值時(shí)報(bào)警 {w=1。TR1=1。} if((temp+temp_d*)max )//當(dāng)測(cè)量值小于最大值時(shí)不報(bào)警 {w=0。} } if(f==1) //
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1