⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ybmain.c

📁 某采用积分式AD的汽车衡完整单片机C程序
💻 C
📖 第 1 页 / 共 5 页
字号:
void ReadFlt()            //读滤波强度
{
   AT24C64_R(&G_Flt,0x0D,1);
}
void SaveFlt()            //保存滤波强度
{
   AT24C64_W(&G_Flt,0x0D,1);
}
void InitFlt()            //初始化滤波强度
{
   G_Flt=2;
   AT24C64_W(&G_Flt,0x0D,1);
}

////////////////////////////////////////////////////////////////////////
//零点跟踪管理函数;
void ReadZeroChase()            //读零点跟踪
{
   AT24C64_R(&G_ZeroChase,0x0E,1);
}
void SaveZeroChase()            //保存零点跟踪
{
   AT24C64_W(&G_ZeroChase,0x0E,1);
}
void InitZeroChase()            //初始化零点跟踪
{
   G_ZeroChase=0;
   AT24C64_W(&G_ZeroChase,0x0E,1);
}

////////////////////////////////////////////////////////////////////////
//开机置零管理函数;
void ReadStartZero()            //读开机置零
{
   AT24C64_R(&G_StartZero,0x0F,1);
}
void SaveStartZero()            //保存开机置零
{
   AT24C64_W(&G_StartZero,0x0F,1);
}
void InitStartZero()            //初始化开机置零
{
   G_StartZero=1;
   AT24C64_W(&G_StartZero,0x0F,1);
}

////////////////////////////////////////////////////////////////////////
//置零键置0管理函数;
void ReadSetZero()            //读零点跟踪
{
   AT24C64_R(&G_SetZero,0x10,1);
}
void SaveSetZero()            //保存零点跟踪
{
   AT24C64_W(&G_SetZero,0x10,1);
}
void InitSetZero()            //初始化零点跟踪
{
   G_SetZero=1;
   AT24C64_W(&G_SetZero,0x10,1);
}

////////////////////////////////////////////////////////////////////////
//打印机管理函数;
void ReadPrintType()            //读打印机类型
{
   AT24C64_R(&G_PrintType,0x11,1);
}
void SavePrintType()            //保存打印机类型
{
   AT24C64_W(&G_PrintType,0x11,1);
}
void InitPrintType()            //初始化打印机类型
{
   G_PrintType=0;
   AT24C64_W(&G_PrintType,0x11,1);
}

////////////////////////////////////////////////////////////////////////
//波特率管理函数;
void ReadBuadRate()            //读波特率
{
   AT24C64_R(&G_BuadRate,0x12,1);
}
void SaveBuadRate()            //保存波特率
{
   AT24C64_W(&G_BuadRate,0x12,1);
}
void InitBuadRate()            //初始化波特率
{
   G_BuadRate=5;
   AT24C64_W(&G_BuadRate,0x12,1);
}


////////////////////////////////////////////////////////////////////////
// 函数名称: void SetParam()
// 入口参数: 无
// 函数功能://设置参数
//test_ok:2006.2.4
////////////////////////////////////////////////////////////////////////
void SetParam()
{

   unsigned char i=0;
   unsigned char key;

   //设定分度值;
   //显示d  05
   dcode[1]=div(G_FenDu);
   dcode[0]=G_FenDu-dcode[1]*10;

   dcode[5]=13; dcode[4]=20;dcode[3]=20;dcode[2]=20;//dcode[1]=0;dcode[0]=5;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break;// 输入;
       if(key==TC) return;//返回
       if(key<10)
      {
           dcode[1]=dcode[0];
           dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存分度值
   G_FenDu=dcode[1]*10+dcode[0];
   dtcode=(G_FenDu*100)/G_BdRate;//修改dtcode;
   SaveFenDu();

   //设定小数点位数;
   //显示dc  0;
   dcode[5]=13; dcode[4]=22;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_WeiShu;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<6)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存小数点位数
   G_WeiShu=dcode[0];
   SaveWeiShu();


   //设定量程;
   //显示300000;
   uu=G_Full;
    for(i=0;i<6;i++)
   {
      aa=div(uu);
      dcode[i]=uu-aa*10;
      tint[i]=dcode[i];
      uu=aa;
   }

 // tint[0]=0; tint[1]=3;tint[2]=0;tint[3]=0;tint[4]=0;tint[5]=0;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<10)
      {
           dcode[5]=dcode[4];
           tint[5]=tint[4];

           dcode[4]=dcode[3];
            tint[4]=tint[3];

           dcode[3]=dcode[2];
            tint[3]=tint[2];

           dcode[2]=dcode[1];
            tint[2]=tint[1];

            dcode[1]=dcode[0];
            tint[1]=tint[0];

           dcode[0]=key;
           tint[0]=key;
       }
       for(i=5;dcode[i]==0||dcode[i]==20||dcode[i]>9;i--)
       {
           dcode[i]=20;
        }
        DisplayCode(dcode,6);
   }
   //计算量程
   G_Full=0;
   for(i=5;;i--)
   {
        G_Full=G_Full*10+tint[i];
        if(i==0) break;
   }
   //保存量程
   SaveFull();
 //  ReadFull();

   //设定数字滤波强度;
   //显示Flt  2;
   dcode[5]=15; dcode[4]=16;dcode[3]=21;dcode[2]=20;dcode[1]=20;dcode[0]=G_Flt;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<6&&key>0)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存数字滤波强度
   G_Flt=dcode[0];
   SaveFlt();

   //设定零点跟踪范围;
   //显示F1  0;
   dcode[5]=15; dcode[4]=1;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_ZeroChase;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break;// 输入;
       if(key==TC) return;//返回
       if(key<7)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存0点跟踪范围
   G_ZeroChase=dcode[0];
   SaveZeroChase();

   //设定开机置0范围;
   //显示F2  2;
   dcode[5]=15; dcode[4]=2;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_StartZero;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<6&&key>0)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存开机置0范围
   G_StartZero=dcode[0];
   SaveStartZero();

   //设定置0键置0范围;
   //显示F3  2;
   dcode[5]=15; dcode[4]=3;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_SetZero;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<6&&key>0)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存置0键置0范围
   G_SetZero=dcode[0];
   SaveSetZero();

   //设打印机类型
   //显示F4  1;
   dcode[5]=15; dcode[4]=4;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_PrintType;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<2)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存打印机类型
   G_PrintType=dcode[0];
   SavePrintType();

   //设串行通讯波特率
   //显示F5  4;
   dcode[5]=15; dcode[4]=5;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=G_BuadRate;
   while(1)
  {
       key=KeyScan();
       if(key==SR) break; //输入;
       if(key==TC) return;//返回
       if(key<6&&key>0)
      {
          dcode[0]=key;
       }
        DisplayCode(dcode,6);
   }
   //保存打印机类型
   G_BuadRate=dcode[0];
   SaveBuadRate();
   UART_init();
   return;
}

////////////////////////////////////////////////////////////////////////
//标率管理函数;
void ReadBdRate()            //读标率
{
   AT24C64_R(&G_BdRate,0x17,4);
   AT24C64_R(&IsBD,0x35,1);
}
void SaveBdRate()            //保存标率
{
   AT24C64_W(&G_BdRate,0x17,4);
   IsBD=1;
   AT24C64_W(&IsBD,0x35,1);
}
void InitBdRate()            //初始化标率
{
   G_BdRate=1;
   AT24C64_W(&G_BdRate,0x17,4);
   IsBD=0;
   AT24C64_W(&IsBD,0x35,1);
}

////////////////////////////////////////////////////////////////////////
//零点码管理函数;
void ReadZeroCode()            //读零点码
{
   AT24C64_R(&G_ZeroCode,0x13,4);

}
void SaveZeroCode()            //保存零点码
{
   AT24C64_W(&G_ZeroCode,0x13,4);

}
void InitZeroCode()            //初始化零点码
{
   G_ZeroCode=0;
   AT24C64_W(&G_ZeroCode,0x13,4);

}

////////////////////////////////////////////////////////////////////////
// 函数名称: void BDing()
// 入口参数: 无
// 函数功能 //标定;
//test_ok:06.2.4
////////////////////////////////////////////////////////////////////////
void BDing()
{
 //  unsigned char dcode[6];
   unsigned char i=0;
   unsigned char key;
   i=0;

   bBDing=1;

   //第一步:得零点码
   while(1)
  {
    DisplayWeightCode();
    key=KeyScan();
    if(key==TC)
    {
       if(IsBD==0)
          return;//返回
       else      //补偿标定
     {
        //得高位码;
        while(1)
       {
         DisplayWeightCode();
        key=KeyScan();
     //   if(key==TC) return;//返回
        if(key==SR) //输入
         {

             G_DynicCode=timer_ok;
             break;
         }
       }
        //重量;
       dcode[5]=20; dcode[4]=20;dcode[3]=20;dcode[2]=20;dcode[1]=20;dcode[0]=0;
       tint[0]=0; tint[1]=0;tint[2]=0;tint[3]=0;tint[4]=0;tint[5]=0;
        while(1)
      {
           key=KeyScan();
           if(key==SR) break; //输入;
           if(key==TC) return;//返回
           if(key<10)
          {
             dcode[5]=dcode[4];
             tint[5]=tint[4];

             dcode[4]=dcode[3];
             tint[4]=tint[3];

             dcode[3]=dcode[2];
             tint[3]=tint[2];

             dcode[2]=dcode[1];
              tint[2]=tint[1];

              dcode[1]=dcode[0];
              tint[1]=tint[0];

             dcode[0]=key;
             tint[0]=key ;
           }
           for(i=5;dcode[i]==0||dcode[i]==20;i--)
           {
               dcode[i]=20;
           }
           DisplayCode(dcode,6);
       }
       //计算重量
       G_hw=0;
       for(i=5;;i--)
       {
          G_hw=G_hw*10+tint[i];
          if(i==0) break;
       }
       //计算标率
       G_BdRate=(G_BdRate+(float)G_hw/((float)( G_DynicCode-G_ZeroCode)))/2;
       //计算dtcode;
       dtcode=(G_FenDu*100)/G_BdRate;  //放大100倍;
       SaveBdRate();
       bBDing=0;
       return;
     }
    }
    if(key==SR) //输入
     {

         G_ZeroCode=timer_ok;
         SaveZeroCode();//保存零点码;
        // ReadZeroCode();
         break;
      }
   }

   //初次标定
   {
     //LOAD;
     dcode[5]=20; dcode[4]=20;dcode[3]=16;dcode[2]=18;dcode[1]=10;dcode[0]=13;

     while(1)
     {
         DisplayCode(dcode,6);//显示LOAD;
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -