標(biāo)題: 單片機(jī)NTC溫度控制C語言程序 業(yè)余級(jí)別,只能編成這個(gè)樣子了 [打印本頁(yè)]

作者: zuiqf1978    時(shí)間: 2021-9-2 14:47
標(biāo)題: 單片機(jī)NTC溫度控制C語言程序 業(yè)余級(jí)別,只能編成這個(gè)樣子了
NTC熱敏電阻溫度控制程序C 業(yè)余級(jí)別,只能編成這個(gè)樣子了,根據(jù)這個(gè)神貼改的!已改好!控制口還沒設(shè)置!

51hei截圖20210902143658858.jpg (167.32 KB, 下載次數(shù): 133)

51hei截圖20210902143658858.jpg

NTC10K溫度計(jì)NTC.rar

2.35 MB, 下載次數(shù): 73


作者: angmall    時(shí)間: 2021-9-2 15:48
麻煩你清楚的描述你的要求可以嗎

問問題要提供背景資料  用啥單片機(jī)? 有啥外設(shè)? 用什么電源? 代碼怎么寫?
如果有問題,必須說出是什么樣子,又要達(dá)到什么樣子?




http://www.torrancerestoration.com/bbs/dpj-57255-1.html


作者: zuiqf1978    時(shí)間: 2021-9-2 16:55
angmall 發(fā)表于 2021-9-2 15:48
麻煩你清楚的描述你的要求可以嗎

問問題要提供背景資料  用啥單片機(jī)? 有啥外設(shè)? 用什么電源? 代碼怎 ...

STC15w408as添加按鍵控制溫度上下限,調(diào)節(jié)上下限后閃爍后保存后顯示實(shí)際溫度!按鍵已定義好!所有文件在壓縮包里!業(yè)余級(jí),添加按鍵程序不顯示!
作者: lkc8210    時(shí)間: 2021-9-2 18:01
本帖最后由 lkc8210 于 2021-9-2 18:03 編輯
zuiqf1978 發(fā)表于 2021-9-2 16:55
STC15w408as添加按鍵控制溫度上下限,調(diào)節(jié)上下限后閃爍后保存后顯示實(shí)際溫度!按鍵已定義好!所有文件在 ...
  1.             for(i=0; i<2; i++)                        //設(shè)定溫度閃爍顯示,用來指示設(shè)定溫度過程
  2.             {   //實(shí)際溫度常量

  3.                 if( i==0 )                                //設(shè)定溫度顯示
  4.                     for(j=0; j<20; j++)
  5.                     {
  6.                         diplay_data (4,disdata[SetT/100]);//溫度十位//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  7.                         diplay_data (3,disdata[SetT/10]);//溫度十位//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  8.                         diplay_data (2,disdata[SetT%10]);//溫度個(gè)位//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  9.                         diplay_data (1,disdata[17]);//溫度符號(hào)℃
  10.                     }

  11.                 if( i==1 )                                   //設(shè)定溫度不顯示
  12.                     for(j=0; j<20; j++)
  13.                     {
  14.                         delay1ms();
  15.                         delay1ms();
復(fù)制代碼



作者: zuiqf1978    時(shí)間: 2021-9-2 21:00
lkc8210 發(fā)表于 2021-9-2 18:01

不能顯示,無顯示!原貼KEX可以顯示溫度!但無按鍵!

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

  117. };        
  118. #include<4LED_YIN.H>//數(shù)碼管驅(qū)動(dòng)顯示程序
  119. #include <BandGap.H>//包含讀單片機(jī)內(nèi)部BandGap基準(zhǔn)電壓值
  120. void T_dis(){//溫度處理函數(shù)采集到的阻值與二維數(shù)組的阻值進(jìn)行比較,
  121.                //從而獲得相對(duì)應(yīng)的溫度值。
  122.          unsigned char i;
  123.          for(i=105;i<106;i--)  {
  124.                 if(NTC_R >= Ttable[i][1] && NTC_R < Ttable[i-1][1]){
  125.                    temperature=(Ttable[i][0]+1);
  126.                    break;
  127.                 }
  128.         }
  129. }
  130. char SetT = 40;                           //設(shè)定溫度初始化為 40 攝氏度1!!!
  131. float RealT = 25;                          //實(shí)際溫度初始化為 25 攝氏度2!!!
  132. void SetTemperature();                //設(shè)定溫度 3!!!
  133. void KeyScan();                                  //按鍵掃描 4!!!
  134. void SetTdisp();                           //設(shè)定溫度顯示5!!!
  135. void RealTdisp();                        //實(shí)際溫度顯示6!!!

  136. /********************************/
  137. void main (void)
  138. {        Delay20ms();//待系統(tǒng)穩(wěn)定
  139.     InitADC();//初始化ADC
  140.     P1M1=0X80;//P1.7高阻輸入
  141.         init();//IO口設(shè)置初始化
  142.         SetTdisp();                        //設(shè)定溫度顯示10!!!
  143.     while (1)
  144.    {
  145.    
  146.             SetTemperature();        //設(shè)定溫度8!!
  147.                
  148.         ShowResult(7);//測(cè)量NTC熱敏電阻上的電壓并根據(jù)電壓計(jì)算出阻值
  149.                 T_dis();//測(cè)量到的阻值進(jìn)行查表對(duì)比找到阻值對(duì)應(yīng)的溫度值
  150.                 disp();        //數(shù)碼管顯示溫度值
  151.                
  152.                 RealTdisp();                //實(shí)際溫度顯示11!!!
  153.     }
  154.           }
  155.   void SetTemperature()                                        //設(shè)定溫度
  156. {
  157.         if( !(Key_Tup & Key_Tdown) )                 //檢測(cè) 升溫/降溫 按鍵是否按下
  158.         {                                                                        //進(jìn)入設(shè)定溫度過程
  159.                 uchar i,j;
  160.                 do
  161.                 {
  162.                         KeyScan();                                           //按鍵掃描

  163.                         

  164.                         for(i=0;i<2;i++)                        //設(shè)定溫度閃爍顯示,用來指示設(shè)定溫度過程
  165.                         {                                                        //實(shí)際溫度常量

  166.                                 if( i==0 )                                //設(shè)定溫度顯示
  167.                                         for(j=0;j<20;j++)
  168.                                         {
  169.             diplay_data (4,disdata[SetT/100]);//溫度十位
  170.                 diplay_data (3,disdata[SetT/10]);//溫度十位
  171.                 diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
  172.                 diplay_data (1,disdata[17]);//溫度符號(hào)℃
  173.                                         }
  174.                                 
  175.                                 if( i==1 )                                   //設(shè)定溫度不顯示
  176.                                         for(j=0;j<20;j++)
  177.                                         {
  178.                                                 delay1ms();
  179.                                                 delay1ms();
  180.                 diplay_data (4,disdata[SetT/100]);//溫度十位
  181.                 diplay_data (3,disdata[SetT/10]);//溫度十位
  182.                 diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
  183.                 diplay_data (1,disdata[17]);//溫度符號(hào)℃        
  184.             
  185.             
  186.         
  187.                                         }
  188.                                                         
  189.                         }

  190.                 }while(Key_Confirm);                        //直到確認(rèn)鍵按下,退出設(shè)定溫度過程

  191.         }

  192.         return;
  193. }

  194.     void KeyScan()                                                         //按鍵掃描
  195. {
  196.         static uchar flag = 0;                                   //設(shè)置標(biāo)志位

  197.         if( !(Key_Tup & Key_Tdown) )                   //檢測(cè) 升溫/降溫 按鍵是否按下
  198.         {
  199.                 if(!flag)                                                   //標(biāo)志位為0時(shí)才進(jìn)行 升溫/降溫,產(chǎn)生延時(shí)效果
  200.                 {                                                                   //防止按鍵按下過程中        升溫/降溫 多次,同時(shí)不占用CPU
  201.                         if(!Key_Tup)                                   //升溫
  202.                         {
  203.                                 SetT++;
  204.                                 if(SetT > 99)
  205.                                         SetT = 0;
  206.                         }

  207.                         if(!Key_Tdown)                                   //降溫
  208.                         {
  209.                                 SetT--;
  210.                                 if(SetT < 0)
  211.                                         SetT = 0;
  212.                         }
  213.                 }
  214.                
  215.                 flag++;                                                        //標(biāo)志位加一

  216.                 if(flag == 15);                                        //標(biāo)志位加到15清零
  217.                         flag = 0;
  218.         }                        
  219.         else                                                                //無按鍵按下,標(biāo)志位清零
  220.                 flag = 0;

  221.         return;
  222. }
  223.     void SetTdisp()                                                        //設(shè)定溫度顯示
  224. {                        unsigned int i;
  225.                  for(i=0;i<50;i++)
  226.     {
  227.                 diplay_data (4,disdata[SetT/100]);//溫度十位
  228.                 diplay_data (3,disdata[SetT/10]);//溫度十位
  229.                 diplay_data (2,disdata[SetT%10]);//溫度個(gè)位
  230.                 diplay_data (1,disdata[17]);//溫度符號(hào)℃        
  231.                 }
  232.         return;
  233. }

  234. void RealTdisp()                                                //實(shí)際溫度顯示
  235. {
  236.         unsigned int i;
  237.          for(i=0;i<50;i++){
  238.             diplay_data (4,disdata[temperature/100]);//溫度十位
  239.                 diplay_data (3,disdata[temperature/10]);//溫度十位
  240.                 diplay_data (2,disdata[temperature%10]);//溫度個(gè)位
  241.                 diplay_data (1,disdata[17]);//溫度符號(hào)℃
  242.         }
  243.         return;
  244. }        
復(fù)制代碼


作者: zuiqf1978    時(shí)間: 2021-9-2 21:13
lkc8210 發(fā)表于 2021-9-2 18:01

修改了,還是不顯示!
作者: zuiqf1978    時(shí)間: 2021-9-2 22:48
已改好!
作者: lkc8210    時(shí)間: 2021-9-3 00:58
zuiqf1978 發(fā)表于 2021-9-2 22:48
已改好!

有原貼檔案嗎?

原貼是三位數(shù)碼管
你改為四位
新加那位用了P17
正好就是原來接NTC的ADC腳
那你現(xiàn)在用什么來收NTC?

新的數(shù)碼管顯示實(shí)在太啰嗦了

#define light 12         //設(shè)置LED顯示的亮度(值域:1~9)
注釋已經(jīng)寫著1到9,你改成12結(jié)果就死循環(huán)了
作者: zuiqf1978    時(shí)間: 2021-9-3 07:33
發(fā)現(xiàn)了,太著急容易出錯(cuò)!謝謝,第四位在3.3上
作者: zuiqf1978    時(shí)間: 2021-9-3 07:35
15w404As  20腳 IO口緊張,以前的手工板試試看!NTc是小黑頭!
作者: wulin    時(shí)間: 2021-9-3 08:21
給你一個(gè)示例,把DS18B20溫度值獲取函數(shù)用ADC替換即可滿足樓主意圖。
DS18B20溫度上下限報(bào)警STC1T單片機(jī).zip (161.99 KB, 下載次數(shù): 29)


作者: zuiqf1978    時(shí)間: 2021-9-19 19:29
通過ikc8210大神指導(dǎo)已改好!膜拜眾大師!
作者: zuiqf1978    時(shí)間: 2021-9-23 01:59
#define SET  P34                            //定義調(diào)整鍵
#define ADD  P35                            //定義增加鍵
#define DEC  P32                            //定義減少鍵
#define BEEP P23                            //定義蜂鳴器
#define limit_H P30                                //定義上限燈光報(bào)警
#define limit_L P31                                //定義下限燈光報(bào)警
#define DU   P20
#define WE   P21
uchar code  LEDData[]={                        //共陰數(shù)碼管段碼0~f-.
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,
        0x40,0x80};
uchar code  wela[]={0xfe,0xfd,
0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共陰數(shù)碼管位碼
請(qǐng)問大師:DU  P20   WE  P21    是不是在段選和位選分別加了一個(gè)總開關(guān)?
作者: zuiqf1978    時(shí)間: 2021-9-23 02:15
位和段的解釋74HC573     附鏈接!https://blog.csdn.net/qq_38391994/article/details/107296514
作者: zuiqf1978    時(shí)間: 2021-10-15 21:58
非常感謝!   lkc8210    問題已解決!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1