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

正文內(nèi)容

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

2025-09-16 15:27 本頁面


【正文】 //拉高數(shù)據(jù)線,準備數(shù)據(jù)傳輸; } /***************************ds18b20 字節(jié)讀函數(shù) ************************/ uchar ds18b20_read() //DS18B20 字節(jié)讀取 { uchar i。 //定義一個局部變量 i(局部變量只在本函數(shù)中有效 ) uchar d = 0。 //定義一個局部變量 d DQ = 1。 //準備讀; 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進行溫度轉(zhuǎn)換命令,轉(zhuǎn)換結(jié)果存入內(nèi)部 RAM if(f==1) { //首次啟動 DS18B20進行溫度轉(zhuǎn)換需要 500ms,若轉(zhuǎn)換時間不夠就出錯,讀出的是 85度的錯誤值。 display1(1)。 //用開機動畫耗時 } 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’表明是負溫度 智筆記 5 {f_max=1。max=(max0x80)。} //將上限溫度符號標志位置‘ 1’表示負溫度,將上限溫度裝換成無符號數(shù)。 if((minamp。0x80)==0x80)//若讀取的下限溫度的最高位(符號位)為‘ 1’表明是負溫度 {f_min=1。min=(min0x80)。}//將下限溫度符號標志位置‘ 1’表示負溫度,將下限溫度裝換成無符號數(shù)。 i=b。i=4。 if (i==0) { f=0。 //i為 0,表示讀取的溫度是正溫度 ,設(shè)立正溫度標記 temp=((a4)|(b4))。 //整數(shù)部分 a=(aamp。0x0f)。 temp_d=a。 //小數(shù)部分 } else { f=1。 //i為 1,表示讀取的溫度是負溫度 ,設(shè)立負溫度標記 a=~a+1。 //負數(shù)的小數(shù)部分取反加 1 b=~b。 //負數(shù)的整數(shù)部分取反 temp=((a4)|(b4))。 //整數(shù)部分 a=(aamp。0x0f)。 //小數(shù)部分 temp_d=a。 } } /*************************存儲極限溫度函數(shù) ***************************/ void store_t() { if(f_max==1) //若上限溫度為負,將上限溫度轉(zhuǎn)換成有符號數(shù)(最高 1是負, 0是正) max=max+0x80。 if(f_min==1) //若下限溫度為負,將上限溫度轉(zhuǎn)換成有符號數(shù) min=min+0x80。 ds18b20_init()。 //DS18B20初始化 ds18b20_write(0xcc)。 //向 DS18B20發(fā)跳過讀 ROM 命令 ds18b20_write(0x4e)。 //向 DS18B20發(fā)寫字節(jié)至?xí)捍嫫?2和 3( TH和 TL)命令 ds18b20_write(max)。 //向暫存器 TH(上限溫度暫存器)寫溫度 ds18b20_write(min)。 //向暫存器 TL(下限溫度暫存器)寫溫度 ds18b20_write(0xff)。 //向配置寄存器寫命令,進行溫度值分辨率設(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。} //當測量值小于最小值或大于最大值時報警 if((temp+temp_d*)maxamp。amp。(temp+temp_d*)min) {w=0。} //當測量值大于最小值且小于最大值時不報警 } if(f==1){w=1。TR1=1。} //若測量值是負值時報警 } if(f_min==1) //若下限值是負值 { if(f==0) //若測量值是正值 智筆記 6 { if((temp+temp_d*)=max)//當測量值大于最大值時報警 {w=1。TR1=1。} if((temp+temp_d*)max )//當測量值小于最大值時不報警 {w=0。} } if(f==1) //
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1