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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC15F2K60S2單片機+esp8266+NTC APP溫度測量制作

  [復制鏈接]
跳轉到指定樓層
樓主
準備材料:
STC15F2K60S2
esp8266
NTC熱敏電阻
10K電阻一個
連接線若干
手機APP:NetAssist
參考貼子:http://www.zg4o1577.cn/bbs/dpj-57255-1.html

接線圖:


APP界面:


單片機源程序如下:
  1. #include<ADC.c>

  2. #define uchar unsigned char
  3. #define uint  unsigned int

  4. #define RELOAD_COUNT 0xFA         //宏定義波特率發生器的載入值
  5. #define MAIN_Fosc                22118400L        //定義主時鐘        
  6. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  7. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))        //Timer 2 重裝值, 對應300KHZ
  8. #define        BaudRate1                115200UL        //選擇波特率

  9. #define ID_ADDR_ROM 0xeff7      //60K程序空間的MCU
  10. #define ID_ADDR_RAM 0xef        //對于只有256字節RAM的MCU(大部分系列)存放地址為0EFH

  11. unsigned int code Ttable[106][2]={//溫度與電阻阻值對應關系表格
  12. 0,3274,//0度對應阻值32.74k
  13. 1,3111,//1度對應阻值31.11k
  14. 2,2957,//2度對應阻值29.57k
  15. 3,2812,//
  16. 4,2674,//
  17. 5,2545,6,2422,7,2306,8,2196,9,2092,10,1993,11,1900,12,1811,
  18. 13,1728,14,1648,15,1573,16,1501,17,1433,18,1369,19,1308,20,1250,
  19. 21,1194,22,1142,23,1092,24,1045,
  20. 25,1000,//25度對應阻值10k               
  21. 26,957,//26度對應阻值9.57k
  22. 27,916,28,877,29,840,30,805,31,771,32,739,33,709,34,679,35,652,
  23. 36,625,37,600,38,576,39,553,40,531,41,510,42,490,43,471,44,453,
  24. 45,435,46,418,47,402,48,387,49,372,50,358,51,345,52,332,53,320,
  25. 54,308,55,297,56,286,57,276,58,266,59,256,60,247,61,238, 62,230,
  26. 63,222,64,214,65,207,66,199,67,193,68,186,69,180,70,174,71,168,
  27. 72,162,73,157,74,        152,75,        147,76,        142,77,        137,78,        133,79,        128,
  28. 80,        124,81,        120,82,        116,83,        113,84,        109,85,        106,
  29. 86,        102,//86度對應阻值1.02k
  30. 87,        99,//87度對應阻值0.99k
  31. 88,        96,89,        93,90,        90,91,        88,92,        85,93,        82,94,        80,95,        78,
  32. 96,        75,97,        73,98,        71,99,        69,100,67,101,65,102,63,103,61, 104,59,
  33. 105,58//105度對應阻值0.58k
  34. };       

  35. #define receive_max 50          //串口接收緩沖長度   
  36. uchar Recive_table[receive_max];        //用于接收wifi模塊反饋到MCU上的數據
  37. u8 receive_count=0; //接受數據的個數
  38. u16 NTC_R;//定義熱敏電阻阻值變量
  39. int temperature;//定義溫度存儲變量
  40. sbit LED0=P3^7;

  41. uchar sent_table[receive_max];  


  42. void Uart_Init()//使用定時器1作為波特率發生器
  43. {
  44.     SCON |= 0x40;               //8位數據
  45.     P_SW1 &=  ~0xc0;       //UART1 使用P30 P31口  默認
  46.     TR1 = 0;                    //關閉定時器
  47.     TR1 = 0;                        //波特率使用Timer1產生
  48.     AUXR &= ~0x01;                //S1 BRT Use Timer1;
  49.     TMOD &= ~(1<<6);   //Timer1 set As Timer
  50.     TMOD &= ~0x30;     //Timer1_16bitAutoReload;2
  51.     AUXR |=  (1<<6);        //Timer1 set as 1T mode
  52.     TH1 = (u8)(Timer1_Reload >> 8);
  53.     TL1 = (u8)Timer1_Reload;
  54.     TR1  = 1;
  55.     PS = 1; //高優先級中斷
  56.     REN = 1;        //允許接收
  57.     ES  = 1;        //允許中斷
  58.     EA = 1;                //允許全局中斷
  59. }

  60. void Delay_ms(u16 n)
  61. {
  62.         unsigned int  i,j;
  63.         for(i=0;i<n;i++)
  64.                 for(j=0;j<123;j++);
  65. }

  66. void sendByte(uchar b)
  67. {   ES=0;
  68.     SBUF = b;
  69.     while(!TI);
  70.     TI=0;
  71.     ES=1;
  72. }
  73. void sendString(uchar *s)
  74. {
  75.     while(*s != '\0') //字符串默認結尾'\0',以此來判斷字符串的結束
  76.     {
  77.         sendByte(*s++);
  78.     }
  79. }


  80. void ESP8266_Set(uchar *puf) // 數組指針*puf指向字符串數組
  81. {
  82.     sendString(puf);
  83.     Delay_ms(10);
  84.     sendString("\r\n");//回車
  85. }

  86. void ESP8266_Sent(uchar *puf)      // 數組指針*puf指向字符串數組
  87. {
  88.     ESP8266_Set("AT+CIPSEND=0,60");
  89.     sendString(puf);
  90.     Delay_ms(10);
  91.     sendString("\r\n");   //回車
  92. }

  93. void ESP8266_Init()
  94. {
  95.         Delay_ms(2000);
  96.         Delay_ms(1000);
  97.         ESP8266_Set("AT+CIPMUX=1"); //啟動多連接
  98.     Delay_ms(5000);
  99.     LED0=!LED0;
  100.     ESP8266_Set("AT+CIPSERVER=1,333");//建立server,端口為333
  101. }


  102. void T_dis(){//溫度處理函數采集到的阻值與二維數組的阻值進行比較,從而獲得相對應的溫度值。
  103.          unsigned char i;
  104.         temperature = 0;
  105.          for(i=105;i<106;i--)  {
  106.                 if(NTC_R >= Ttable[i][1] && NTC_R < Ttable[i-1][1]){
  107.                    temperature=(Ttable[i][0]+1);
  108.                    break;
  109.                 }
  110.         }
  111. }


  112. void ADC_config(void)
  113. {
  114.         ADC_InitTypeDef                ADC_InitStructure;                                //結構定義
  115.         ADC_InitStructure.ADC_Px        = ADC_P10 | ADC_P11 | ADC_P12;        //設置要做ADC的IO,        ADC_P10 ~ ADC_P17(或操作),ADC_P1_All
  116.         ADC_InitStructure.ADC_Speed     = ADC_360T;                        //ADC速度                        ADC_90T,ADC_180T,ADC_360T,ADC_540T
  117.         ADC_InitStructure.ADC_Power     = ENABLE;                        //ADC功率允許/關閉        ENABLE,DISABLE
  118.         ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2;                //ADC結果調整,        ADC_RES_H2L8,ADC_RES_H8L2
  119.         ADC_InitStructure.ADC_Polity    = PolityLow;                //優先級設置        PolityHigh,PolityLow
  120.         ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中斷允許                ENABLE,DISABLE
  121.         ADC_Inilize(&ADC_InitStructure);                                        //初始化
  122.         ADC_PowerControl(ENABLE);                                                        //單獨的ADC電源操作函數, ENABLE或DISABLE
  123. }
  124. // convert to char
  125. char convert(u8 i) {
  126.         switch(i){
  127.                 case 0:
  128.                 return '0';
  129.                 case 1:
  130.                 return '1';
  131.                 case 2:
  132.                 return '2';
  133.                 case 3:
  134.                 return '3';
  135.                 case 4:
  136.                 return '4';
  137.                 case 5:
  138.                 return '5';
  139.                 case 6:
  140.                 return '6';
  141.                 case 7:
  142.                 return '7';
  143.                 case 8:
  144.                 return '8';
  145.                 case 9:
  146.                 return '9';
  147.                 default:
  148.                 return i;
  149.         }
  150. }


  151. void ShowResult(uchar ch)
  152. {
  153.     u16 adc_res10,//測量設定通道adc值
  154.         bandgap,  //bandgap預儲存校準值,單位毫伏
  155.     adc_9gallery_res; //測量第九通道(bandgap)值

  156.     float power_voltage,        //系統供電電壓,單位毫伏
  157.     R,ADC_voltage;     //設定通道電壓值,單位毫伏
  158.    
  159.     uchar code *cptr; //定義ROM(代碼)區指針
  160.    // uchar  idata *iptr;//定義RAM(內存)區指針
  161.    
  162.     cptr = ID_ADDR_ROM;         //從程序區讀取BandGap電壓值(單位:毫伏mV)
  163.     bandgap=*cptr++;
  164.     bandgap<<=8;
  165.     bandgap+=*cptr;
  166.     /*iptr = ID_ADDR_RAM;         //從內存區讀取BandGap電壓值(單位:毫伏mV)
  167.     bandgap=*iptr++;              //兩種方法結果一樣,上面的方法需要在下載式勾選"在ID號前添加重要測試參數"選項,才可在程序中獲取此參數
  168.     bandgap<<=8;                  //下面的方法不需要
  169.     bandgap+=*iptr; */  
  170.     //測量設定通道adc值
  171.     ADC_RES = 0;                    //清除結果寄存器
  172.     P1ASF = 0x80;                   //設置P1口為AD口
  173.     Get_ADC10bitResult(ch);
  174.     Get_ADC10bitResult(ch);                 //讀三次獲得穩定
  175.     adc_res10= Get_ADC10bitResult(ch);
  176.     //測量第九通道(bandgap)值
  177.     ADC_RES = 0;                    //清除結果寄存器
  178.     P1ASF = 0x00;                   //設置讀第九通道
  179.     Get_ADC10bitResult(0);                 //測bandgap時,調用此函數時通道數只能填0
  180.     Get_ADC10bitResult(0);                 //讀三次獲得穩定
  181.     adc_9gallery_res=Get_ADC10bitResult(0);
  182.     //計算系統供電電壓
  183.     power_voltage= (float)bandgap*1024/adc_9gallery_res;
  184.     //計算ADC通道測得電壓值
  185.     ADC_voltage= (float)bandgap*adc_res10/adc_9gallery_res;
  186.         R=1000*ADC_voltage/(power_voltage-ADC_voltage);
  187.         NTC_R=R;//把float浮點數轉化為int型
  188. }


  189. void main()
  190. {
  191.       
  192.         Uart_Init();
  193.         ESP8266_Init();
  194.         Delay_ms(20);//待系統穩定
  195.         ADC_config();
  196.        
  197.         while(1){

  198.                 ShowResult(7);

  199.         if(receive_count > 0)//如果接受到數據
  200.         {
  201.             Delay_ms(500);
  202.             receive_count = 0;//接收計數清0
  203.                          if(Recive_table[9]=='0') {
  204.                                
  205.                                  sent_table[receive_max]= '\0';
  206.                                
  207.                                 sent_table[0]='N';
  208.                                 sent_table[1]='T';
  209.                                 sent_table[2]='C';
  210.                                 sent_table[3]='=';
  211.                                 sent_table[4]=convert(NTC_R/1000);
  212.                                 sent_table[5]=convert(NTC_R%1000/100);
  213.                                 sent_table[6]=convert(NTC_R%100/10);
  214.                                 sent_table[7]=convert(NTC_R%10);
  215.                                
  216.                                 T_dis();
  217.                                 sent_table[8]='T';sent_table[9]='=';
  218.                                
  219.                                 sent_table[10]=convert(temperature%1000/100);
  220.                                 sent_table[11]=convert(temperature%100/10);
  221.                                 sent_table[12]=convert(temperature%10);
  222.                        
  223. ……………………

  224. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
NTC10K溫度計.zip (3.21 MB, 下載次數: 117)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:282506 發表于 2018-12-2 17:13 | 只看該作者
謝謝了!樓主辛苦了!!!!!!!!!!!!
回復

使用道具 舉報

板凳
ID:437861 發表于 2018-12-2 19:26 | 只看該作者
不錯啊
回復

使用道具 舉報

地板
ID:85480 發表于 2019-6-26 16:40 | 只看該作者
不錯不錯 學習學習!
回復

使用道具 舉報

5#
ID:207421 發表于 2019-6-27 13:21 | 只看該作者
不錯,8266也不錯。
回復

使用道具 舉報

6#
ID:589418 發表于 2019-7-24 10:36 | 只看該作者
溫度測量誤差為多少?
回復

使用道具 舉報

7#
ID:248392 發表于 2019-7-24 18:03 | 只看該作者
不錯不錯 學習學習!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本人爽p大片免费看 | www.天堂av.com| 中文字幕加勒比 | 中文字幕 亚洲一区 | 成人一区二区三区在线观看 | 久草在线在线精品观看 | 久热久草 | 久久999 | 亚洲国产精品久久 | 欧美日韩高清免费 | 亚洲国产精品99久久久久久久久 | 91高清免费观看 | 久久久久久亚洲精品 | 91精品国产91久久久久久最新 | avav在线看 | 伊人伊成久久人综合网站 | 91一区二区在线观看 | 欧美日韩在线观看视频网站 | 香蕉视频91 | 一区二区视频 | 久久精品—区二区三区 | 精品视频久久久 | 请别相信他免费喜剧电影在线观看 | 免费视频一区二区 | 国产成人短视频在线观看 | 狠狠涩 | 欧美一级特黄aaa大片在线观看 | 在线精品亚洲欧美日韩国产 | 国产成在线观看免费视频 | 久久久久久91| 久久三级影院 | 黑人成人网| 日韩福利| 超碰男人天堂 | 国产精品久久777777 | 日韩欧美精品在线 | 一区二区三区四区日韩 | 国产成人精品久久久 | 国产精品久久久久久久久久久久久久 | 亚洲淫视频 | 色综合桃花网 |