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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2721|回復: 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. }
復制代碼


回復

使用道具 舉報

ID:584195 發表于 2021-11-14 10:23 | 顯示全部樓層
有沒有低功耗的例子
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表