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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機NTC熱敏電阻MF52 10K 3435溫度采集C語言程序 溫度特性表

  [復制鏈接]
跳轉到指定樓層
樓主
51 NTC溫度采集C程序

單片機源程序如下:
  1. /*
  2. STC15單片機
  3. 實驗名稱:使用NTC電阻測量溫度
  4. 實驗內容:
  5.         使用NTC電阻測量溫度并顯示在數碼管上
  6.         讀取DS18B20模塊測量溫度參考比較
  7. 實驗器材:
  8.         STC15W408AS_DIP16 x1
  9.         DS18B20  x1
  10.         TM1637數碼管 x1
  11.         1%精度 熱敏電阻NTC-MF52-103/3435 10K 3435±1 x1
  12.         金屬膜電阻 1/4W 1% 五色環 10千歐 10K x1

  13. 在STC15單片機上使用NTC(10K)電阻測量溫度的基本方法:
  14.         電壓-->電阻-->溫度
  15. 1、先有一個準確且穩定的參考電壓,外部可以用TL431A,內部可以使用STC15系列芯片自帶的Bang Gap電壓;
  16. 2、如果用Bang Gap基準電壓,則需要使用第九通道讀取Bang Gap電壓相對于當前MCU供電電壓VDD的ADC讀數,然后計算出MCU供電電壓VDD;
  17. 3、有了Bang Gap電壓,再讀取NTC電阻電壓的ADC讀數,就可以計算出NTC電阻當前電壓;
  18. 4、有了NTC電阻電壓,MCU供電電壓VDD,就可以得到參考電阻(10k)的電壓,就可以計算出NTC電阻當前的阻值;
  19. 5、有了NTC電阻當前的阻值,查找溫度與NTC電阻阻值對應關系表,就可以得到溫度值;

  20. 實驗心得:
  21. 1、使用Bang Gap基準電壓,必須使用芯片內部IRC時鐘;
  22. 2、下載HEX時,需要勾選"在程序區的結束處添加重要測試參數"選項,才可在程序中讀取Bang Gap基準電壓;
  23. 3、溫度與NTC電阻阻值對應關系表,可用二分法查找提高速度;
  24. 4、查表得到的溫度精度只到整數位,可以用相鄰阻值區間估算小數位以提高準確度;
  25. 5、STC15W408AS的代碼空間僅8k,存不了字體數據,不適合使用液晶屏顯示輸出;
  26. 6、芯片的Band Gap基準電壓bdg_voltage可以視為常量,加電后讀取一次即可;

  27. */

  28. #include "config.h"
  29. #include "delay.h"
  30. #include "ds18b20.h"
  31. #include "adc.h"
  32. #include "ntc.h"
  33. #include "uart.h"
  34. #include "TM1637.h"

  35. bit timer_flag_200ms        = 0;        //200ms定時觸發標志位
  36. bit timer_flag_1s                = 0;        //1s定時觸發標志位
  37. bit timer_flag_5s                = 0;        //5s定時觸發標志位
  38. bit timer_flag_10s                = 0;        //10s定時觸發標志位

  39. uint16 timer_count = 0;

  40. int8 pdata sbuf[20] = {0};  //字符串緩沖區

  41. void Timer0Init(void);
  42. void English_Font_test(void);
  43. void UART_Cmd_Handler(uint8 *buf, uint8 len);
  44. void DS18B20_Update_Show(void);
  45. void NTC_Update_Show(void);
  46. uint8 binarySearch(uint16 *nums, uint8 len, int16 target);

  47. //主函數
  48. void main(void)
  49. {
  50.         uint8 pdata uart_cmd_buf[64] = {0};

  51.         //設置STC15W408AS單片機端口為標準模式
  52.         Config_Port();

  53.         //串口初始化,波特率9600
  54.         UART_Config_1(9600);
  55.         
  56.         //定時器0設置,1ms循環
  57.         Timer0Init();

  58.         //ADC功能初始化
  59.         ADC_Init();

  60.         //啟動DS18B20
  61.         DS18B20_Start();

  62.         // 事件處理循環
  63.         while(1)
  64.         {        
  65.                 UART_Cmd_Check(&uart_cmd_buf, sizeof(uart_cmd_buf)-1);
  66.                
  67.         if (timer_flag_10s)  //每隔10s執行以下分支
  68.         {
  69.                         printf("\r\n>timer_count %06u seconds.\r\n", 10*++timer_count);
  70.             timer_flag_10s = 0;

  71.                         NTC_Update_Show();
  72.                         DS18B20_Update_Show();
  73.                 }
  74.                
  75.         }   
  76. }

  77. #define T1MS (65536-FOSC/1000)      //1T模式,1ms
  78. //#define T1MS (65536-FOSC/12/1000) //12T模式,1ms

  79. void Timer0Init(void)                //1毫秒@22.1184MHz
  80. {
  81.     AUXR |= 0x80;                   //定時器0為1T模式
  82. //  AUXR &= 0x7f;                   //定時器0為12T模式

  83.     TMOD = 0x00;                    //設置定時器為模式0(16位自動重裝載)
  84.     TL0 = T1MS;                     //初始化計時值
  85.     TH0 = T1MS >> 8;
  86.     TR0 = 1;                        //定時器0開始計時
  87.     ET0 = 1;                        //使能定時器0中斷
  88.     EA = 1;
  89. }

  90. /* T0中斷服務函數,實現系統定時處理 */
  91. void Timer0_Interrupt_Service() interrupt 1
  92. {
  93.     static uint8 cnt_ms                = 0; // 毫秒計數器
  94.     static uint8 cnt_200ms        = 0; // 200毫秒計數器
  95.     static uint8 cnt_sec        = 0; // 秒計數器
  96.    
  97.     //定時200ms
  98.     if (++cnt_ms >= 200)
  99.     {
  100.         cnt_ms = 0;
  101.         timer_flag_200ms = 1;
  102.                 cnt_200ms++;
  103.         }

  104.         //定時1s
  105.         if (cnt_200ms >= 5)
  106.         {
  107.                 cnt_200ms = 0;
  108.                 timer_flag_1s = 1;

  109.                 if(255 > cnt_sec) cnt_sec++;
  110.                 else cnt_sec = 0;

  111.                 //定時5s
  112.                 if (0 == cnt_sec % 5)
  113.                 {
  114.                         timer_flag_5s = 1;
  115.                 }

  116.                 //定時10s
  117.                 if (0 == cnt_sec % 10)
  118.                 {
  119.                         timer_flag_10s = 1;
  120.                 }

  121.         }

  122.     UART_Rxd_Monitor(1);  //串口接收監控
  123. }

  124. /* 串口動作函數,根據接收到的命令幀執行響應的動作
  125.    buf-接收到的命令幀指針,len-命令幀長度 */
  126. void UART_Cmd_Handler(uint8 *buf, uint8 len)
  127. {
  128.         printf("\r\n>cmd recv: [%s] (len = %bu)\r\n", buf, len);
  129.         if(0 == strncmp("debug on", buf, 8))
  130.         {
  131.                 DEBUG_MODE = 1;
  132.                 printf(">cmd exec: debug on\r\n");
  133.         }
  134.         else if(0 == strncmp("debug off", buf, 9))
  135.         {
  136.                 DEBUG_MODE = 0;
  137.                 printf(">cmd exec: debug off\r\n");
  138.         }
  139.         else
  140.         {
  141.                 printf(">cmd unrecognized.\r\n");
  142.         }
  143. }


  144. void DS18B20_Update_Show(void)
  145. {
  146.         bit  sign = 0;
  147.         int16 val = 0;
  148.         int8 slen = 0;

  149.         //printf(">>>DS18B20: read...\r\n");

  150.         val = DS18B20_Read();
  151.         
  152.         if(0 > val)
  153.         {
  154.                 val *= -1;
  155.                 sign = 1;
  156.         }
  157.         
  158.         val %= 1000;

  159.         if(sign)
  160.         {
  161.                 sbuf[slen++] = '-';
  162.         }

  163.         //整數部分轉換為字符串
  164.         slen += sprintf(sbuf+slen, "%d.%d c", val / 10, val % 10);

  165.         //添加字符串結束符
  166.         sbuf[slen++] = '\0';

  167.         printf(">>>DS18B20 : %s\r\n", sbuf);
  168. }

  169. void NTC_Update_Show(void)
  170. {
  171.         int16 ntc_t = 0;
  172.         uint8 a, b, c;

  173.         ntc_t = NTC_ReadT();

  174.         sprintf(sbuf, "%4.1f", (float)ntc_t/10);

  175.         printf(">>>NTC_T   : %s c\r\n", sbuf);

  176.         //TM1637數碼管顯示測試
  177.         if(' ' == sbuf[0]) a = 22;
  178.         else if('-' == sbuf[0]) a = 21;
  179.         else a = sbuf[0] - '0';
  180.         b = sbuf[1] - '0';
  181.         c = sbuf[3] - '0';

  182.         // 使用TM1637數碼管模塊顯示NTC溫度,最后一位顯示字母c表示℃
  183.         TM1637_Display(a, b, c, 12);
  184. }
復制代碼


需要stc15的頭文件才能編譯:stc全系列頭文件下載:http://www.zg4o1577.cn/bbs/dpj-36960-1.html
所有資料51hei提供下載:
uart_ntc10k_STC15W408AS.7z (425 KB, 下載次數: 210)

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2021-6-24 18:17 | 只看該作者
樓主能發個原理圖或者介紹下電路怎么接嗎?特別是電阻和tm1637 部分 怎么接線?
回復

使用道具 舉報

板凳
ID:65956 發表于 2021-6-25 08:27 | 只看該作者
可以測到最小單位是多少,下載參考一下,支持一下
回復

使用道具 舉報

地板
ID:303281 發表于 2022-6-27 09:07 | 只看該作者
看一下計算公式。
回復

使用道具 舉報

5#
ID:303281 發表于 2022-6-27 09:08 | 只看該作者
可以測到最小單位是多少,下載參考一下,支持一下
回復

使用道具 舉報

6#
ID:411479 發表于 2022-7-11 21:53 來自手機 | 只看該作者
研究一下,感謝分享!
回復

使用道具 舉報

7#
ID:67705 發表于 2022-12-7 13:00 來自手機 | 只看該作者
參考下MF-52-3435的溫度表
回復

使用道具 舉報

8#
ID:951974 發表于 2022-12-12 22:44 | 只看該作者

研究一下,感謝分享!
回復

使用道具 舉報

9#
ID:298011 發表于 2023-1-29 21:49 | 只看該作者
學習下,也要測個溫度來控制風扇。
回復

使用道具 舉報

10#
ID:258145 發表于 2023-5-6 12:16 | 只看該作者
這個電路上怎么連接的呀?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品成人一区二区 | 黄片毛片| 亚洲视频国产视频 | 国产一级片91 | 日韩在线播放一区 | 亚洲香蕉在线视频 | 久久精品这里 | 国产高清一区二区三区 | 日韩在线小视频 | 九九热这里只有精品在线观看 | 亚洲高清在线观看 | 国产yw851.c免费观看网站 | 成人国产一区二区三区精品麻豆 | 超碰在线97国产 | 二区中文 | 美女黄色在线观看 | 欧美亚洲在线视频 | 秋霞国产 | 午夜精品在线观看 | 福利电影在线 | 人人干超碰 | 一区二区三区四区不卡视频 | www.日韩 | 狠狠的干 | 国产精品一区三区 | 久久久久久久久久一区 | 国产女人叫床高潮大片免费 | 中文字幕一区二区三区四区五区 | 成人免费视频一区二区 | 天天色天天色 | 538在线精品| 亚洲色图在线观看 | 亚洲视频一区二区三区四区 | 成人影院午夜 | 日本一级淫片免费啪啪3 | 男女网站免费 | 91一区二区三区 | 欧美极品一区二区 | 亚洲精彩视频在线观看 | 精品久久国产 | 国产午夜精品一区二区三区嫩草 |