找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1849|回复: 0
打印 上一主题 下一主题
收起左侧

爻系!AD分度问题BUG

[复制链接]
跳转到指定楼层
楼主
ID:82781 发表于 2015-6-13 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
标参点之间的温度区间以线性处理这样可以节省内存,但是,无疑会使精度大大降低,精确不到0.1,而且另一个问题接踵而至,那就是分度的问题,步长太高就会导致小数点后尾数的减小,不利于计算和处理,而变大则精度大大降低,所以在这种问题上要经过实际的实验才可以得到结果,配合我的显示程序最终为9分度,步长是可变的,对于不需非常非常精确的场合足以!
2012/11/14
小ARM菜菜
日照

/*
作者:小ARM菜菜
Q Q :925295580
AD处理
*/
void ad_process(uint16_t ad_data,uint16_t *p)//ad数据处理
{
   uint8_t i;
   uint8_t n;
  
  if(ad_data<*p)
  {Dispaly_SEGD5(0); //小数点
      
   Dispaly_SEGD3(0);//
   Dispaly_SEGD4(0);return ;
   }//如果小于0度,按照0度处理
  
  
  
  for(i=0;i<33;i++)//0摄氏度到32摄氏度
  {
   
   
   if((*p<ad_data)&&(*(p+1)>ad_data))
      {
      
         
     if(set_tem>i)//判断温度是否达到设定温度(手动必须关闭)
     {
        if(hand_ctrl==0)
         {
     display_s1_s2_s3_s4_s5_p(0,1,1,0,1,1); //开启
     Relay =0;
         }
     
     }
     else
     {
      if(hand_ctrl==0)
      {
     display_s1_s2_s3_s4_s5_p(0,1,0,1,1,1);//关闭
     Relay =1;
      }
     }
   
  
         
        n=*(p+1)-*p;
        n=n/9;
        
        ad_data=(ad_data-*p);
        
        n=ad_data/n;
        
      Dispaly_SEGD5(n); //小数点
      
   Dispaly_SEGD3(i/10);//
   Dispaly_SEGD4(i%10);
   
   
   
   return ;
         
   
      }
      else
     if(*p==ad_data)//如果相等,那么直接返回点温度值
   {
  
    Dispaly_SEGD5(0); //小数点
   Dispaly_SEGD3(i/10);//
   Dispaly_SEGD4(i%10);
   
   }
  
  
  p++;
  }
  
  
  
   
   
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表