找回密码
 立即注册
查看: 564|回复: 8

求教:用冲哥视频里的程序串口打印ADC数值

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 15:02:49 | 显示全部楼层 |阅读模式
视频里的程序打印的是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));
        }
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 2024-3-26 16:07:40 | 显示全部楼层
printf使用 %f 可以打印浮点数数据,将mv数据/1000,然后使用 %f 打印结果就行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 17:25:07 | 显示全部楼层
乘风*** 发表于 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





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 2024-3-26 17:33:10 | 显示全部楼层
mtia*** 发表于 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);
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 18:41:29 | 显示全部楼层
乘风*** 发表于 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,不会显示小数点和后面的数。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 19:33:06 | 显示全部楼层
乘风*** 发表于 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的函数改不出来,不知道什么问题。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-17 06:26:47
已绑定手机

19

主题

3231

回帖

5285

积分

论坛元老

积分
5285
发表于 2024-3-26 19:44:37 来自手机 | 显示全部楼层
mtiaopi 发表于 2024-3-26 18:41
u16 ADC_CAL_Voltage(u16 num)
{
        return num*2.5*1000/4096;

u16 返回不是float吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 20:42:28 | 显示全部楼层
so*** 发表于 2024-3-26 19:44
u16 返回不是float吗?

不是,int型,直接把U16改成float也不行,显示不出来
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-06-16 21:07:04

14

主题

54

回帖

1528

积分

金牌会员

积分
1528
发表于 2024-3-26 20:44:26 | 显示全部楼层
so*** 发表于 2024-3-26 19:44
u16 返回不是float吗?

我如果哪个*1000去掉就只显示0 1 2是没有小数点和小数点后的数字的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 16:01 , Processed in 0.216553 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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