找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 13997|回復(fù): 23
收起左側(cè)

一個(gè)STM32的DS18B20驅(qū)動(dòng)程序分享

  [復(fù)制鏈接]
ID:283092 發(fā)表于 2018-2-8 16:39 | 顯示全部樓層 |閱讀模式
DS18B20測(cè)溫程序

stm32單片機(jī)源程序如下:
  1. #include<stm32f10x.h>
  2. #include<Ds18b20.h>
  3. #include<Gpio.h>
  4. #include<SysTick.h>
  5. /*Ds18b20復(fù)位*/
  6. void Init_Ds18b20()
  7. {         
  8.       u8 i=0;
  9.          /*設(shè)置IO口為輸出模式*/
  10.      Gpio_Config_Mode_Out();

  11.          /*拉低總線(xiàn)*/
  12.      DS18B20_DQ_OUT_Low;

  13.          /*延遲480us*/
  14.          Delay_us(480);
  15.          /*釋放總線(xiàn)*/
  16.          DS18B20_DQ_OUT_High;

  17.          /*設(shè)置IO口為輸入模式*/
  18.          Gpio_Config_FLOATING_In();

  19.          /*等待復(fù)位信號(hào) 注意不能無(wú)限等待*/
  20.          while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)&&(i<200))
  21.          i++;
  22. }

  23. /*寫(xiě)一個(gè)字節(jié)*/
  24. void Write_one_byte(u8 a)
  25. {
  26.      u8 i=0;
  27.          u8 b=0x01;
  28.          u8 c=0;
  29.         /*設(shè)置IO口為輸出模式*/
  30.     Gpio_Config_Mode_Out();
  31.        
  32.         for(i=0;i<8;i++)
  33.         {
  34.              c=b&a;
  35.                  if(c)
  36.                  {
  37.                        /*拉低總線(xiàn)*/
  38.                      DS18B20_DQ_OUT_Low;
  39.                          /*延遲15us產(chǎn)生寫(xiě)時(shí)隙*/
  40.                          Delay_us(15);
  41.                          /*釋放總線(xiàn)*/
  42.                          DS18B20_DQ_OUT_High;
  43.                          /*保持40us*/
  44.                          Delay_us(40);
  45.                  }   
  46.                  else
  47.                  {
  48.                          /*拉低總線(xiàn)*/
  49.                      DS18B20_DQ_OUT_Low;
  50.                          /*至少保持60us低電平*/       
  51.                          Delay_us(60);
  52.                          /*釋放總線(xiàn)*/
  53.                          DS18B20_DQ_OUT_High;

  54.                  }
  55.                  b=b<<1;  
  56.         }
  57.              /*釋放總線(xiàn)*/
  58.         DS18B20_DQ_OUT_High;
  59. }

  60. /*讀一個(gè)字節(jié)*/
  61. u8 Read_one_byte()
  62. {
  63.         u8 a=0;
  64.           u8 i=0;      
  65.         for(i=0;i<8;i++)
  66.         {
  67.             /*設(shè)置IO口為輸出模式*/
  68.             Gpio_Config_Mode_Out();
  69.             /*拉低總線(xiàn)*/
  70.             DS18B20_DQ_OUT_Low;
  71.             /*延遲1us產(chǎn)生讀時(shí)隙*/
  72.             Delay_us(1);
  73.             /*釋放總線(xiàn)*/
  74.             DS18B20_DQ_OUT_High;
  75.             /*設(shè)置IO口為浮空輸入模式*/
  76.             Gpio_Config_FLOATING_In();

  77.             if(DS18B20_DQ_IN)
  78.             {
  79.               a=a>>1;
  80.                   a=a|0x80;
  81.             }
  82.             else
  83.             {
  84.                      a=a>>1;
  85.             }
  86.                 /*延遲50us保證時(shí)間要求*/
  87.                 Delay_us(50);
  88.                 /*設(shè)置IO口為輸出模式*/
  89.             Gpio_Config_Mode_Out();
  90.                 /*釋放總線(xiàn)*/
  91.             DS18B20_DQ_OUT_High;
  92.     }
  93.         return(a);
  94. }

  95. /***************
  96.   溫度獲取子函數(shù)
  97.   入口參數(shù): 無(wú)
  98.   出口參數(shù): 溫度
  99. ****************/
  100. u8 wen_du_huo_qu()
  101. {
  102.      u16 a=0;
  103.          u8 b=0;

  104.          /*復(fù)位DS18B20*/
  105.          Init_Ds18b20();
  106.          /*寫(xiě)跳過(guò)ROM指令*/
  107.          Write_one_byte(0xCC);
  108.          /*寫(xiě)溫度轉(zhuǎn)換指令*/
  109.          Write_one_byte(0x44);
  110.          /*延遲等待轉(zhuǎn)換完成*/
  111.          Delay_us(20);
  112.          /*寫(xiě)讀暫存器指令*/
  113. ……………………

  114. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
DS18B20程序.rar (1.66 MB, 下載次數(shù): 553)


評(píng)分

參與人數(shù) 1黑幣 +6 收起 理由
wfliu + 6 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:367374 發(fā)表于 2018-7-8 16:18 | 顯示全部樓層
想問(wèn)一下最后的返回值為10進(jìn)制還是16進(jìn)制啊
回復(fù)

使用道具 舉報(bào)

ID:9836 發(fā)表于 2018-7-14 10:51 | 顯示全部樓層
謝謝,剛好需要參考一下
回復(fù)

使用道具 舉報(bào)

ID:247070 發(fā)表于 2018-7-15 08:59 | 顯示全部樓層
        贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

ID:394660 發(fā)表于 2018-9-6 17:31 | 顯示全部樓層
我想下載沒(méi)有黑幣怎么辦
回復(fù)

使用道具 舉報(bào)

ID:94464 發(fā)表于 2018-11-9 22:58 | 顯示全部樓層
求下載
回復(fù)

使用道具 舉報(bào)

ID:332484 發(fā)表于 2018-11-10 12:27 | 顯示全部樓層
謝謝樓主分享 剛好需要
回復(fù)

使用道具 舉報(bào)

ID:362180 發(fā)表于 2018-11-19 18:53 | 顯示全部樓層

謝謝樓主分享 剛好需要
回復(fù)

使用道具 舉報(bào)

ID:423190 發(fā)表于 2018-12-4 21:54 | 顯示全部樓層
謝謝樓主
回復(fù)

使用道具 舉報(bào)

ID:187640 發(fā)表于 2019-1-6 15:01 | 顯示全部樓層
感謝樓主~~~~~~~~
回復(fù)

使用道具 舉報(bào)

ID:143443 發(fā)表于 2019-3-9 17:29 | 顯示全部樓層
感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:268143 發(fā)表于 2019-5-9 20:01 | 顯示全部樓層
感謝樓主
回復(fù)

使用道具 舉報(bào)

ID:532502 發(fā)表于 2019-5-10 14:47 | 顯示全部樓層
幫頂下,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:323453 發(fā)表于 2019-5-11 20:13 | 顯示全部樓層
贊一個(gè)!
回復(fù)

使用道具 舉報(bào)

ID:546325 發(fā)表于 2019-6-19 10:16 | 顯示全部樓層
謝謝樓主分享,試試能使用么
回復(fù)

使用道具 舉報(bào)

ID:465802 發(fā)表于 2019-7-4 15:19 | 顯示全部樓層
下載看看,看能否使用。
回復(fù)

使用道具 舉報(bào)

ID:165762 發(fā)表于 2019-7-11 10:05 | 顯示全部樓層
下載下來(lái)參考一下
回復(fù)

使用道具 舉報(bào)

ID:585883 發(fā)表于 2019-7-17 16:40 | 顯示全部樓層
多謝樓主分享,正好要用
回復(fù)

使用道具 舉報(bào)

ID:391540 發(fā)表于 2019-7-18 13:38 | 顯示全部樓層
18B20,好多年前接觸的東西啊.
回復(fù)

使用道具 舉報(bào)

ID:145349 發(fā)表于 2019-10-16 08:46 | 顯示全部樓層
DS18B20 編程還是比較 麻煩的,延時(shí)函數(shù)  調(diào)用 太多,影響主程序的運(yùn)行
得用定時(shí)器 來(lái)調(diào)度 程序來(lái)實(shí)現(xiàn)延時(shí),詳細(xì)見(jiàn) 見(jiàn)附件
21STM32F10x_DS18BD20源程序說(shuō)明.zip (97.94 KB, 下載次數(shù): 25)
回復(fù)

使用道具 舉報(bào)

ID:250090 發(fā)表于 2019-12-16 09:11 | 顯示全部樓層

18B20,好多年前接觸的東西啊.
回復(fù)

使用道具 舉報(bào)

ID:91165 發(fā)表于 2020-2-25 18:59 | 顯示全部樓層
正在做stm32 的 ds18b20
回復(fù)

使用道具 舉報(bào)

ID:707198 發(fā)表于 2020-3-12 17:42 | 顯示全部樓層
這個(gè)是stm32的都能用嗎
回復(fù)

使用道具 舉報(bào)

ID:340312 發(fā)表于 2021-4-3 09:23 | 顯示全部樓層
想看看用定時(shí)器怎么讀溫度
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表