国产三级在线看完整版-内射白嫩大屁股在线播放91-欧美精品国产精品综合-国产精品视频网站一区-一二三四在线观看视频韩国-国产不卡国产不卡国产精品不卡-日本岛国一区二区三区四区-成年人免费在线看片网站-熟女少妇一区二区三区四区

儀器網(wǎng)(yiqi.com)歡迎您!

| 注冊2 登錄
網(wǎng)站首頁-資訊-話題-產(chǎn)品-評測-品牌庫-供應(yīng)商-展會-招標(biāo)-采購-知識-技術(shù)-社區(qū)-資料-方案-產(chǎn)品庫-視頻

問答社區(qū)

請教高手,基于單片機的人體溫度測量

宇翔1 2016-11-30 12:40:14 386  瀏覽
  •  

參與評論

全部評論(1條)

  • 僬耐呵撬爻 2016-11-30 14:33:17
      /********************************************************   * DS18B20溫度傳感器 *   * C51 *   * yajou 2008-06-28 無CRC *   ********************************************************/   #include "reg51.h"   #include "intrins.h"   #include "DS18B20.h"   /********************************************************   * us延時程序 *   ********************************************************/   void Delayus(uchar us)   {   while(us--); //12M,一次6us,加進入退出14us(8M晶振,一次9us)   }   /********************************************************   * DS18B20初始化 *   ********************************************************/   bit Ds18b20_Init(void) //存在返0,否則返1   {   bit temp = 1;   uchar outtime = ReDetectTime; //超時時間   while(outtime-- && temp)   {   Delayus(10); //(250)1514us時間可以減小嗎   ReleaseDQ();   Delay2us();   PullDownDQ();   Delayus(100); //614us(480-960)   ReleaseDQ();   Delayus(10); //73us(>60)   temp = dq;   Delayus(70); //us   }   return temp;   }   /********************************************************   * 寫bit2DS18B20 *   ********************************************************/   void Ds18b20_WriteBit(bit bitdata)   {   if(bitdata)   {   PullDownDQ();   Delay2us(); //2us(>1us)   ReleaseDQ(); //(上述1-15)   Delayus(12); //86us(45- x,總時間>60)   }else   {   PullDownDQ();   Delayus(12); //86us(60-120)   }   ReleaseDQ();   Delay2us(); //2us(>1us)   }   /********************************************************   * 寫B(tài)yte DS18B20 *   ********************************************************/   void Ds18b20_WriteByte(uchar chrdata)   {   uchar ii;   for(ii = 0; ii < 8; ii++)   {   Ds18b20_WriteBit(chrdata & 0x01);   chrdata >>= 1;   }   }   /********************************************************   * 寫 DS18B20 *   ********************************************************/   //void Ds18b20_Write(uchar *p_readdata, uchar bytes)   //{   // while(bytes--)   // {   // Ds18b20_WriteByte(*p_readdata);   // p_readdata++;   // }   //}   /********************************************************   * 讀bit From DS18B20 *   ********************************************************/   bit Ds18b20_ReadBit(void)   {   bit bitdata;   PullDownDQ();   Delay2us(); //2us( >1us)   ReleaseDQ();   Delay8us(); //8us( <15us)   bitdata = dq;   Delayus(7); //86us(上述總時間要>60us)   return bitdata;   }   /********************************************************   * 讀Byte DS18B20 *   ********************************************************/   uchar Ds18b20_ReadByte(void)   {   uchar ii,chardata;   for(ii = 0; ii < 8; ii++)   {   chardata >>= 1;   if(Ds18b20_ReadBit()) chardata |= 0x80;   }   return chardata;   }   /********************************************************   * 讀 DS18B20 ROM *   ********************************************************/   bit Ds18b20_ReadRom(uchar *p_readdata) //成功返0,失敗返1   {   uchar ii = 8;   if(Ds18b20_Init()) return 1;   Ds18b20_WriteByte(ReadROM);   while(ii--)   {   *p_readdata = Ds18b20_ReadByte();   p_readdata++;   }   return 0;   }   /********************************************************   * 讀 DS18B20 EE *   ********************************************************/   bit Ds18b20_ReadEE(uchar *p_readdata) //成功返0,失敗返1   {   uchar ii = 2;   if(Ds18b20_Init()) return 1;   Ds18b20_WriteByte(SkipROM);   Ds18b20_WriteByte(ReadScr);   while(ii--)   {   *p_readdata = Ds18b20_ReadByte();   p_readdata++;   }   return 0;   }   /********************************************************   * 溫度采集計算 *   ********************************************************/   bit TempCal(float *p_wendu) //成功返0,失敗返1 (溫度范圍-55 --- +128)   {   uchar temp[9],ii;   uint tmp;   float tmpwendu;   TR1 = 0;   TR0 = 0;   //讀暫存器和CRC值-----------------------   if(Ds18b20_ReadEE(temp))   {   TR1 = 1;   TR0 = 1;   return 1;   }   //-------------------------------------   //CRC校驗------------------------------   //   //此處應(yīng)加入CRC校驗等   //   //   //-------------------------------------   //使溫度值寫入相應(yīng)的wendu[i]數(shù)組中-----   for(ii = i; ii > 0; ii--)   {   p_wendu++;   }   i++;   if(i > 4) i = 0;   //-------------------------------------   //溫度正負數(shù)處理-----------------------   //   //-------------------------------------   //溫度計算-----------------------------   tmp = temp[1]; //   tmp <<= 8; //   tmp |= temp[0]; //組成溫度的兩字節(jié)合并   tmpwendu = tmp;   *p_wendu = tmpwendu / 16;   //-------------------------------------   //開始溫度轉(zhuǎn)換-------------------------   if(Ds18b20_Init())   {   TR1 = 1;   TR0 = 1;   return 1;   }   Ds18b20_WriteByte(SkipROM);   Ds18b20_WriteByte(Convert);   ReleaseDQ(); //寄生電源時要拉高DQ   //------------------------------------   TR1 = 1;   TR0 = 1;   return 0;   }   //////////DS18B20.h/////////////////////////   /********************************************************   * I/O口定義 *   ********************************************************/   sbit dq = P1^3;   sbit dv = P1^4; //DS18B20強上拉電源   /********************************************************   * 命令字定義 *   ********************************************************/   #define uchar unsigned char   #define uint unsigned int   #define ReleaseDQ() dq = 1; //上拉/釋放總線   #define PullDownDQ() dq = 0; //下拉總線   #define Delay2us() _nop_();_nop_(); //延時2us,每nop 1us   #define Delay8us() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();   //設(shè)置重復(fù)檢測次次數(shù),超出次數(shù)則超時   #define ReDetectTime 20   //ds18b20命令   #define SkipROM 0xCC   #define MatchROM 0x55   #define ReadROM 0x33   #define SearchROM 0xF0   #define AlarmSearch 0xEC   #define Convert 0x44   #define WriteScr 0x4E   #define ReadScr 0xBE   #define CopyScr 0x48   #define RecallEE 0xB8   #define ReadPower 0xB4   /********************************************************   * 函數(shù) *   ********************************************************/   void Delayus(uchar us);   //void Dog(void);   bit Ds18b20_Init(void); //DS18B20初始化,存在返0,否則返1   void Ds18b20_WriteBit(bit bitdata); //寫bit2DS18B20   void Ds18b20_WriteByte(uchar chrdata); //寫B(tài)yte DS18B20   void Ds18b20_Write(uchar *p_readdata, uchar bytes); //寫 DS18B20   bit Ds18b20_ReadBit(void); //讀bit From DS18B20   uchar Ds18b20_ReadByte(void); //讀Byte DS18B20   bit Ds18b20_ReadRom(uchar *p_readdata); //讀 DS18B20 ROM:成功返0,失敗返1   bit Ds18b20_ReadEE(uchar *p_readdata); //讀 DS18B20 EE :成功返0,失敗返1   bit TempCal(float *p_wendu); //成功返0,失敗返1 (溫度范圍-55 --- +128)

    贊(5)

    回復(fù)(0)

    評論

熱門問答

請教高手,基于單片機的人體溫度測量
 
2016-11-30 12:40:14 386 1
基于單片機的頻率計
哪位大俠有基于單片機頻率計的設(shè)計,范圍1HZ到100MHZ,希望能不吝賜教啊。自己做的頻率計仿真達不到要求。只能達到10M,卡在哪了,做不下去了。O(∩_∩)O謝謝了。
2012-05-08 03:40:25 302 3
基于單片機的信號發(fā)生器
請問有哪位知道這個圖里面的這些元器件在哪個ISIS7里面的名稱是啥,有些我找不到啊... 請問有哪位知道這個圖里面的這些元器件在哪個ISIS7里面的名稱是啥,有些我找不到啊 展開
2017-09-11 15:37:20 421 4
基于單片機的頻率計設(shè)計
設(shè)計要求設(shè)計一個以單片機為核心的頻率測量裝置。使用AT89C51單片機的定時器/計數(shù)器的定時和計數(shù)功能,外部擴展6位LED數(shù)碼管,要求累計每秒進入單片機的外部脈沖個數(shù),用LED數(shù)碼管顯示出來。(1)被測頻率fx<110Hz,采用測周法,顯示頻率×××. ×××;fx>1... 設(shè)計要求設(shè)計一個以單片機為核心的頻率測量裝置。使用AT89C51單片機的定時器/計數(shù)器的定時和計數(shù)功能,外部擴展6位LED數(shù)碼管,要求累計每秒進入單片機的外部脈沖個數(shù),用LED數(shù)碼管顯示出來。(1)被測頻率fx<110Hz,采用測周法,顯示頻率×××. ×××;fx>110Hz,采用測頻法,顯示頻率××××××。(2)利用鍵盤分段測量和自動分段測量。(3)完成單脈沖測量,輸入脈沖寬度范圍是100ms~0.1s。(4)顯示脈沖寬度要求如下。Tx<1000ms,顯示脈沖寬度×××。Tx>1000ms,顯示脈沖寬度××××。 求大神給個程序,給個設(shè)計方,您之前給的失效了,謝謝大神 展開
2016-07-07 19:24:28 397 1
基于51單片機的溫度控制器
 
2012-04-13 16:49:36 373 2
基于單片機的微波爐控制系統(tǒng)
基于單片機的微波爐控制系統(tǒng)單片機課程設(shè)計-基于微波爐控制系統(tǒng)設(shè)計(1)可設(shè)置三種Z高溫度值,如低溫(20°),中溫(30°),高溫(50°);(2)可設(shè)置Z長10分鐘定時;(3)用DS... 基于單片機的微波爐控制系統(tǒng)單片機課程設(shè)計-基于微波爐控制系統(tǒng)設(shè)計 (1)可設(shè)置三種Z高溫度值,如低溫(20°),中溫(30°),高溫(50°); (2)可設(shè)置Z長10分鐘定時; (3)用DS18B20感知溫度,當(dāng)溫度達到設(shè)置溫度值,并持續(xù)設(shè)定時間長度時,蜂鳴器報警提示,LED燈閃爍,同時時間歸零; (4)設(shè)計控制電路總體方案; 求大神幫助 展開
2017-12-24 14:21:01 388 1
基于C51單片機的信號發(fā)生器
求各位前輩和同學(xué)指點下該怎么開始各個部分有什么作用怎么組成總之就是整體的設(shè)計思路謝謝... 求各位前輩和同學(xué)指點下該怎么開始 各個部分有什么作用 怎么組成 總之就是整體的設(shè)計思路 謝謝 展開
2016-10-28 15:46:50 432 1
基于單片機的數(shù)字頻率計的研究
利用AT89C51單片機設(shè)計一個測量頻率范圍為1Hz-10KHz的正弦波、方波、三角波信號的數(shù)字頻率計,要求用單片機實現(xiàn)自動測量功能。設(shè)計基于AT89C51單片機控制的數(shù)字頻率計的硬件電路;完成相關(guān)的系統(tǒng)軟件設(shè)計,并通過試驗儀驗證通過。
2009-05-27 03:47:42 360 3
基于單片機的溫度控制器的畢業(yè)論文
基于AT89C2051單片機的水溫控制電路的設(shè)計,希望有相關(guān)資料的好心人能幫幫忙,郵箱:henryjason@126.com感激不盡... 基于AT89C2051單片機的水溫控制電路的設(shè)計,希望有相關(guān)資料的好心人能幫幫忙,郵箱:henryjason@126.com 感激不盡 展開
2010-05-14 03:21:10 297 2
基于單片機C51的頻率計電路圖
1、要共陰數(shù)碼顯示。2、頻率超過2K報警。3、蜂鳴器報警。可測1Hz到5KHz
2018-11-17 14:51:41 453 0
基于AT89C51單片機的數(shù)字頻率計畢業(yè)設(shè)計
AT89C51單片機 測頻范圍10HZ-10MHZ 多種波形 ZD是需要添加其他功能 比如測幅值 之類的 (添加功能任意 保證畢業(yè)設(shè)計的工作量不會太簡單) 不支持私下交易,求淘寶鏈接之類的
2015-11-09 03:36:40 546 2
基于單片機的數(shù)據(jù)采集器采集什么東西
 
2017-05-24 16:17:02 495 1
基于單片機的熱電偶測溫電路圖
要求有電路圖,編程等
2017-11-23 02:27:45 412 1
基于AT89S51單片機的信號發(fā)生器設(shè)計
波形輸出:正弦波,方波,三角波... 波形輸出:正弦波,方波,三角波 展開
2018-11-19 19:51:53 279 0
:基于51單片機的脈沖信號發(fā)生器
[1]輸出信號約每秒1組脈沖,脈沖組間隔0.5-2秒可設(shè)置;[2]每組脈沖個數(shù)1-50可以設(shè)置,雙極性脈沖和雙極性方波;[3]脈沖頻率5K-100K可以設(shè)置;[4]脈沖寬度可以1-100uS可以設(shè)置;我的92... [1] 輸出信號約每秒1組脈沖,脈沖組間隔0.5-2秒可設(shè)置;[2] 每組脈沖個數(shù)1-50可以設(shè)置,雙極性脈沖和雙極性方波; [3] 脈沖頻率5K-100K可以設(shè)置;[4] 脈沖寬度可以1-100uS可以設(shè)置; 我的 921313685@qq.com謝啦 展開
2014-10-15 08:40:21 273 2
基于單片機的鍋爐壓力控制系統(tǒng)設(shè)計
 
2018-11-20 14:06:29 399 0
單片機用PID控制可控硅,讓電烤箱溫度恒定的算法請教高手!
 
2011-10-07 05:36:44 300 2
為什么做的基于單片機的超聲波測距傳感器測量距離短
 
2017-03-24 04:05:28 382 3
求助,基于51單片機,激光測距
 
2018-11-30 04:20:40 449 0

4月突出貢獻榜

推薦主頁

最新話題