欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: DS18B20.H文件下載 [打印本頁(yè)]

作者: daniu    時(shí)間: 2014-12-25 20:45
標(biāo)題: DS18B20.H文件下載
DS18B20.H文件是溫度傳感器的驅(qū)動(dòng) 大家可以另存為到硬盤(pán)下載到電腦


  1. /*把我一直珍藏的程序全部拿出來(lái),給大家共享,這也讓我想起來(lái),我剛學(xué)的時(shí)候,搜集資料是那么辛苦,而且找不到完整的資料,我將把我整理的和自己制作的H文件共享出來(lái),只要修改定義端口,便可以隨意的調(diào)用,以后我還會(huì)慢慢完善我的C資料,也希望大家給我指出程序的漏洞和缺點(diǎn),已達(dá)到相互學(xué)習(xí)目地。*/

  2. #ifndef __DS18B20_H__
  3. #define __DS18B20_H__

  4. #include<intrins.h>

  5. #define uch unsigned char //給unsigned char 起別名 uch

  6. sbit DQ=P2^3;///////////////定義一個(gè)數(shù)據(jù)端口

  7. unsigned char TLV_ds=0 ; ///采集到的溫度高8 位
  8. unsigned char THV_ds=0; ////采集到的溫度低8 位

  9. unsigned char bwei_ds; /////整數(shù)百位
  10. unsigned char shwei_ds; ////整數(shù)十位
  11. unsigned char gwei_ds; /////整數(shù)個(gè)位
  12. unsigned char shfen_ds; ////十分位
  13. unsigned char bfen_ds; /////百分位

  14. //------------------------------------------------
  15. //延時(shí)函數(shù)
  16. void delay_ds(uch x,uch y)   //誤差0,12M
  17. {
  18.     uch a,b;
  19. for(b=x;b>0;b--)
  20.         for(a=y;a>0;a--);
  21. }
  22. //-----------------------------------------------
  23. //復(fù)位DS18B20 函數(shù)
  24. void reset_ds(void)
  25. {
  26. char presence=1;
  27. while(presence)
  28. {
  29.   DQ=0; //////////////////主機(jī)拉至低電平
  30.   delay_ds(1,80); ///////延時(shí)大于480us

  31.   DQ=1; //////////////////釋放總線等電阻拉高總線,并保持15~60us
  32.   delay_ds(1,7); /////////延時(shí)20us
  33.                                    
  34.   if(DQ==1) presence=1; //沒(méi)有接收到應(yīng)答信號(hào),繼續(xù)復(fù)位
  35.   else presence=0; ///////接收到應(yīng)答信號(hào)
  36.   delay_ds(1,64); ////////延時(shí)430us
  37. }
  38. }
  39. //-----------------------------------------------
  40. //寫(xiě)18b20 寫(xiě)字節(jié)函數(shù)
  41. void write_byte_ds(uch val_ds)
  42. {
  43. uch i;
  44. uch temp_ds;
  45. for(i=8;i>0;i--)
  46. {
  47.   temp_ds=val_ds&0x01; //最低位移出
  48.   DQ=0;
  49.   if(temp_ds==1) DQ=1; //如果寫(xiě)1,拉高電平
  50.   delay_ds(1,11); ///////延時(shí)63us

  51.   DQ=1;
  52.   _nop_();
  53.   _nop_(); //////////////延時(shí)6us

  54.   val_ds=val_ds>>1; /////右移一位
  55. }
  56. }
  57. //------------------------------------------------
  58. //18b20 讀字節(jié)函數(shù)
  59. uch read_byte_ds(void)
  60. {
  61. uch i;
  62. uch value_ds=0; ///讀出溫度
  63. static bit j;//////靜態(tài)變量
  64. for(i=8;i>0;i--)
  65. {
  66.   DQ=0; /////////拉低給脈沖信號(hào)
  67.   value_ds>>=1;//右移并起到延時(shí)作用
  68.   DQ=1; /////////拉至高電平
  69.   _nop_();  /////延時(shí)6us等待響應(yīng)

  70.   j=DQ;
  71.   if(j) value_ds|=0x80;//寫(xiě)入高電平
  72.   delay_ds(1,11); ///////延時(shí)63us
  73. }
  74. return(value_ds);
  75. }
  76. //-------------------------------------------------
  77. //啟動(dòng)溫度轉(zhuǎn)換函數(shù)
  78. void get_temp_ds()
  79. {
  80. int i=10;
  81. int T_ds;
  82. float tt;

  83. DQ=1;
  84. reset_ds(); ///////////復(fù)位等待從機(jī)應(yīng)答
  85. write_byte_ds(0XCC); //忽略ROM 匹配
  86. write_byte_ds(0X44); //發(fā)送溫度轉(zhuǎn)化命令
  87. while(i--)
  88. {
  89.   delay_ds(50,100); //確保溫度轉(zhuǎn)換完成所需要的時(shí)間
  90. }
  91. reset_ds(); /////////////再次復(fù)位,等待從機(jī)應(yīng)答
  92. write_byte_ds(0XCC); ////忽略ROM 匹配
  93. write_byte_ds(0XBE); ////發(fā)送讀溫度命令
  94. TLV_ds=read_byte_ds(); //讀出溫度低8
  95. THV_ds=read_byte_ds(); //讀出溫度高8 位
  96. DQ=1;////////////////////釋放總線

  97. T_ds=THV_ds;////////寫(xiě)入高八位
  98.     T_ds<<=8;///////////高八位上移
  99.     T_ds=T_ds|TLV_ds;///寫(xiě)入低八位
  100.     tt=T_ds*0.0625;/////直接計(jì)算,單位萬(wàn)分之一度
  101.     T_ds= tt*100+0.5; //可校準(zhǔn),單位0.01度

  102. bwei_ds=T_ds/10000;////////顯示百位
  103.     shwei_ds=T_ds%10000/1000;//顯示十位
  104.     gwei_ds=T_ds%1000/100;/////顯示個(gè)位
  105.     shfen_ds=T_ds%100/10;//////顯示十分位
  106.     bfen_ds=T_ds%10;///////////顯示百分位
  107. }

  108. #endif
復(fù)制代碼

調(diào)用方法研究:http://www.raoushi.com/bbs/dpj-218922-1.html



作者: 2_LMOH    時(shí)間: 2015-4-16 13:20
現(xiàn)在下載看看
作者: luyangood    時(shí)間: 2017-5-24 11:44
感謝分享
作者: zhn123    時(shí)間: 2017-10-3 22:09
非常感謝
作者: hempfish    時(shí)間: 2022-4-2 17:28
你好,我想問(wèn)一下怎么在主函數(shù)里面讀取ds18b20測(cè)的溫度啊
作者: lkc8210    時(shí)間: 2022-4-2 19:19
hempfish 發(fā)表于 2022-4-2 17:28
你好,我想問(wèn)一下怎么在主函數(shù)里面讀取ds18b20測(cè)的溫度啊

在主函數(shù)運(yùn)行g(shù)et_temp_ds()
然后讀取
bwei_ds; /////整數(shù)百位
shwei_ds; ////整數(shù)十位
gwei_ds; /////整數(shù)個(gè)位
shfen_ds; ////十分位
bfen_ds; /////百分位
作者: lkc8210    時(shí)間: 2022-4-2 19:20
hempfish 發(fā)表于 2022-4-2 17:28
你好,我想問(wèn)一下怎么在主函數(shù)里面讀取ds18b20測(cè)的溫度啊

已回~等審核
作者: hempfish    時(shí)間: 2022-4-2 23:49
lkc8210 發(fā)表于 2022-4-2 19:19
在主函數(shù)運(yùn)行g(shù)et_temp_ds()
然后讀取
bwei_ds; /////整數(shù)百位

后頭這些是直接放在get_temp_ds()后面嘛?還是要再定個(gè)參數(shù)將這些數(shù)賦參數(shù)里
作者: lkc8210    時(shí)間: 2022-4-3 09:57
hempfish 發(fā)表于 2022-4-2 23:49
后頭這些是直接放在get_temp_ds()后面嘛?還是要再定個(gè)參數(shù)將這些數(shù)賦參數(shù)里

單片機(jī)跑完get_temp_ds()后會(huì)自動(dòng)把對(duì)應(yīng)的數(shù)值放入那幾個(gè)變數(shù)里,你就用那幾個(gè)變數(shù)做你想做的事
作者: hempfish    時(shí)間: 2022-4-3 12:58
lkc8210 發(fā)表于 2022-4-3 09:57
單片機(jī)跑完get_temp_ds()后會(huì)自動(dòng)把對(duì)應(yīng)的數(shù)值放入那幾個(gè)變數(shù)里,你就用那幾個(gè)變數(shù)做你想做的事

我直接使用這幾個(gè)變數(shù)到LCD1602里面它不顯示怎么回事啊
作者: lkc8210    時(shí)間: 2022-4-3 14:00
hempfish 發(fā)表于 2022-4-3 12:58
我直接使用這幾個(gè)變數(shù)到LCD1602里面它不顯示怎么回事啊

上代碼上照片上仿真截圖啊~
作者: hempfish    時(shí)間: 2022-4-3 15:01
lkc8210 發(fā)表于 2022-4-3 14:00
上代碼上照片上仿真截圖啊~
  1.               wr_com(0xc9);               
  2.                 wr_dat(shwei_ds);
  3.                 wr_dat(gwei_ds);
  4.                 wr_dat('.');
  5.               wr_dat(shfen_ds);
  6.                 wr_dat(0xdf);
  7.                 wr_dat(0x43);
復(fù)制代碼

這是我想輸出的三位數(shù),就直接引用的
這是仿真結(jié)果:(未上傳附件)

作者: lkc8210    時(shí)間: 2022-4-4 12:46
試試在47行"}"之后加DQ=1;
和在86行"}"之前加DQ=1;
作者: hempfish    時(shí)間: 2022-4-4 14:18
lkc8210 發(fā)表于 2022-4-4 12:46
試試在47行"}"之后加DQ=1;
和在86行"}"之前加DQ=1;

還是感覺(jué)傳感器沒(méi)有工作,變化傳感器的值顯示屏上個(gè)不變,且沒(méi)有讀出測(cè)量值。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1