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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

msp430開發板溫度傳感器DS18B20控制程序,顯示環境溫度

[復制鏈接]
跳轉到指定樓層
樓主
ID:277100 發表于 2018-1-17 18:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/********************************************************************
//DM430-L型開發板溫度傳感器DS18B20控制程序,顯示環境溫度,未校準
//將溫度的個位顯示在LED8上,觸摸傳感器LED燈會變化,測試參考用
//DS18b20的C語言驅動程序,讀取當前環境溫度,顯示精度達0.1度,溫度范圍0-99度
//DS18B20 詳細引腳功能描述1、GND 地信號;2、DQ數據輸入出引腳。開漏單總線接口引腳。當被用在寄生電源下
//也可以向器件提供電源;3、VDD可選擇的VDD 引腳。當工作于寄生電源時,此引腳必須接地。
//DS18B20 的使用方法。DS18B20 采用的是1-Wire 總線協議方式
//即在一根數據線實現數據的雙向傳輸,數據腳接在P17上
********************************************************************/
  1. #include <msp430x14x.h>
  2. #include "Config.h"
  3. uint    temp_value;
  4. uint    temp,A1,A2,A3;                 //定義的變量,顯示數據處理
  5. //*************************************************************************
  6. //   初始化IO口子程序
  7. //*************************************************************************
  8. void Port_Init()
  9. {
  10.   LED8DIR  = 0xFF;                      //設置IO口方向為輸出
  11.   LED8 = 0xFF;                      //P2口初始設置為FF
  12. }
  13. //*************************************************************************
  14. //   DS18B20初始化
  15. //*************************************************************************
  16. unsigned char DS18B20_Reset(void)                //初始化和復位
  17. {
  18.   unsigned char i;
  19.   DQ_OUT;
  20.   DQ_CLR;
  21.   delay_us(500);    //延時500uS(480-960)
  22.   DQ_SET;
  23.   DQ_IN;
  24.   delay_us(80);            //延時80uS
  25.   i = DQ_R;
  26.   delay_us(500);    //延時500uS(保持>480uS)

  27.   if (i)
  28.   {
  29.     return 0x00;
  30.   }
  31.   else
  32.   {
  33.     return 0x01;
  34.   }
  35. }
  36. //*************************************************************************
  37. //   DS18B20讀一個字節函數
  38. //*************************************************************************
  39.    
  40. unsigned char ds1820_read_byte(void)
  41. {
  42.   unsigned char i;
  43.   unsigned char value = 0;
  44.   for (i = 8; i != 0; i--)
  45.   {
  46.     value >>= 1;
  47.     DQ_OUT;
  48.     DQ_CLR;
  49.     delay_us(4);           //*延時4uS
  50.     DQ_SET;
  51.     DQ_IN ;
  52.     delay_us(10);           //*延時10uS
  53.     if (DQ_R)
  54.     {
  55.       value|=0x80;  
  56.     }
  57.     delay_us(60);           //*延時60uS
  58.   }
  59.   return(value);
  60. }
  61. //*************************************************************************
  62. //   向18B20寫一個字節函數
  63. //*************************************************************************  
  64. /*DS18B20字節寫入函數*/
  65. void ds1820_write_byte(unsigned char value)
  66. {
  67.   unsigned char i;
  68.   for (i = 8; i != 0; i--)
  69.   {
  70.     DQ_OUT;
  71.     DQ_CLR;
  72.     delay_us(4);     //延時4uS
  73.     if (value & 0x01)
  74.     {
  75.       DQ_SET;  
  76.     }
  77.     delay_us(80);     //延時80uS
  78.     DQ_SET;             //位結束
  79.     value >>= 1;
  80.   }
  81. }
  82. //*************************************************************************
  83. //    發送溫度轉換命令
  84. //*************************************************************************
  85. /*啟動ds1820轉換*/
  86. void ds1820_start(void)
  87. {
  88.   DS18B20_Reset();
  89.   ds1820_write_byte(0xCC);           //勿略地址
  90.   ds1820_write_byte(0x44);           //啟動轉換
  91. }
  92. //*************************************************************************
  93. //    DS8B20讀取溫度信息
  94. //*************************************************************************
  95. unsigned int ds1820_read_temp(void)
  96. {
  97.   unsigned int i;
  98.   unsigned char buf[9];
  99.   DS18B20_Reset();
  100.   ds1820_write_byte(0xCC);           //勿略地址
  101.   ds1820_write_byte(0xBE);           //讀取溫度
  102.   for (i = 0; i < 9; i++)
  103.   {
  104.     buf[i] = ds1820_read_byte();
  105.   }
  106.   i = buf[1];
  107.   i <<= 8;
  108.   i |= buf[0];
  109.   temp_value=i;
  110.   temp_value=(uint)(temp_value*0.625);    //不是乘以0.0625的原因是為了把小數點后一位數據也轉化為可以顯示的數據
  111.                             //比如溫度本身為27.5度,為了在后續的數據處理程序中得到BCD碼,我們先放大到275
  112.                                           //然后在顯示的時候確定小數點的位置即可,就能顯示出27.5度了
  113.   return i;
  114. }
  115. //*************************************************************************
  116. //  溫度數據處理函數
  117. //*************************************************************************
  118. void data_do(uint temp_d)
  119. {
  120.    uint A2t;
  121.    A1=temp_d/100;                         //分出百,十,和個位
  122.    A2t=temp_d%100;
  123.    A2=A2t/10;
  124.    A3=A2t%10;
  125. }
  126. //***********************************************************************
  127. //            主程序
  128. //***********************************************************************
  129. void main(void)
  130. {
  131.   uchar j;
  132.   
  133.   WDT_Init();                             //看門狗初始化
  134.   Clock_Init();                           //時鐘初始化
  135.   Port_Init();                            //端口初始化,用于控制IO口輸入或輸出
  136.   DS18B20_Reset();     //復位D18B20
  137.   while(1)
  138.   {
  139.     ds1820_start();            //啟動一次轉換
  140.     ds1820_read_temp();            //讀取溫度數值
  141.     data_do(temp_value);                  //處理數據,得到要顯示的值
  142.     for(j=0;j<200;j++)
  143.     {     
  144.       //Display_DS18B20(A1,A2,A3);        //顯示溫度值,用戶外擴顯示器件后可用
  145.       LED8 = A2;                          //將溫度的個位顯示在LED8上,觸摸傳感器LED燈會變化        
  146.       
  147.     }
  148.   }
  149. }
復制代碼


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

使用道具 舉報

沙發
ID:584195 發表于 2021-11-14 10:23 | 只看該作者
有沒有低功耗的例子
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区在线观看 | 日韩久草 | 色视频在线免费观看 | 久久精品性视频 | 国产免费观看久久黄av片涩av | 亚洲成人免费 | 黑人巨大精品欧美一区二区免费 | 亚洲福利在线观看 | 亚洲+变态+欧美+另类+精品 | 亚洲美女av网站 | 免费国产一区二区 | 国产乱码精品一区二区三区中文 | 99这里只有精品视频 | 久久亚洲天堂 | 久久男人| 丝袜美腿一区二区三区动态图 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 手机在线一区二区三区 | 久久久久久国产精品久久 | 成人国产精品免费观看 | 一级毛片观看 | 日本成人一区二区 | 久草在线高清 | 午夜精品视频在线观看 | 尹人av | 亚洲欧洲一区二区 | 久久综合久久综合久久 | 成人夜晚看av | 国产成人jvid在线播放 | 久久一| 国产免费av在线 | 欧美激情精品久久久久久 | 国产精品视频入口 | 操一草| 一级欧美黄色片 | 国产精品资源在线 | 久久久91精品国产一区二区三区 | 成人在线免费视频观看 | 国内精品伊人久久久久网站 | 日韩中文字幕在线观看视频 | 久久亚洲欧美日韩精品专区 |