想通过检测光线强弱来亮灭led灯,是哪个地方出错了吗

// ADC1转换的电压值通过MDA方式传到SRAM
extern __IO uint16_t ADC_ConvertedValue;

// 局部变量,用于保存转换计算后的电压值
float ADC_ConvertedValueLocal;

//static void Delay(__IO u32 nCount); int a;
int a = 2000;
int main(void)
{

/*初始化USART1*/
Debug_USART_Config();

    /* 初始化滑动变阻器用到的DAC,ADC数据采集完成后直接由DMA运输数据到ADC_ConvertedValue变量
            DMA直接改变ADC_ConvertedValue的值*/
Rheostat_Init();

printf("\r\n ----这是一个光敏电阻电压采集实验(DMA传输)----\r\n");

while(1)

{
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*(float)3.3; // 读取转换的AD值

  printf("\r\n The current AD value = 0x%04X \r\n", ADC_ConvertedValue); 
  printf("\r\n The current AD value = %f V \r\n",ADC_ConvertedValueLocal);  
        if (ADC_ConvertedValueLocal > a) 
        {
            LED1( OFF );    // 灭                
        }                      
        else
        {    
             LED1( ON );                 // 亮                
        }

}

}

跑起来什么现象?

问题出在这一步:
ADC_ConvertedValueLocal =(float) ADC_ConvertedValue/4096*(float)3.3; // 读取转换的AD值。

根据代码注释做出以下两种猜测,提供问题分析思路:

猜测一:
如代码注释中所说,若ADC_ConvertedValueLocal用于保存转换计算后的电压值,那么ADC_ConvertedValue应当是ADC1采样后的转化值,从程序计算可知所使用的ADC1应该为12位的,这个值应当是处于0 ~ 4096之间,那么计算出的ADC_ConvertedValueLocal 值应当是在0 ~ 3.3V之间,永远小于a(2000);

猜测二:
如代码注释所说,若ADC_ConvertedValue保存的是ADC1转换的电压值,那么ADC_ConvertedValueLocal应当是ADC1采样电压对应的量化值,计算方式应为:ADC_ConvertedValueLocal = (float) ADC_ConvertedValue / 3.3 * 4096;这样计算出的ADC_ConvertedValueLocal的值才有可能大于a(2000),或者小于等于a(2000)。