本帖最后由 990202098 于 2013-4-27 18:20 编辑
用AD7710采样 采样的电压送到1602进行显示 但显示数据始终不对 现象如下“
1.通过上位采样 采样结果正确 说明AD没问题 只是计算AD值后送到1602显示的部分有问题
2.显示一个固定数字 没问题 正确 说明1602显示部分也没有问题
3.显示AD采样的电压值 永远都不对 而且随机显示 偶尔会出现乱码 显示的根本不是我要它显示的数据 应该是计算部分的原因 但检查程序 自己找不出什么原因
下面附上程序 请高人帮忙看看 感谢无比
前面头文件 定义部分就不写了 给出主要程序部分
uchar data NtimeL,NtimeH,Nm; //全局,AD7710高中低8位
unsigned long V; //全局 电压值
void voltagedisplay(uchar s,uchar g,uchar f)
{
LCD_write_str(0,0,"Voltage:"); //显示Voltage:
LCD_write_data(0x20); //加个空格
LCD_write_data(s+0x30); //显示十位
LCD_write_data(g+0x30); //显示个位
LCD_write_data(0x2e); //显示小数点
LCD_write_data(f+0x30); //显示分位
LCD_write_data(0x56); //显示"V"
}
void voltage() //测量1.7V电池电压 测试结果不正常
{unsigned char fen,ge,shi;
fen=0;ge=0;shi=0;
while(1)
{
GetAD7710(); //获取AD的高中低8位
//Vtemp = 5 * (65536 * 高+ 256 *中 +低) / 16777215 - 2.5
V =0.01953125105664*NtimeH+0.00007629394944*Nm+0.00000029802324*NtimeL-2.5; //单位uV V=(int)(V*10); //1.7V 显示最高位应为0 即01.7V 主要想试试最高位为零会不会乱码
shi=V/100; //十
ge=(V/10)%10; //个
fen=V%10; //分
voltagedisplay(shi,ge,fen); //显示电压值
delaymS(1000); //1000mS采集一次数据
}
}
void main(void)
{
SerialInit(); //初始串口定时器
P0=0xFF; //P0为1602数据口
delaymS(100); //1602初始化
LCD_init();
delaymS(100);
LCD_init();
delaymS(100);
LCD_init();
delaymS(100);
SetAD7710(); //AD7710初始化函数 没问题
delaymS(100);
voltage();
}
|