ADC电压采集有问题

2019-07-21 08:24发布

我用MINI板采集电压,用的官方例程,加了下面的一句


if(adcx>=1.5)

  LED0=0;
else

  LED0=1;
电压大于1.5LED亮,可为什么我把电压加到2.0后它才会亮啊,单片机问题么,急急急急急急急

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
ZCLOVEPF
1楼-- · 2019-07-21 11:27
对啊,adcx是整形啊,temp才是浮点型。想省事的话直接定义个浮点型的a,然后在temp=(float)adcx*(3.3/4096);下面写a=temp;
szczyb1314
2楼-- · 2019-07-21 16:20
adcx的定义是整数不是小数吧,你的电压就是1.9强制取整也是1不可能大于1.5的
ZCLOVEPF
3楼-- · 2019-07-21 18:07
adcx  是浮点型还是整形啊,先把其他代码贴出来啊
大熊,
4楼-- · 2019-07-21 21:33
 精彩回答 2  元偷偷看……
大熊,
5楼-- · 2019-07-21 22:52
本帖最后由 大熊, 于 2018-10-23 14:11 编辑
szczyb1314 发表于 2018-10-23 13:53
adcx的定义是整数不是小数吧,你的电压就是1.9强制取整也是1不可能大于1.5的

是浮点型啊,官方例程,就后面加了一句

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "adc.h"

/************************************************
ALIENTEK 战舰STM32F103开发板实验17
ADC 实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/



int main(void)
{         
  u16 adcx;
        float temp;
        delay_init();                     //延时函数初始化         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
         LED_Init();                             //LED端口初始化
        LCD_Init();                                 
         Adc_Init();                                  //ADC初始化

        POINT_COLOR=RED;//设置字体为红 {MOD}
        LCD_ShowString(60,50,200,16,16,"WarShip STM32");        
        LCD_ShowString(60,70,200,16,16,"ADC TEST");        
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2015/1/14");        
        //显示提示信息
        POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
        LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");              
        LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");               
        while(1)
        {
                adcx=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
                temp=(float)adcx*(3.3/4096);
                adcx=temp;
                LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
                temp-=adcx;
                temp*=1000;
                LCD_ShowxNum(172,150,temp,3,16,0X80);
                if(adcx>=2.5)
                LED0=0;
        else
                LED0=1;
//                LED0=!LED0;
//                delay_ms(250);        
        }
}

大熊,
6楼-- · 2019-07-21 23:49
szczyb1314 发表于 2018-10-23 13:53
adcx的定义是整数不是小数吧,你的电压就是1.9强制取整也是1不可能大于1.5的

是浮点型啊,官方例程,就后面加了一句

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"         
#include "adc.h"

/************************************************
ALIENTEK 战舰STM32F103开发板实验17
ADC 实验
技术支持:www.openedv.com
淘宝店铺:http://eboard.taobao.com
关注微信公众平台微信号:"正点原子",免费获取STM32资料。
广州市星翼电子科技有限公司  
作者:正点原子 @ALIENTEK
************************************************/



int main(void)
{         
  u16 adcx;
        float temp;
        delay_init();                     //延时函数初始化          
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);                 //串口初始化为115200
        LED_Init();                             //LED端口初始化
        LCD_Init();                                
        Adc_Init();                                  //ADC初始化

        POINT_COLOR=RED;//设置字体为红 {MOD}
        LCD_ShowString(60,50,200,16,16,"WarShip STM32");       
        LCD_ShowString(60,70,200,16,16,"ADC TEST");       
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2015/1/14");       
        //显示提示信息
        POINT_COLOR=BLUE;//设置字体为蓝 {MOD}
        LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");             
        LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");               
        while(1)
        {
                adcx=Get_Adc_Average(ADC_Channel_1,10);
                LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
                temp=(float)adcx*(3.3/4096);
                adcx=temp;
                LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
                temp-=adcx;
                temp*=1000;
                LCD_ShowxNum(172,150,temp,3,16,0X80);
                if(adcx<=1.0)
                LED0=0;
        else
                LED0=1;
//                LED0=!LED0;
//                delay_ms(250);       
        }
}

一周热门 更多>