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

正文內(nèi)容

基于51單片機(jī)及ds18b20溫度傳感器的數(shù)字溫度計設(shè)計(編輯修改稿)

2024-07-21 16:40 本頁面
 

【文章內(nèi)容簡介】 igned int //變量類型宏定義,用uint表示無符號整形(16位)define uchar unsigned char //變量類型宏定義,用uchar表示無符號字符型(8位)sbit DQ= P2^3。 //可位尋址變量定義,sbit beer=P1^0。 //sbit led=P1^1。 //uchar temp=0。 //測量溫度的整數(shù)部分uchar temp_d=0。 //測量溫度的小數(shù)部bit f=0。 //測量溫度的標(biāo)志位,0’表示“正溫度”‘1’表示“負(fù)溫度”)bit f_max=0。 //上限溫度的標(biāo)志位‘0’表示“正溫度”‘1’表示“負(fù)溫度”)bit f_min=0。 //下限溫度的標(biāo)志位‘0’表示“正溫度”、‘1’表示“負(fù)溫度”)bit w=0。 //報警標(biāo)志位‘1’啟動報警‘0’關(guān)閉報警)/*****************************延時子函數(shù)******************************/void ds18b20_delayus(uint t) //延時幾μs{ while(t)。}void ds18b20_delayms(uint t) //延時1ms左右{ uint i,j。 for(i=t。i0。i) for(j=120。j0。j)。}/**************************ds18b20初始化函數(shù)*************************/void ds18b20_init() // DS18B20初始化{ DQ=1。 //拉高數(shù)據(jù)線 DQ=0。 //控制器向DS18B20發(fā)低電平脈沖 ds18b20_delayus(30)。 //延時480μs左右 DQ=1。 //控制器拉高總線, while(DQ)。 //等待DS18B20拉低總線 ds18b20_delayus(20)。 //延時,等待上拉電阻拉高總線 DQ=1。 //拉高數(shù)據(jù)線,準(zhǔn)備數(shù)據(jù)傳輸;}/***************************ds18b20字節(jié)讀函數(shù)************************/uchar ds18b20_read() //DS18B20 字節(jié)讀取{ uchar i。 //定義一個局部變量i(局部變量只在本函數(shù)中有效) uchar d = 0。 //定義一個局部變量d DQ = 1。 //準(zhǔn)備讀; for(i=8。i0。i) //一位一位的讀,循環(huán)8次 { d = 1。 //d左移一位,低位先發(fā); DQ = 0。 _nop_()。_nop_()。_nop_()。 DQ = 1。 //必須寫1,否則讀出來的將是不預(yù)期的數(shù)據(jù); if(DQ) //在12us處讀取數(shù)據(jù),送給d的最高位 d |= 0x80。 ds18b20_delayus(10)。 } return d。 //返回讀取的值}/*************************ds18b20字節(jié)寫函數(shù)**************************/void ds18b20_write(uchar d) // ds18b20字節(jié)寫{ uchar i。 for(i=8。i0。i) //一位一位的寫 { DQ=0。 _nop_()。 _nop_()。_nop_()。 DQ=damp。0x01。 //寫數(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ā)跳過讀ROM命令 ds18b20_write(0x44)。//寫啟動DS18B20進(jìn)行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部RAM if(f==1) { //首次啟動DS18B20進(jìn)行溫度轉(zhuǎn)換需要500ms,若轉(zhuǎn)換時間不夠就出錯,讀出的是85度的錯誤值。 display1(1)。 //用開機(jī)動畫耗時 } else ds18b20_delayms(1)。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向DS18B20發(fā)跳過讀ROM命令 ds18b20_write(0xbe)。 //寫讀內(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時讀上下線報警溫度 { max=ds18b20_read()。 //讀內(nèi)部RAM (TH) min=ds18b20_read()。 //讀內(nèi)部RAM (Tl) } if((maxamp。0x80)==0x80) //若讀取的上限溫度的最高位(符號位)為‘1’表明是負(fù)溫度 {f_max=1。max=(max0x80)。} //將上限溫度符號標(biāo)志位置‘1’表示負(fù)溫度,將上限溫度裝換成無符號數(shù)。 if((minamp。0x80)==0x80)//若讀取的下限溫度的最高位(符號位)為‘1’表明是負(fù)溫度 {f_min=1。min=(min0x80)。}//將下限溫度符號標(biāo)志位置‘1’表示負(fù)溫度,將下限溫度裝換成無符號數(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。 }}/*************************存儲極限溫度函數(shù)***************************/ void store_t() { if(f_max==1) //若上限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù)(最高1是負(fù),0是正) max=max+0x80。 if(f_min==1) //若下限溫度為負(fù),將上限溫度轉(zhuǎn)換成有符號數(shù) min=min+0x80。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向DS18B20發(fā)跳過讀ROM命令 ds18b20_write(0x4e)。 //向DS18B20發(fā)寫字節(jié)至?xí)捍嫫?和3(TH和TL)命令 ds18b20_write(max)。 //向暫存器TH(上限溫度暫存器)寫溫度 ds18b20_write(min)。 //向暫存器TL(下限溫度暫存器)寫溫度 ds18b20_write(0xff)。 //向配置寄存器寫命令,進(jìn)行溫度值分辨率設(shè)置 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向DS18B20發(fā)跳過讀ROM命令 ds18b20_write(0x48)。 //向DS18B20發(fā)將RAM中3字節(jié)的內(nèi)容寫入EEPROM } //DS18B20上電后會自動將EEPROM中的上下限溫度拷貝到TH、TL暫存器/**************************溫度超限報警函數(shù)*************************/ void alarm() { //若上限值是正值 if(f_max==0) { if(f_min==0) //若下限值是正值 { if(f==0) //若測量值是正值 { if((temp+temp_d*)=min||(temp+temp_d*)=max) {w=1。TR1=1。} //當(dāng)測量值小于最小值或大于最大值時報警 if((temp+temp_d*)maxamp。amp。(temp+temp_d*)min) {w=0。} //當(dāng)測量值大于最小值且小于最大值時不報警 } if(f==1){w=1。TR1=1。} //若測量值是負(fù)值時報警 } if(f_min==1) //若下限值是負(fù)值 { if(f==0) //若測量值是正值 { if((temp+temp_d*)=max)//當(dāng)測量值大于最大值時報警 {w=1。TR1=1。} if((temp+temp_d*)max )//當(dāng)測量值小于最大值時不報警 {w=0。} } if(f==1) //若測量值是負(fù)值 { if((temp+temp_d*)=min)//當(dāng)測量值大于最小值時報警 {w=1。TR1=1。} if((temp+temp_d*)min)//當(dāng)測量值小于最小值時不報警 {w=0。} } } } if(f_max==1) //若下限值是負(fù)值 { if(f_min==1) //若下限值是負(fù)值 { if(f==1) //若測量值是負(fù)值 { if((temp+temp_d*)=max||(temp+temp_d*)=min) {w=1。TR1=1。} //當(dāng)測量值小于最大值或大于最小值時報警 if((temp+temp_d*)minamp。amp。(temp+temp_d*)max) {w=0。} //當(dāng)測量值小于最小值且大于最大值時不報警 } if(f==0){w=1。TR1=1。} //若測量值是正值時報警 } }
點(diǎn)擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1