打印

1602显示AD采样值始终不对 但上位机采样正常

[复制链接]
1954|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
990202098|  楼主 | 2013-4-27 18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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();
}

相关帖子

沙发
990202098|  楼主 | 2013-5-1 14:45 | 只看该作者
好吧  问题自己解决了

使用特权

评论回复
板凳
ahlxy| | 2013-5-29 21:10 | 只看该作者
自已怎么解决的,说一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝