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

QQ登錄

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

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

msp430開(kāi)發(fā)板溫度傳感器DS18B20控制程序,顯示環(huán)境溫度

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

  27.   if (i)
  28.   {
  29.     return 0x00;
  30.   }
  31.   else
  32.   {
  33.     return 0x01;
  34.   }
  35. }
  36. //*************************************************************************
  37. //   DS18B20讀一個(gè)字節(jié)函數(shù)
  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);           //*延時(shí)4uS
  50.     DQ_SET;
  51.     DQ_IN ;
  52.     delay_us(10);           //*延時(shí)10uS
  53.     if (DQ_R)
  54.     {
  55.       value|=0x80;  
  56.     }
  57.     delay_us(60);           //*延時(shí)60uS
  58.   }
  59.   return(value);
  60. }
  61. //*************************************************************************
  62. //   向18B20寫(xiě)一個(gè)字節(jié)函數(shù)
  63. //*************************************************************************  
  64. /*DS18B20字節(jié)寫(xiě)入函數(shù)*/
  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);     //延時(shí)4uS
  73.     if (value & 0x01)
  74.     {
  75.       DQ_SET;  
  76.     }
  77.     delay_us(80);     //延時(shí)80uS
  78.     DQ_SET;             //位結(jié)束
  79.     value >>= 1;
  80.   }
  81. }
  82. //*************************************************************************
  83. //    發(fā)送溫度轉(zhuǎn)換命令
  84. //*************************************************************************
  85. /*啟動(dòng)ds1820轉(zhuǎn)換*/
  86. void ds1820_start(void)
  87. {
  88.   DS18B20_Reset();
  89.   ds1820_write_byte(0xCC);           //勿略地址
  90.   ds1820_write_byte(0x44);           //啟動(dòng)轉(zhuǎn)換
  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的原因是為了把小數(shù)點(diǎn)后一位數(shù)據(jù)也轉(zhuǎn)化為可以顯示的數(shù)據(jù)
  111.                             //比如溫度本身為27.5度,為了在后續(xù)的數(shù)據(jù)處理程序中得到BCD碼,我們先放大到275
  112.                                           //然后在顯示的時(shí)候確定小數(shù)點(diǎn)的位置即可,就能顯示出27.5度了
  113.   return i;
  114. }
  115. //*************************************************************************
  116. //  溫度數(shù)據(jù)處理函數(shù)
  117. //*************************************************************************
  118. void data_do(uint temp_d)
  119. {
  120.    uint A2t;
  121.    A1=temp_d/100;                         //分出百,十,和個(gè)位
  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();                             //看門(mén)狗初始化
  134.   Clock_Init();                           //時(shí)鐘初始化
  135.   Port_Init();                            //端口初始化,用于控制IO口輸入或輸出
  136.   DS18B20_Reset();     //復(fù)位D18B20
  137.   while(1)
  138.   {
  139.     ds1820_start();            //啟動(dòng)一次轉(zhuǎn)換
  140.     ds1820_read_temp();            //讀取溫度數(shù)值
  141.     data_do(temp_value);                  //處理數(shù)據(jù),得到要顯示的值
  142.     for(j=0;j<200;j++)
  143.     {     
  144.       //Display_DS18B20(A1,A2,A3);        //顯示溫度值,用戶(hù)外擴(kuò)顯示器件后可用
  145.       LED8 = A2;                          //將溫度的個(gè)位顯示在LED8上,觸摸傳感器LED燈會(huì)變化        
  146.       
  147.     }
  148.   }
  149. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:584195 發(fā)表于 2021-11-14 10:23 | 顯示全部樓層
有沒(méi)有低功耗的例子
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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