当前位置: 代码迷 >> 单片机 >> 51单片机if 比较大小老掉牙失败
  详细解决方案

51单片机if 比较大小老掉牙失败

热度:165   发布时间:2016-04-28 14:55:39.0
51单片机if 比较大小老失败

ulong lCounter=0XA59;
//lCounter=ADCData;
lCounter = (ADOL&0XF)|(ADOH<<4);
//lCounter = ADCData&0XFFFF;
///led_display_test(lCounter>>4,2);
//led_display_test(lCounter&0xf,1);
led_display_test(lCounter>>4,1);

if(lCounter <= adc_value[0]&&lCounter>=0){
bat_state=1;
led_display_test(bat_state,4);
}

else if(lCounter <= adc_value[1]){
bat_state=2;
led_display_test(bat_state,4);
}
else if(lCounter <= adc_value[2]){
bat_state=3;
led_display_test(bat_state,4);
}
else if(lCounter <= adc_value[3]){
bat_state=4;
led_display_test(bat_state,4);
}
else{
bat_state=8;
led_display_test(bat_state,2);
}


发现最终bat_state老是等于1,请问这是什么原因造成的啊?各位帮看下!

其中ulong adc_value[4]={2168,2440,2648,2840};

------解决方案--------------------
lCounter 的值每多少?
------解决方案--------------------
说明lCounter?一直是小于2168的值
------解决方案--------------------
改一下试试:
if((lCounter <= adc_value[0]) && (lCounter >=0))

另外,你可以直接设置一个较大的值试试:
ulong lCounter=2680; 
//lCounter=ADCData; 
//lCounter    = (ADOL&0XF)
------解决方案--------------------
(ADOH<<4);
------解决方案--------------------
那就是  取ADC值  出问题了
------解决方案--------------------
要么自己一句一句分析.
要么把程序给详细点.大家来找查.
任何位置的一点点错误都会造你的纠结.
------解决方案--------------------
设个断点跟踪啊,看看运行到比较语句时lcounter的值就清楚了。
  相关解决方案