求教:用冲哥视频里的程序串口打印ADC数值
视频里的程序打印的是mv,如何转换成带小数的V打印出来#include "COMM/STC32G.h"
#include "COMM/usb.h"
#include "adc.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD="@STCISP#";
void main()
{
u16 adc_val;
sys_init();
usb_init();
ADC_init();
EA=1;
P2M0=0X00;
P2M1=0X00;
while(1)
{
delay_ms(2);
if(DeviceState !=DEVSTATE_CONFIGURED)
continue;
if(bUsbOutReady)
{
usb_OUT_done();
}
adc_val=ADC_Read(0);
printf ("当前ADC数\xfd值:%d\t%dmv\r\n",(int)adc_val,ADC_CAL_Voltage(adc_val));
}
}
printf使用 %f 可以打印浮点数数据,将mv数据/1000,然后使用 %f 打印结果就行。 乘风飞扬 发表于 2024-3-26 16:07
printf使用 %f 可以打印浮点数数据,将mv数据/1000,然后使用 %f 打印结果就行。 ...
printf ("当前ADC数\xfd值:%d\t%fmv\r\n",(int)adc_val,ADC_CAL_Voltage(adc_val/1000));
这样吗?改成这样的话显示就是下面的怎么调后面的0.000。。都不会变
当前ADC数值:1075 0.000000mv
mtiaopi 发表于 2024-3-26 17:25
printf ("当前ADC数\xfd值:%d\t%fmv\r\n",(int)adc_val,ADC_CAL_Voltage(adc_val/1000));
这样吗?改成 ...
我不知道你 ADC_CAL_Voltage 函数是怎么写的,但是从上面的代码猜测应该是这么改:
printf ("当前ADC数\xfd值:%d\t%fmv\r\n",(int)adc_val,ADC_CAL_Voltage(adc_val)/1000); 乘风飞扬 发表于 2024-3-26 17:33
我不知道你 ADC_CAL_Voltage 函数是怎么写的,但是从上面的代码猜测应该是这么改:
printf ("当前ADC数\x ...
u16 ADC_CAL_Voltage(u16 num)
{
return num*2.5*1000/4096;
}
一样的,直接改成%f不动其它地方显示就是0。000000不管ADC的数值怎么变,哪个都不会变,我把这个的*1000去掉就只显示0或1或2,不会显示小数点和后面的数。
乘风飞扬 发表于 2024-3-26 17:33
我不知道你 ADC_CAL_Voltage 函数是怎么写的,但是从上面的代码猜测应该是这么改:
printf ("当前ADC数\x ...
void main()
{
u16 adc_val;
// u16 adc_val1;
// u16 adc_val2;
sys_init();
usb_init();
ADC_init();
EA=1;
P2M0=0X00;
P2M1=0X00;
while(1)
{
float a;
delay_ms(2);
if(DeviceState !=DEVSTATE_CONFIGURED)
continue;
if(bUsbOutReady)
{
usb_OUT_done();
}
adc_val=ADC_Read(8);
a=adc_val*2.5/4096;
printf ("当前ADC数\xfd值:%d\t%fv\r\n",(int)adc_val,a);
当前ADC数值:2960 1.806641v
把程序改成这样就可以了,用哪个ADC_CAL_Voltage的函数改不出来,不知道什么问题。
mtiaopi 发表于 2024-3-26 18:41
u16 ADC_CAL_Voltage(u16 num)
{
return num*2.5*1000/4096;
u16 返回不是float吗? soma 发表于 2024-3-26 19:44
u16 返回不是float吗?
不是,int型,直接把U16改成float也不行,显示不出来 soma 发表于 2024-3-26 19:44
u16 返回不是float吗?
我如果哪个*1000去掉就只显示0 1 2是没有小数点和小数点后的数字的
页:
[1]