T老崔 发表于 2024-9-15 20:10:50

32G12K128, printf函数影响NTC测温程序?有printf函数,数码管上才有温度数

我学习的老师是冲哥的STC32G试验箱,买的是9.4试验箱,结果再写NTC测温时,出现了问题。
我写的程序实现的功能是用NTC测温,并将温度值显示到数码管上,同时,数码管设置的默认显示是8个"-"。
但是我发现我的程序只有当有printf时,数码管才会显示温度数值,如果把printf函数注释掉,数码管就是默认值。
我是嵌入式小白,第一次学ADC,求求大佬帮我看看吧{:5_270:}{:5_270:}{:5_270:}2828091896
main.c文件:(头文件包含没粘贴过来)

bit TIM_10MS_FLAG=0;
uint32_t TimCount=0;

int Temperature;
u8 Temp_Count=0;
void main()
{      
      
      USB_Download();
      Timer0_Init();
      ADC_Init();

      while(1)
      {
               
                if(DeviceState != DEVSTATE_CONFIGURED )
                        continue;
                if(bUsbOutReady)
                {
                        usb_OUT_done();
                        printf("温度:%d\n",ADC_Value_INT);
                }
                if(TIM_10MS_FLAG==1)
                {      
                        TIM_10MS_FLAG=0;
                        Temp_Count++;
                        if(Temp_Count==20)
                        {
                              Temp_Count=0;
               
                              Temperature=NTC_CalTemp(ADC_Value_INT);
                              if(Temperature>=0)
                              {
                                        SEG0=Temperature/1000%10;
                                        SEG1=Temperature/100%10;
                                        SEG2=Temperature/10%10 + 10;
                                        SEG3=Temperature%10;
                              }
                              else
                              {
                                        Temperature= -Temperature;
                                        SEG0=22;
                                        SEG1=Temperature/100%10;
                                        SEG2=Temperature/10%10 + 10;
                                        SEG3=Temperature%10;
                              }
                              
                        }
                }
      
      
      }

}




void Timer0_Isr(void) interrupt 1
{      
      SEG_LED_Display();
      TimCount++;
      if(TimCount>10)
      {
                TIM_10MS_FLAG=1;
                TimCount=0;
      }
}

ADC使用的是中断方式:(ADC.c)


u16 ADC_Value_INT;
u16 BGV=0;


void ADC_Init(void)   //
{
    P1M0 = 0x00;
      P1M1 = 0x08;//配置P13口位高阻输入
      ADC_CONTR &=0XE0;//选择通道
      ADC_CONTR |=0X03;
      
      ADC_POWER=1;//打开ADC电源
      ADCTIM=0X3F;//配置ADC时序
      ADCCFG=0X2F;//设置ADC转换结果为右对齐 ADC时钟为最低
      EADC=1;
      ADC_START=1;
}

void ADC_Isr(void) interrupt 5
{
      ADC_FLAG=0;
      ADC_Value_INT= (ADC_RES<<8) + ADC_RESL;
      ADC_START=1;
}

ADC.H文件:

#ifndef _ADC_H
#define _ADC_H

void ADC_Init(void);
extern u16 ADC_Value_INT;

#endif

NTC.c文件:


#include <STC32G.H>
#include "stc.h"

u16 NTC_ADCTable=
{
//ADC数值          温度      序号
      3956,         //-40      0
      3947,         //-39      1
      3937,         //-38      2
      3928,         //-37      3
      3918,         //-36      4
      3908,         //-35      5
      3897,         //-34      6
      3886,         //-33      7
      3874,         //-32      8
      3863,         //-31      9
      3850,         //-30      10
      3837,         //-29      11
      3824,         //-28      12
      3810,         //-27      13
      3795,         //-26      14
      3779,         //-25      15
      3763,         //-24      16
      3747,         //-23      17
      3729,         //-22      18
      3711,         //-21      19
      3693,         //-20      20
      3673,         //-19      21
      3653,         //-18      22
      3632,         //-17      23
      3610,         //-16      24
      3587,         //-15      25
      3563,         //-14      26
      3538,         //-13      27
      3513,         //-12      28
      3486,         //-11      29
      3458,         //-10      30
      3429,         //-9      31
      3400,         //-8      32
      3369,         //-7      33
      3338,         //-6      34
      3305,         //-5      35
      3272,         //-4      36
      3238,         //-3      37
      3203,         //-2      38
      3167,         //-1      39
      3131,         //0                40
      3093,         //1                41
      3055,         //2                42
      3016,         //3                43
      2977,         //4                44
      2936,         //5                45
      2895,         //6                46
      2853,         //7                47
      2811,         //8                48
      2768,         //9                49
      2725,         //10      50
      2682,         //11      51
      2637,         //12      52
      2593,         //13      53
      2548,         //14      54
      2503,         //15      55
      2458,         //16      56
      2412,         //17      57
      2366,         //18      58
      2321,         //19      59
      2275,         //20      60
      2229,         //21      61
      2184,         //22      62
      2138,         //23      63
      2093,         //24      64
      2048,         //25      65
      2003,         //26      66
      1959,         //27      67
      1914,         //28      68
      1871,         //29      69
      1827,         //30      70
      1784,         //31      71
      1742,         //32      72
      1699,         //33      73
      1658,         //34      74
      1617,         //35      75
      1577,         //36      76
      1537,         //37      77
      1498,         //38      78
      1459,         //39      79
      1421,         //40      80
      1384,         //41      81
      1348,         //42      82
      1312,         //43      83
      1277,         //44      84
      1243,         //45      85
      1209,         //46      86
      1176,         //47      87
      1144,         //48      88
      1112,         //49      89
      1082,         //50      90
      1052,         //51      91
      1023,         //52      92
      994 ,      //53      93
      966 ,      //54      94
      939 ,      //55      95
      913 ,      //56      96
      887 ,      //57      97
      862 ,      //58      98
      837 ,      //59      99
      813 ,      //60      100
      790 ,      //61      101
      768 ,      //62      102
      745 ,      //63      103
      724 ,      //64      104
      703 ,      //65      105
      683 ,      //66      106
      664 ,      //67      107
      644 ,      //68      108
      626 ,      //69      109
      608 ,      //70      110
      590 ,      //71      111
      573 ,      //72      112
      557 ,      //73      113
      541 ,      //74      114
      525 ,      //75      115
      510 ,      //76      116
      495 ,      //77      117
      481 ,      //78      118
      468 ,      //79      119
      454 ,      //80      120
      441 ,      //81      121
      429 ,      //82      122
      417 ,      //83      123
      405 ,      //84      124
      394 ,      //85      125
      382 ,      //86      126
      372 ,      //87      127
      361 ,      //88      128
      351 ,      //89      129
      342 ,      //90      130
      332 ,      //91      131
      323 ,      //92      132
      314 ,      //93      133
      305 ,      //94      134
      297 ,      //95      135
      289 ,      //96      136
      281 ,      //97      137
      274 ,      //98      138
      266 ,      //99      139
      259 ,      //100      140
      252 ,      //101      141
      246 ,      //102      142
      239 ,      //103      143
      233 ,      //104      144
      227 ,      //105      145
      221 ,      //106      146
      215 ,      //107      147
      209 ,      //108      148
      204 ,      //109      149
      199 ,      //110      150
      194 ,      //111      151
      189 ,      //112      152
      184 ,      //113      153
      179 ,      //114      154
      175 ,      //115      155
      170 ,      //116      156
      166 ,      //117      157
      162 ,      //118      158
      158 ,      //119      159
      154 ,      //120      160
      150 ,      //121      161
      146 ,      //122      162
      143 ,      //123      163
      139 ,      //124      164
      136 ,      //125      165
      133 ,      //126      166
      129 ,      //127      167
      126 ,      //128      168
      123 ,      //129      169
      120 ,      //130      170
      117 ,      //131      171
      114 ,      //132      172
      112 ,      //133      173
      109 ,      //134      174
      106 ,      //135      175
      104 ,      //136      176
      101 ,      //137      177
      99         ,      //138      178
      97         ,      //139      179
      94         ,      //140      180
      92         ,      //141      181
      90         ,      //142      182
      88         ,      //143      183
      86         ,      //144      184
      84         ,      //145      185
      82         ,      //146      186
      80         ,      //147      187
      78         ,      //148      188
      76         ,      //149      189
      75         ,      //150      190
};

int NTC_CalTemp(u16 ADC_Value)
{
      u8 i;
      float Temp;
      if(ADC_Value > NTC_ADCTable || ADC_Value < NTC_ADCTable)//超出测量范围的输出 9999
      {
                return 9999;
      }
      else
      {
                for(i=0;i<=190;i++)
                {
                        if( ADC_Value == NTC_ADCTable)
                        {
                              return (i-40)*10;
                        }
                        else if(ADC_Value < NTC_ADCTable)continue;
                        else
                        {
                              Temp = NTC_ADCTable - ADC_Value;//分子
                              Temp = Temp/(NTC_ADCTable - NTC_ADCTable)*10; // x/y 为小数部分 为了返回小数,再乘以10
                              Temp += (i-1-40)*10;   //返回温度的整数部分
                              return Temp;
                        }
                }
      }
      return 9999;
}


NTC.H文件:

#ifndef _NTC_H
#define _NTC_H

int NTC_CalTemp(u16 ADC_Value);

#endif









邮箱 发表于 2024-9-15 20:50:55

             if(DeviceState != DEVSTATE_CONFIGURED )
                        continue;
                if(bUsbOutReady)
                {
                        usb_OUT_done();
                        printf("温度:%d\n",ADC_Value_INT);
                }
试一下把上面注释

T老崔 发表于 2024-9-17 20:28:36

邮箱 发表于 2024-9-15 20:50
if(DeviceState != DEVSTATE_CONFIGURED )
                        continue;
            ...

还是不行

邮箱 发表于 2024-9-17 21:08:43

T老崔 发表于 2024-9-17 20:28
还是不行

把工程文件发过来我看下

soma 发表于 2024-9-17 22:47:04

printf函数不会影响程序吧,估计是逻辑的问题

晓飛飛 发表于 2024-9-19 00:20:46

这种问题也是小白常遇到的,建议先把printf的应用和显示代码调利索了,测量和显示使用一个全局变量来传递,不要混到一起调试,这样很容易出现bug定位误差,调试代码中,表现状态和实际原因有时候根本无法靠脑子联系到一起,这需要耐心、细心和技巧。

T老崔 发表于 2024-10-1 17:16:15

邮箱 发表于 2024-9-17 21:08
把工程文件发过来我看下

对不起,耽误您一点时间了

T老崔 发表于 2024-10-1 17:17:47

晓飛飛 发表于 2024-9-19 00:20
这种问题也是小白常遇到的,建议先把printf的应用和显示代码调利索了,测量和显示使用一个全局变量来传递, ...

谢谢您,我是真的小白,我真的第一次知道还会有BUG定位误差这件事

T老崔 发表于 2024-10-1 17:20:44

邮箱 发表于 2024-9-17 21:08
把工程文件发过来我看下

第一次用帖子,当时就是因为不知道怎么上传工程文件才直接发的代码文字,现在才知道还真能上传文件{:5_318:}

邮箱 发表于 2024-10-1 19:25:59

你看下可不可以
页: [1] 2
查看完整版本: 32G12K128, printf函数影响NTC测温程序?有printf函数,数码管上才有温度数