求助帖子 基于单片机的数字电压表 基本全部完成 求大神指教一些问题 ADC0808 LCD1602

2019-07-15 11:17发布

本帖最后由 浪迹天涯AS 于 2017-4-18 23:13 编辑

这个AT89C51电压表是交直流的1-25V电路已经完成  C语言程序  有点问题不会  现在正常运行 程序是测试1-5V电压的  我想把显示的电压变成1-25V 但是怎么该都是有问题   麻烦大神帮忙看一下怎么改  想加一个求后5秒求平均值的程序  这是网上的程序  但是我不会加进去void read_key()//键盘扫描函数
{
static uchar key_state=0;

switch(key_state)
{
  case key_state0:
   if(key==0)
    key_state=key_state1;
   break;
     case key_state1:
   if(key==0)
     {
    TR0=1;
    display_zifu(1,0,tab3);
    key_state=key_state2;
        }  
    else
    key_state=key_state0;
   break;
  case key_state2:
      if(key)
    key_state=key_state0;
   break;

}

}
void main()
{
    long float dat;
long float dat_aver,dat1,dat2,dat3,dat4,dat5;//定义5个随机电压值变量
uchar flag;//后五秒取随机电压的标志
init_timer0();
init_1602();
delay(10);
   while(1)
{

  dat=read_value();
  if(dat>=100)//当电压值大于1V时,用V显示,否则用mV显示
  {
   display_zifu(0,1,tab2);
   display(0,7,dat);
   display_zifu(0,13,tab0);  
   }
  else
  {
   display_zifu(0,1,tab2);
   display(0,7,dat*1000);
   display_zifu(0,13,tab1);
  }

  read_key();   //当键盘按下时,计算后五秒的平均电压值
  if(t==20)
  {
   t=0;
   flag++;
  }

  if(flag==1)
   dat1=dat;
  if(flag==2)
   dat2=dat;
  if(flag==3)
   dat3=dat;
  if(flag==4)
   dat4=dat;
  if(flag==5)
  {
   dat5=dat;
   dat_aver=(dat1+dat2+dat3+dat4+dat5)/5;
      display(1,7,dat_aver);
   display_zifu(1,13,tab0);  
    dat_aver=0;
  }

    if(flag==8)  
  {
   flag=0;
   write_com(0x01);
   TR0=0;
  }  

}

}
玛法大神么都过来看看   求助小弟一臂之力  

玛法大神么都过来看看   求助小弟一臂之力  
玛法大神么都过来看看   求助小弟一臂之力  
玛法大神么都过来看看   求助小弟一臂之力  玛法大神么都过来看看   求助小弟一臂之力  
基于单片机的数字电压表.zip 下载积分: 积分 -1 分
77.82 KB, 下载次数: 14, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
浪迹天涯AS
2019-07-16 20:13
人中狼 发表于 2017-4-19 09:20
测量1-25伏应该不是改程序的问题,如果你的AD输入范围是1-5伏,那应该是把1-25伏变为1-5伏来测量,不过这样有个问题就是因为等于把1-25伏压缩了五分之一,精度,特别是较低电压时的精度和准确度会受到影响。至于求平均,没明白你打算怎么做。 ...

电路的衰减 已经完成  基本上没问题  现在时程序不会改写   求平均是 我按键之后 的5秒钟 5个随机测量的电压 求一个平均值  显示出来

一周热门 更多>