久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9810|回復: 13
收起左側

DS18B20.H文件下載

  [復制鏈接]
ID:70976 發表于 2014-12-25 20:45 | 顯示全部樓層 |閱讀模式
DS18B20.H文件是溫度傳感器的驅動 大家可以另存為到硬盤下載到電腦


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

  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;///////////////定義一個數據端口

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

  9. unsigned char bwei_ds; /////整數百位
  10. unsigned char shwei_ds; ////整數十位
  11. unsigned char gwei_ds; /////整數個位
  12. unsigned char shfen_ds; ////十分位
  13. unsigned char bfen_ds; /////百分位

  14. //------------------------------------------------
  15. //延時函數
  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. //復位DS18B20 函數
  24. void reset_ds(void)
  25. {
  26. char presence=1;
  27. while(presence)
  28. {
  29.   DQ=0; //////////////////主機拉至低電平
  30.   delay_ds(1,80); ///////延時大于480us

  31.   DQ=1; //////////////////釋放總線等電阻拉高總線,并保持15~60us
  32.   delay_ds(1,7); /////////延時20us
  33.                                    
  34.   if(DQ==1) presence=1; //沒有接收到應答信號,繼續復位
  35.   else presence=0; ///////接收到應答信號
  36.   delay_ds(1,64); ////////延時430us
  37. }
  38. }
  39. //-----------------------------------------------
  40. //寫18b20 寫字節函數
  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; //如果寫1,拉高電平
  50.   delay_ds(1,11); ///////延時63us

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

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

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

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

  97. T_ds=THV_ds;////////寫入高八位
  98.     T_ds<<=8;///////////高八位上移
  99.     T_ds=T_ds|TLV_ds;///寫入低八位
  100.     tt=T_ds*0.0625;/////直接計算,單位萬分之一度
  101.     T_ds= tt*100+0.5; //可校準,單位0.01度

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

  108. #endif
復制代碼

調用方法研究:http://www.zg4o1577.cn/bbs/dpj-218922-1.html


回復

使用道具 舉報

ID:77146 發表于 2015-4-16 13:20 | 顯示全部樓層
現在下載看看
回復

使用道具 舉報

ID:184107 發表于 2017-5-24 11:44 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:199814 發表于 2017-10-3 22:09 | 顯示全部樓層
非常感謝
回復

使用道具 舉報

ID:864872 發表于 2022-4-2 17:28 | 顯示全部樓層
你好,我想問一下怎么在主函數里面讀取ds18b20測的溫度啊
回復

使用道具 舉報

ID:161164 發表于 2022-4-2 19:19 | 顯示全部樓層
hempfish 發表于 2022-4-2 17:28
你好,我想問一下怎么在主函數里面讀取ds18b20測的溫度啊

在主函數運行get_temp_ds()
然后讀取
bwei_ds; /////整數百位
shwei_ds; ////整數十位
gwei_ds; /////整數個位
shfen_ds; ////十分位
bfen_ds; /////百分位
回復

使用道具 舉報

ID:161164 發表于 2022-4-2 19:20 來自觸屏版 | 顯示全部樓層
hempfish 發表于 2022-4-2 17:28
你好,我想問一下怎么在主函數里面讀取ds18b20測的溫度啊

已回~等審核
回復

使用道具 舉報

ID:864872 發表于 2022-4-2 23:49 來自觸屏版 | 顯示全部樓層
lkc8210 發表于 2022-4-2 19:19
在主函數運行get_temp_ds()
然后讀取
bwei_ds; /////整數百位

后頭這些是直接放在get_temp_ds()后面嘛?還是要再定個參數將這些數賦參數里
回復

使用道具 舉報

ID:161164 發表于 2022-4-3 09:57 來自觸屏版 | 顯示全部樓層
hempfish 發表于 2022-4-2 23:49
后頭這些是直接放在get_temp_ds()后面嘛?還是要再定個參數將這些數賦參數里

單片機跑完get_temp_ds()后會自動把對應的數值放入那幾個變數里,你就用那幾個變數做你想做的事
回復

使用道具 舉報

ID:864872 發表于 2022-4-3 12:58 來自觸屏版 | 顯示全部樓層
lkc8210 發表于 2022-4-3 09:57
單片機跑完get_temp_ds()后會自動把對應的數值放入那幾個變數里,你就用那幾個變數做你想做的事

我直接使用這幾個變數到LCD1602里面它不顯示怎么回事啊
回復

使用道具 舉報

ID:161164 發表于 2022-4-3 14:00 | 顯示全部樓層
hempfish 發表于 2022-4-3 12:58
我直接使用這幾個變數到LCD1602里面它不顯示怎么回事啊

上代碼上照片上仿真截圖啊~
回復

使用道具 舉報

ID:864872 發表于 2022-4-3 15:01 | 顯示全部樓層
lkc8210 發表于 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);
復制代碼

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

使用道具 舉報

ID:161164 發表于 2022-4-4 12:46 | 顯示全部樓層
試試在47行"}"之后加DQ=1;
和在86行"}"之前加DQ=1;
回復

使用道具 舉報

ID:864872 發表于 2022-4-4 14:18 | 顯示全部樓層
lkc8210 發表于 2022-4-4 12:46
試試在47行"}"之后加DQ=1;
和在86行"}"之前加DQ=1;

還是感覺傳感器沒有工作,變化傳感器的值顯示屏上個不變,且沒有讀出測量值。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色男人天堂av | 欧美电影网 | 国产自产c区 | 在线综合视频 | 亚洲毛片在线 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 成人精品一区二区户外勾搭野战 | 亚洲欧洲一区二区 | 亚洲国产欧美在线人成 | 国产高清视频在线观看播放 | 成人1区2区 | 中文字幕在线免费观看 | 91视频免费 | 国产精品久久久久久久久久久久冷 | 午夜私人影院在线观看 | 欧美电影大全 | 免费成人国产 | 亚洲精品永久免费 | 亚洲免费一区 | 欧美日韩三级 | a级黄色片视频 | 中文字幕一区二区三区不卡在线 | 国产免费观看视频 | 欧美一级免费看 | 亚洲成av| 国产高清视频 | 福利国产| 美女国产一区 | 久久久久久久久99精品 | 午夜免费成人 | 91精品国产91久久综合桃花 | 国产精品久久国产精品 | 免费观看毛片 | 免费黄网站在线观看 | 成人免费视频 | 亚洲精品一区在线观看 | 玖玖爱365 | 日韩在线免费电影 | 成人av观看 | 国产成人综合在线 | 一区二区三区四区在线 |