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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2675|回復: 0
打印 上一主題 下一主題
收起左側

分享一份STM32單片機驅動DS13B20的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:440534 發表于 2020-1-29 10:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
①芯片型號:STM32C8T6(STM32F103系列均可使用)
②引腳使用:PA8
③DS13B20供電電壓:3.3V
④數據精度:0.1C。

單片機源程序如下:
  1. #include "ds18b20.h"

  2. //復位DS18B20
  3. //u8 Temp[15];
  4. void DS18B20_Rst(void)          
  5. {                 
  6.         DS18B20_IO_OUT();         //SET PG11 OUTPUT
  7.     DS18B20_DQ_OUT=0;         //拉低DQ
  8.     delay_us(750);            //拉低750us
  9.     DS18B20_DQ_OUT=1;         //DQ=1
  10.         delay_us(15);             //15US
  11. }
  12. //等待DS18B20的回應
  13. //返回1:未檢測到DS18B20的存在
  14. //返回0:存在
  15. u8 DS18B20_Check(void)           
  16. {   
  17.         u8 retry=0;
  18.         DS18B20_IO_IN();        //SET PG11 INPUT         
  19.     while (DS18B20_DQ_IN&&retry<200)
  20.         {
  21.                 retry++;
  22.                 delay_us(1);
  23.         };         
  24.         if(retry>=200)return 1;
  25.         else retry=0;
  26.     while (!DS18B20_DQ_IN&&retry<240)
  27.         {
  28.                 retry++;
  29.                 delay_us(1);
  30.         };
  31.         if(retry>=240)return 1;            
  32.         return 0;
  33. }
  34. //從DS18B20讀取一個位
  35. //返回值:1/0
  36. u8 DS18B20_Read_Bit(void)          
  37. {
  38.     u8 data;
  39.         DS18B20_IO_OUT();        //SET PG11 OUTPUT
  40.     DS18B20_DQ_OUT=0;
  41.         delay_us(2);
  42.     DS18B20_DQ_OUT=1;
  43.         DS18B20_IO_IN();        //SET PG11 INPUT
  44.         delay_us(12);
  45.         if(DS18B20_DQ_IN)data=1;
  46.     else data=0;         
  47.     delay_us(50);           
  48.     return data;
  49. }
  50. //從DS18B20讀取一個字節
  51. //返回值:讀到的數據
  52. u8 DS18B20_Read_Byte(void)     
  53. {        
  54.     u8 i,j,dat;
  55.     dat=0;
  56.         for (i=1;i<=8;i++)
  57.         {
  58.         j=DS18B20_Read_Bit();
  59.         dat=(j<<7)|(dat>>1);
  60.     }                                                    
  61.     return dat;
  62. }
  63. //寫一個字節到DS18B20
  64. //dat:要寫入的字節
  65. void DS18B20_Write_Byte(u8 dat)     
  66. {            
  67.     u8 j;
  68.     u8 testb;
  69.         DS18B20_IO_OUT();        //SET PG11 OUTPUT;
  70.     for (j=1;j<=8;j++)
  71.         {
  72.         testb=dat&0x01;
  73.         dat=dat>>1;
  74.         if (testb)
  75.         {
  76.             DS18B20_DQ_OUT=0;        // Write 1
  77.             delay_us(2);                           
  78.             DS18B20_DQ_OUT=1;
  79.             delay_us(60);            
  80.         }
  81.         else
  82.         {
  83.             DS18B20_DQ_OUT=0;        // Write 0
  84.             delay_us(60);            
  85.             DS18B20_DQ_OUT=1;
  86.             delay_us(2);                          
  87.         }
  88.     }
  89. }
  90. //開始溫度轉換
  91. void DS18B20_Start(void)
  92. {                                                                 
  93.     DS18B20_Rst();          
  94.         DS18B20_Check();         
  95.     DS18B20_Write_Byte(0xcc);        // skip rom
  96.     DS18B20_Write_Byte(0x44);        // convert
  97. }

  98. //初始化DS18B20的IO口 DQ 同時檢測DS的存在
  99. //返回1:不存在
  100. //返回0:存在             
  101. u8 DS18B20_Init(void)
  102. {
  103.         GPIO_InitTypeDef  GPIO_InitStructure;
  104.        
  105.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PORTG口時鐘
  106.        
  107.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                                //PORTG.11 推挽輸出
  108.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                   
  109.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  110.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  111.         GPIO_SetBits(GPIOA,GPIO_Pin_8);    //輸出1

  112.         DS18B20_Rst();

  113.         return DS18B20_Check();
  114. }  
  115. //從ds18b20得到溫度值
  116. //精度:0.1C
  117. //返回值:溫度值 (-550~1250)
  118. short DS18B20_Get_Temp(void)
  119. {
  120.     u8 temp;
  121.     u8 TL,TH;
  122.         short tem;
  123.     DS18B20_Start ();                          // ds1820 start convert
  124.     DS18B20_Rst();
  125.     DS18B20_Check();         
  126.     DS18B20_Write_Byte(0xcc);        // skip rom
  127.     DS18B20_Write_Byte(0xbe);        // convert            
  128.     TL=DS18B20_Read_Byte();         // LSB   
  129.     TH=DS18B20_Read_Byte();         // MSB  
  130.                       
  131.     if(TH>7)
  132.     {
  133.         TH=~TH;
  134.         TL=~TL;
  135.         temp=0;                                        //溫度為負  
  136.     }else temp=1;                                //溫度為正                    
  137.     tem=TH;                                         //獲得高八位
  138. ……………………

  139. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
DS18B20_A8.zip (2.56 KB, 下載次數: 17)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲福利在线观看 | 91精品国产91久久久久久密臀 | 91亚洲国产 | 国产一区二区三区久久久久久久久 | 国产色婷婷精品综合在线手机播放 | 亚洲精品一二三区 | 欧美福利专区 | 欧美成人一区二区三区 | 亚洲国产一区二区三区在线观看 | 国产精品日韩欧美一区二区三区 | 国产精品视频一区二区三区 | 久热电影 | 91社影院在线观看 | 久久99精品久久久久久国产越南 | 一级毛片在线播放 | 亚洲综合在线播放 | 国产精品欧美一区二区三区不卡 | 狠狠色综合欧美激情 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 福利视频网址 | 欧美中文字幕一区 | 欧美一区2区三区3区公司 | 日韩成人在线电影 | 成人超碰在线 | 国产午夜三级一区二区三 | 人干人人| 亚洲午夜精品视频 | 在线视频 亚洲 | 伊人超碰 | 日韩激情网 | 成人精品毛片国产亚洲av十九禁 | 激情国产在线 | 色姑娘av| 2019精品手机国产品在线 | www.色五月.com | 久久精品亚洲一区二区三区浴池 | 久久久91精品国产一区二区三区 | 亚洲一区欧美一区 | 小早川怜子xxxxaⅴ在线 | 天天久久 | h视频免费观看 |