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

QQ登錄

只需一步,快速開始

搜索
查看: 4825|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)NTC溫度控制C語(yǔ)言程序 業(yè)余級(jí)別,只能編成這個(gè)樣子了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
30黑幣
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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:155507 發(fā)表于 2021-9-2 15:48 | 只看該作者
麻煩你清楚的描述你的要求可以嗎

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




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

回復(fù)

使用道具 舉報(bào)

板凳
ID:366464 發(fā)表于 2021-9-2 16:55 來(lái)自手機(jī) | 只看該作者
angmall 發(fā)表于 2021-9-2 15:48
麻煩你清楚的描述你的要求可以嗎

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

STC15w408as添加按鍵控制溫度上下限,調(diào)節(jié)上下限后閃爍后保存后顯示實(shí)際溫度!按鍵已定義好!所有文件在壓縮包里!業(yè)余級(jí),添加按鍵程序不顯示!
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 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è)定溫度閃爍顯示,用來(lái)指示設(shè)定溫度過(guò)程
  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ù)制代碼


回復(fù)

使用道具 舉報(bào)

5#
ID:366464 發(fā)表于 2021-9-2 21:00 | 只看該作者

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

  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è)定溫度過(guò)程
  159.                 uchar i,j;
  160.                 do
  161.                 {
  162.                         KeyScan();                                           //按鍵掃描

  163.                         

  164.                         for(i=0;i<2;i++)                        //設(shè)定溫度閃爍顯示,用來(lái)指示設(shè)定溫度過(guò)程
  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è)定溫度過(guò)程

  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.                 {                                                                   //防止按鍵按下過(guò)程中        升溫/降溫 多次,同時(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                                                                //無(wú)按鍵按下,標(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ù)制代碼

回復(fù)

使用道具 舉報(bào)

6#
ID:366464 發(fā)表于 2021-9-2 21:13 | 只看該作者

修改了,還是不顯示!
回復(fù)

使用道具 舉報(bào)

7#
ID:366464 發(fā)表于 2021-9-2 22:48 | 只看該作者
已改好!
回復(fù)

使用道具 舉報(bào)

8#
ID:161164 發(fā)表于 2021-9-3 00:58 | 只看該作者

有原貼檔案嗎?

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

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

#define light 12         //設(shè)置LED顯示的亮度(值域:1~9)
注釋已經(jīng)寫著1到9,你改成12結(jié)果就死循環(huán)了
回復(fù)

使用道具 舉報(bào)

9#
ID:366464 發(fā)表于 2021-9-3 07:33 來(lái)自手機(jī) | 只看該作者
發(fā)現(xiàn)了,太著急容易出錯(cuò)!謝謝,第四位在3.3上
回復(fù)

使用道具 舉報(bào)

10#
ID:366464 發(fā)表于 2021-9-3 07:35 來(lái)自手機(jī) | 只看該作者
15w404As  20腳 IO口緊張,以前的手工板試試看!NTc是小黑頭!
回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2021-9-3 08:21 | 只看該作者
給你一個(gè)示例,把DS18B20溫度值獲取函數(shù)用ADC替換即可滿足樓主意圖。
DS18B20溫度上下限報(bào)警STC1T單片機(jī).zip (161.99 KB, 下載次數(shù): 29)

回復(fù)

使用道具 舉報(bào)

12#
ID:366464 發(fā)表于 2021-9-19 19:29 | 只看該作者
通過(guò)ikc8210大神指導(dǎo)已改好!膜拜眾大師!
回復(fù)

使用道具 舉報(bào)

13#
ID:366464 發(fā)表于 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)?
回復(fù)

使用道具 舉報(bào)

14#
ID:366464 發(fā)表于 2021-9-23 02:15 | 只看該作者
位和段的解釋74HC573     附鏈接!https://blog.csdn.net/qq_38391994/article/details/107296514
回復(fù)

使用道具 舉報(bào)

15#
ID:366464 發(fā)表于 2021-10-15 21:58 | 只看該作者
非常感謝!   lkc8210    問題已解決!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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