|
楼主 |
发表于 2010-8-26 16:23:22
|
显示全部楼层
贴上源程序,应该是浮点数运算的问题
#include//包含头文件
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
__CONFIG(INTIO & WDTDIS & PWRTEN & BORDIS & UNPROTECT);
//内置振荡器、引脚为IO功能,关闭看门狗,开电压,关,不保护EEPROM
void init();//系统初始化
void init_adc6();//ADC初始化
uint get_ad6();//启动AD转换
void init_adc();//ADC初始化
uint get_ad();//启动AD转换
uint get_v();
void delay_ms(uint);//延时xms
//const uchar table[]={0x7f,0x3f,0x1f,0x0f,0x07};
void main()//主函数
{
uint v_ad,v6_ad;//ADC结果暂存
float vcc;
uint vsam;
const uchar dlxs[]={0x7f,0x3f,0x1f,0x0f,0x07};//依次增多点亮的LED
//20%:0~203,40%:204~408,60%:409~613,80%:614~818,100%:819~1023
init();
/*while(1) //该while语句内将测得的v_ad和v6_ad还原成模拟电压值,
//判断时执行了default后面的语句
{
v_ad = get_ad();//获取AN10 AD转换结果
v6_ad = get_ad6();//获取VP6 AD转换结果
vcc = v_ad*0.6/v6_ad;//通过两个方程求解出vcc
vcc = vcc*100;//保留小数点后2位
float vcc = (uint)vsam;//转换为整型采样电压值
//对采样电压值进行判断,通过LED显示出来
switch(vsam)
{
case 200:PORTC=dlxs[0];break;
case 250:PORTC=dlxs[1];break;
case 300:PORTC=dlxs[2];break;
case 350:PORTC=dlxs[3];break;
case 378:PORTC=dlxs[4];break;
default:PORTC=0xff;break;
}
}*/
while(1)//该while语句测得v_ad和v6_ad结果均正确
{
v_ad = get_ad();//获取AN10 AD转换结果
v6_ad = get_ad6();//获取VP6 AD转换结果
/*if(v_ad>1023)//该if语句测得v_ad结果正确
{
v_ad=1023;
}
else if(8183.9V
{
PORTC = dlxs[4];//PORTC=0b00000111
}
else if(6132.99V
{
PORTC = dlxs[3];//PORTC=0b00001111
}
else if(4081.99V
{
PORTC = dlxs[2];//PORTC=0b00011111
}
else if(2030.99V
{
PORTC = dlxs[1];//PORTC=0b00111111
}
else if(00
{
PORTC = dlxs[0];//PORTC=0b01111111,lednum<204
}
else
{
PORTC = 0xff;
}*/
if(v6_ad>100)//该if语句测得v6_ad结果正确
{
PORTC = dlxs[4];
}
else
{
PORTC = 0xff;
}
}
} |
|