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

標題: msp430開發板溫度傳感器DS18B20控制程序,顯示環境溫度 [打印本頁]

作者: weizhong993    時間: 2018-1-17 18:21
標題: msp430開發板溫度傳感器DS18B20控制程序,顯示環境溫度
/********************************************************************
//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. }
復制代碼



作者: zyluglugl    時間: 2021-11-14 10:23
有沒有低功耗的例子




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 米奇7777狠狠狠狠视频 | 日本久久久久久 | av特级毛片 | 一级aaaaaa毛片免费同男同女 | 国产成人精品一区二三区在线观看 | 中文字字幕一区二区三区四区五区 | 爱爱免费视频 | 在线视频三区 | 亚洲精品一区在线观看 | 国产成人高清 | а_天堂中文最新版地址 | 国产亚洲成av人在线观看导航 | 91精品国产欧美一区二区成人 | 午夜www | 国产九九九 | 皇色视频在线 | 欧美激情精品久久久久久变态 | 亚洲国产精品激情在线观看 | 日韩免费视频 | 91久久精品 | 色精品视频 | a在线观看 | 午夜电影网站 | 成人精品国产免费网站 | 九一视频在线播放 | 91看片网| 一区二区三区高清不卡 | 中文字幕视频网 | 亚洲在线视频 | 成人免费视频观看 | 毛片电影| 人人性人人性碰国产 | 日韩av高清 | 国产亚洲精品久久yy50 | 国产精品成人一区 | japanhd成人 | 国产在线播放一区二区三区 | 国产中文字幕在线 | 欧美a在线看 | 日韩av免费在线观看 | 国产亚洲精品一区二区三区 |