标题: 单片机NTC温度控制C语言程序 业余级别,只能编成这个样子了 [打印本页]

作者: zuiqf1978    时间: 2021-9-2 14:47
标题: 单片机NTC温度控制C语言程序 业余级别,只能编成这个样子了
NTC热敏电阻温度控制程序C 业余级别,只能编成这个样子了,根据这个神贴改的!已改好!控制口还没设置!

51hei截图20210902143658858.jpg (167.32 KB, 下载次数: 133)

51hei截图20210902143658858.jpg

NTC10K温度计NTC.rar

2.35 MB, 下载次数: 73


作者: angmall    时间: 2021-9-2 15:48
麻烦你清楚的描述你的要求可以吗

问问题要提供背景资料  用啥单片机? 有啥外设? 用什么电源? 代码怎么写?
如果有问题,必须说出是什么样子,又要达到什么样子?




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


作者: zuiqf1978    时间: 2021-9-2 16:55
angmall 发表于 2021-9-2 15:48
麻烦你清楚的描述你的要求可以吗

问问题要提供背景资料  用啥单片机? 有啥外设? 用什么电源? 代码怎 ...

STC15w408as添加按键控制温度上下限,调节上下限后闪烁后保存后显示实际温度!按键已定义好!所有文件在压缩包里!业余级,添加按键程序不显示!
作者: lkc8210    时间: 2021-9-2 18:01
本帖最后由 lkc8210 于 2021-9-2 18:03 编辑
zuiqf1978 发表于 2021-9-2 16:55
STC15w408as添加按键控制温度上下限,调节上下限后闪烁后保存后显示实际温度!按键已定义好!所有文件在 ...
  1.             for(i=0; i<2; i++)                        //设定温度闪烁显示,用来指示设定温度过程
  2.             {   //实际温度常量

  3.                 if( i==0 )                                //设定温度显示
  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]);//温度个位//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  9.                         diplay_data (1,disdata[17]);//温度符号℃
  10.                     }

  11.                 if( i==1 )                                   //设定温度不显示
  12.                     for(j=0; j<20; j++)
  13.                     {
  14.                         delay1ms();
  15.                         delay1ms();
复制代码



作者: zuiqf1978    时间: 2021-9-2 21:00
lkc8210 发表于 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;//定义温度存储变量
  9. unsigned int code Ttable[106][2]={//温度与电阻阻值对应关系表格
  10. 0,3274,//0度对应阻值32.74k
  11. 1,3111,//1度对应阻值31.11k
  12. 2,2957,//2度对应阻值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度对应阻值10k               
  36. 26,957,//26度对应阻值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度对应阻值1.02k
  97. 87,        99,//87度对应阻值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度对应阻值0.58k
  116.          

  117. };        
  118. #include<4LED_YIN.H>//数码管驱动显示程序
  119. #include <BandGap.H>//包含读单片机内部BandGap基准电压值
  120. void T_dis(){//温度处理函数采集到的阻值与二维数组的阻值进行比较,
  121.                //从而获得相对应的温度值。
  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;                           //设定温度初始化为 40 摄氏度1!!!
  131. float RealT = 25;                          //实际温度初始化为 25 摄氏度2!!!
  132. void SetTemperature();                //设定温度 3!!!
  133. void KeyScan();                                  //按键扫描 4!!!
  134. void SetTdisp();                           //设定温度显示5!!!
  135. void RealTdisp();                        //实际温度显示6!!!

  136. /********************************/
  137. void main (void)
  138. {        Delay20ms();//待系统稳定
  139.     InitADC();//初始化ADC
  140.     P1M1=0X80;//P1.7高阻输入
  141.         init();//IO口设置初始化
  142.         SetTdisp();                        //设定温度显示10!!!
  143.     while (1)
  144.    {
  145.    
  146.             SetTemperature();        //设定温度8!!!
  147.                
  148.         ShowResult(7);//测量NTC热敏电阻上的电压并根据电压计算出阻值
  149.                 T_dis();//测量到的阻值进行查表对比找到阻值对应的温度值
  150.                 disp();        //数码管显示温度值
  151.                
  152.                 RealTdisp();                //实际温度显示11!!!
  153.     }
  154.           }
  155.   void SetTemperature()                                        //设定温度
  156. {
  157.         if( !(Key_Tup & Key_Tdown) )                 //检测 升温/降温 按键是否按下
  158.         {                                                                        //进入设定温度过程
  159.                 uchar i,j;
  160.                 do
  161.                 {
  162.                         KeyScan();                                           //按键扫描

  163.                         

  164.                         for(i=0;i<2;i++)                        //设定温度闪烁显示,用来指示设定温度过程
  165.                         {                                                        //实际温度常量

  166.                                 if( i==0 )                                //设定温度显示
  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]);//温度个位
  172.                 diplay_data (1,disdata[17]);//温度符号℃
  173.                                         }
  174.                                 
  175.                                 if( i==1 )                                   //设定温度不显示
  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]);//温度个位
  183.                 diplay_data (1,disdata[17]);//温度符号℃        
  184.             
  185.             
  186.         
  187.                                         }
  188.                                                         
  189.                         }

  190.                 }while(Key_Confirm);                        //直到确认键按下,退出设定温度过程

  191.         }

  192.         return;
  193. }

  194.     void KeyScan()                                                         //按键扫描
  195. {
  196.         static uchar flag = 0;                                   //设置标志位

  197.         if( !(Key_Tup & Key_Tdown) )                   //检测 升温/降温 按键是否按下
  198.         {
  199.                 if(!flag)                                                   //标志位为0时才进行 升温/降温,产生延时效果
  200.                 {                                                                   //防止按键按下过程中        升温/降温 多次,同时不占用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++;                                                        //标志位加一

  216.                 if(flag == 15);                                        //标志位加到15清零
  217.                         flag = 0;
  218.         }                        
  219.         else                                                                //无按键按下,标志位清零
  220.                 flag = 0;

  221.         return;
  222. }
  223.     void SetTdisp()                                                        //设定温度显示
  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]);//温度个位
  230.                 diplay_data (1,disdata[17]);//温度符号℃        
  231.                 }
  232.         return;
  233. }

  234. void RealTdisp()                                                //实际温度显示
  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]);//温度个位
  241.                 diplay_data (1,disdata[17]);//温度符号℃
  242.         }
  243.         return;
  244. }        
复制代码


作者: zuiqf1978    时间: 2021-9-2 21:13
lkc8210 发表于 2021-9-2 18:01

修改了,还是不显示!
作者: zuiqf1978    时间: 2021-9-2 22:48
已改好!
作者: lkc8210    时间: 2021-9-3 00:58
zuiqf1978 发表于 2021-9-2 22:48
已改好!

有原贴档案吗?

原贴是三位数码管
你改为四位
新加那位用了P17
正好就是原来接NTC的ADC脚
那你现在用什么来收NTC?

新的数码管显示实在太啰嗦了

#define light 12         //设置LED显示的亮度(值域:1~9)
注释已经写着1到9,你改成12结果就死循环了
作者: zuiqf1978    时间: 2021-9-3 07:33
发现了,太着急容易出错!谢谢,第四位在3.3上
作者: zuiqf1978    时间: 2021-9-3 07:35
15w404As  20脚 IO口紧张,以前的手工板试试看!NTc是小黑头!
作者: wulin    时间: 2021-9-3 08:21
给你一个示例,把DS18B20温度值获取函数用ADC替换即可满足楼主意图。
DS18B20温度上下限报警STC1T单片机.zip (161.99 KB, 下载次数: 29)


作者: zuiqf1978    时间: 2021-9-19 19:29
通过ikc8210大神指导已改好!膜拜众大师!
作者: zuiqf1978    时间: 2021-9-23 01:59
#define SET  P34                            //定义调整键
#define ADD  P35                            //定义增加键
#define DEC  P32                            //定义减少键
#define BEEP P23                            //定义蜂鸣器
#define limit_H P30                                //定义上限灯光报警
#define limit_L P31                                //定义下限灯光报警
#define DU   P20
#define WE   P21
uchar code  LEDData[]={                        //共阴数码管段码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};//共阴数码管位码
请问大师:DU  P20   WE  P21    是不是在段选和位选分别加了一个总开关?
作者: zuiqf1978    时间: 2021-9-23 02:15
位和段的解释74HC573     附链接!https://blog.csdn.net/qq_38391994/article/details/107296514
作者: zuiqf1978    时间: 2021-10-15 21:58
非常感谢!   lkc8210    问题已解决!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1