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
if(DeviceState != DEVSTATE_CONFIGURED )
continue;
if(bUsbOutReady)
{
usb_OUT_done();
printf("温度:%d\n",ADC_Value_INT);
}
试一下把上面注释 邮箱 发表于 2024-9-15 20:50
if(DeviceState != DEVSTATE_CONFIGURED )
continue;
...
还是不行 T老崔 发表于 2024-9-17 20:28
还是不行
把工程文件发过来我看下 printf函数不会影响程序吧,估计是逻辑的问题 这种问题也是小白常遇到的,建议先把printf的应用和显示代码调利索了,测量和显示使用一个全局变量来传递,不要混到一起调试,这样很容易出现bug定位误差,调试代码中,表现状态和实际原因有时候根本无法靠脑子联系到一起,这需要耐心、细心和技巧。 邮箱 发表于 2024-9-17 21:08
把工程文件发过来我看下
对不起,耽误您一点时间了
晓飛飛 发表于 2024-9-19 00:20
这种问题也是小白常遇到的,建议先把printf的应用和显示代码调利索了,测量和显示使用一个全局变量来传递, ...
谢谢您,我是真的小白,我真的第一次知道还会有BUG定位误差这件事 邮箱 发表于 2024-9-17 21:08
把工程文件发过来我看下
第一次用帖子,当时就是因为不知道怎么上传工程文件才直接发的代码文字,现在才知道还真能上传文件{:5_318:} 你看下可不可以
页:
[1]
2