找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3125|回复: 14
打印 上一主题 下一主题
收起左侧

单片机NTC温度控制C语言程序 业余级别,只能编成这个样子了

[复制链接]
跳转到指定楼层
楼主
30黑币
NTC热敏电阻温度控制程序C 业余级别,只能编成这个样子了,根据这个神贴改的!已改好!控制口还没设置!

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

51hei截图20210902143658858.jpg

NTC10K温度计NTC.rar

2.35 MB, 下载次数: 69

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2021-9-2 15:48 | 只看该作者
麻烦你清楚的描述你的要求可以吗

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




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

回复

使用道具 举报

板凳
ID:366464 发表于 2021-9-2 16:55 来自手机 | 只看该作者
angmall 发表于 2021-9-2 15:48
麻烦你清楚的描述你的要求可以吗

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

STC15w408as添加按键控制温度上下限,调节上下限后闪烁后保存后显示实际温度!按键已定义好!所有文件在压缩包里!业余级,添加按键程序不显示!
回复

使用道具 举报

地板
ID:161164 发表于 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();
复制代码


回复

使用道具 举报

5#
ID:366464 发表于 2021-9-2 21:00 | 只看该作者

不能显示,无显示!原贴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. }        
复制代码

回复

使用道具 举报

6#
ID:366464 发表于 2021-9-2 21:13 | 只看该作者

修改了,还是不显示!
回复

使用道具 举报

7#
ID:366464 发表于 2021-9-2 22:48 | 只看该作者
已改好!
回复

使用道具 举报

8#
ID:161164 发表于 2021-9-3 00:58 | 只看该作者

有原贴档案吗?

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

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

#define light 12         //设置LED显示的亮度(值域:1~9)
注释已经写着1到9,你改成12结果就死循环了
回复

使用道具 举报

9#
ID:366464 发表于 2021-9-3 07:33 来自手机 | 只看该作者
发现了,太着急容易出错!谢谢,第四位在3.3上
回复

使用道具 举报

10#
ID:366464 发表于 2021-9-3 07:35 来自手机 | 只看该作者
15w404As  20脚 IO口紧张,以前的手工板试试看!NTc是小黑头!
回复

使用道具 举报

11#
ID:213173 发表于 2021-9-3 08:21 | 只看该作者
给你一个示例,把DS18B20温度值获取函数用ADC替换即可满足楼主意图。
DS18B20温度上下限报警STC1T单片机.zip (161.99 KB, 下载次数: 28)

回复

使用道具 举报

12#
ID:366464 发表于 2021-9-19 19:29 | 只看该作者
通过ikc8210大神指导已改好!膜拜众大师!
回复

使用道具 举报

13#
ID:366464 发表于 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    是不是在段选和位选分别加了一个总开关?
回复

使用道具 举报

14#
ID:366464 发表于 2021-9-23 02:15 | 只看该作者
位和段的解释74HC573     附链接!https://blog.csdn.net/qq_38391994/article/details/107296514
回复

使用道具 举报

15#
ID:366464 发表于 2021-10-15 21:58 | 只看该作者
非常感谢!   lkc8210    问题已解决!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表