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

📄 usermain.c

📁 电子称重的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<config.h>
#include<head.h>
#include<main.h>
#include<usermain.h>
#define ADBUFLEN 10
#define	CAPS	7
#define	CAPEXL	0
#define	CAPEXH	5
#define SSENSN   8
#define	ZEROMS	3
#define	ZTRMS	5
#define	STAMS	5
#define	FILMS	9

#define ADZH    9
#define ADZL    -9


#define ADGH    9
#define ADGL    0

#define HOLDT   7
#define HOLDD   5

#define COM_MODES       4
#define COM_ADDS        25
#define COM_BAUDS       6

code 	SCAPS  scaps[]={
			{1.0,0.1,0.2,0.5,0.6,0.8},
			{1.2,0.2,0.5,0.6,0.8,1.0},
			{1.5,0.2,0.5,0.8,1.0,1.2},
			{2.0,0.5,0.8,1.0,1.5,1.8},
			{3.0,0.5,1.0,1.5,2.0,2.5},
			{5.0,1.0,2.0,2.5,3.0,4.0},
			{6.0,1.0,2.0,3.0,4.0,5.0},
			{7.5,2.5,4.0,5.0,6.0,7.0},
			{0,0,0,0,0,0}
                        };
code 	float  DivTab[]={0.00001,0.00002,0.00005,0.0001,0.0002,0.0005,0.001,0.002,0.005,0};

code	 UNITS unitt[]={
		{" Kg",1,0,0x1,0},
		{" ct",0.2,-3,0x2,0},
		{" g ",0.001,-3,0x4,0},
		{" t ",1000,3,0x8,0},
		{" H.L",0.0378125,-1,0x10,1},
		{" lb",0.45359237,0,0x20,0},
		{" oz",0.028349523125,-1,0x40,0},
		{" L.Z",0.028349523125,-1,0x80,1},
		{" dr",0.0017718451,-2,0x100,0},//-2
		{"   ",0,0,0}
		};

code char * dspt[]={"999","8.8.8.","777","6.6.6.","555","4.4.4.","333","2.2.2.","111","0.0.0.",};
code char * fpt[]={"%6.0f","%7.1f","%7.2f","%7.3f","%7.4f","%7.5f"};
code char * fptn[][6]=
                     {
                      {"%06.0f","%07.1f","%07.2f","%07.3f","%07.4f","%07.5f"},
                      {" %05.0f"," %06.1f"," %06.2f"," %06.3f"," %06.4f"," %06.5f"},
                      {"  %04.0f","  %05.1f","  %05.2f","  %05.3f","  %05.4f","  %05.5f"},
                      {"   %03.0f","   %04.1f","   %04.2f","   %04.3f","   %04.4f","   %04.5f"},
                     };

code	Uint baudt[]={4800,9600,19200,38400,43000,0};
code    Uchar zerot[]={3,6,10,15,20,25,30};
CALSET pdata CalSet;//定义秤的设置量
HOLDSET   pdata holdset;
COM         pdata com;
FUNSET	pdata funset;
extern BOOL ShowWeiFlagEn;
extern BOOL LineEnFlag;

Uchar idata fun_state=0,cfun_state=0;

enum SYSSTATE Sys_State;
enum SSSTATE  SS_State;
enum USSTATE  US_State;

extern code    void(*SS_Funtab[])(MSG *);
extern code    void(*US_Funtab[])(MSG *);

void    s_stopfun(MSG  *pMsg)
{
 pMsg->message=0;
}
void    s_startfun(MSG  *pMsg)
{
 switch(pMsg->message)
 {
  case M_REFURBISH:
       SetTimer(100, 0);
       break;
  case M_FUNDELAYOK:
  	KillTimer(0);
       Dspinit();
       setstate(S_WEIGHT);
       break;
  case M_KEYDOWN:
      if(pMsg->param==(TARE|CTRLF))setstate(S_SYSSET);
      else if(pMsg->param==TARE)
      setstate(S_USERSET);
       break;
 }
}

void SS_Startfun(MSG *pMsg)
{
 switch(pMsg->message)
 {
 case M_REFURBISH:
 	aprintf(0x00,"Y1C-1.1");
       SetTimer(100, 0);
       break;
  case M_FUNDELAYOK:
  	KillTimer(0);
       SetNextFunState();
       break;
 }
}
void SS_Filsetfun(MSG *pMsg)
{
   if(M_CHAR==pMsg->message)
   	{
	switch(cfun_state)
       {
	case  0:                                   //滤波设定
              if(pMsg->param==KEY_NEXT)SetNextFunState();
              if(pMsg->param==KEY_ENTER)SetNextcFunState();
              break;
       case  1:
             if(pMsg->param==KEY_CHA)FilSet.filmode++;
             if(pMsg->param==KEY_NEXT)
             {E_write(I2C_FILMODE,FilSet.filmode);SetNextcFunState();}
             break;
       case  2:
             if(pMsg->param==KEY_CHA)FilSet.zeomode++;
             if(pMsg->param==KEY_NEXT)
             {E_write(I2C_ZEOMODE, FilSet.zeomode);SetFunState(fun_state);}
             break;
	}
	PostMessage(M_REFURBISH,cfun_state);
   	}
  else if(M_REFURBISH==pMsg->message)
  	{
   	switch(cfun_state)
       {
       case  0:
             aprintf(0x20,"P1 Fs    ");
             break;
       case  1:
             aprintf(0x10,"FIL");    //设置滤波方式
             if(FilSet.filmode>FILMS)FilSet.filmode=0;
             aprintf(0x00,"%3bd",FilSet.filmode);
             break;
       case  2:
             aprintf(0x10,"ZEO");    //设置滤波方式
             if(FilSet.zeomode>ZEROMS)FilSet.zeomode=0;
             aprintf(0x00,"%3bd",FilSet.zeomode);
             break;
	default:
		SetcFunState(0);
   	}
   }
}
void SS_Linsetfun(MSG *pMsg)
{
   switch(pMsg->message)
   {
   case  M_CHAR:
	switch(cfun_state)
       {
	case  0:                                   //线性修正设置
             if(pMsg->param==KEY_NEXT)SetNextFunState();
             if(pMsg->param==KEY_ENTER){SetNextcFunState();ShowWeiFlagEn=1;}
             break;
      case   1:
             if(pMsg->param==KEY_NEXT)
             {
              scalenow.zero=scalenow.ad;
              SetNextcFunState();
             }
             break;
      case   2:
             if(pMsg->param==KEY_NEXT)
             {
              LineSet.linedot0=scalenow.ad;
              E_writeex(I2C_LINEDOT0,(Uchar *)&LineSet.linedot0,sizeof(LineSet.linedot0));
              SetNextcFunState();
             }
             break;
      case   3:
             if(pMsg->param==KEY_NEXT)
             {
              LineSet.linedot1=scalenow.ad;
              E_writeex(I2C_LINEDOT1,(Uchar *)&LineSet.linedot1,sizeof(LineSet.linedot1));
              SetNextcFunState();
             }
             break;
      case   4:
             if(pMsg->param==KEY_NEXT)
             {
#if 1
              LineSet.linerule0=(LineSet.linedot0-scalenow.zero)/GetLineWei(0);
              LineSet.linerule1=(scalenow.ad-LineSet.linedot1)/(CalSet.fSCap-GetLineWei(1));
              LineSet.linerule1/=LineSet.linerule0;
              LineSet.linerule0=((LineSet.linedot1-LineSet.linedot0)/(GetLineWei(1)-GetLineWei(0)))/LineSet.linerule0;
               E_writeex(I2C_LINERULE0,(Uchar *)&LineSet.linerule0,sizeof(LineSet.linerule0));
               E_writeex(I2C_LINERULE1,(Uchar *)&LineSet.linerule1,sizeof(LineSet.linerule1));
#endif
               ShowWeiFlagEn=0;
               aprintf(0x20," good    ");
               delayms(1000);
               SetFunState(fun_state);
             }
             break;
	}
	PostMessage(M_REFURBISH,cfun_state);
	break;
   case M_REFURBISH:
   	switch(cfun_state)
       {
       case  0:
             aprintf(0x20,"P3 Lin   ");
             break;
       case  1:
             aprintf(0x00,"UNLOAD");
             break;
       case  2:
             aprintf(0x00,"%7f",GetLineWei(0));
             aprintf(0x10,unitt[DEFINEUNIT].unitshow);
             break;
      case  3:
             aprintf(0x00,"%7f",GetLineWei(1));
//             aprintf(0x10,unitt[DEFINEUNIT].unitshow);
             break;
      case  4:
             aprintf(0x00,"%7f",CalSet.fSCap);
//             aprintf(0x10,unitt[DEFINEUNIT].unitshow);
             break;
	default:
		cfun_state=0;
   	}
	break;
   }
}
void SS_Calsetfun(MSG *pMsg)
{
   switch(pMsg->message)
   {
   case  M_CHAR:
	switch(cfun_state)
       {
       case  0:                                     //标定
             if(pMsg->param==KEY_NEXT)SetFunState(SS_FILSET);
             if(pMsg->param==KEY_ENTER){SetNextcFunState();ShowWeiFlagEn=1;}
             break;
       case 1:
             if(pMsg->param==KEY_CHA)CalSet.cweight++;
             if(pMsg->param==KEY_NEXT){E_write(I2C_CWEIGHT,CalSet.cweight);SetNextcFunState();}
             break;
      case   2:
             if(pMsg->param==KEY_CHA)
             {
              scalenow.zero=scalenow.ad;
              SetcFunState(5);
             }
             if(pMsg->param==KEY_NEXT)SetNextcFunState();
             break;
      case   3:
             if(pMsg->param==KEY_CHA)adchip.zero++;
             if(pMsg->param==KEY_NEXT)
             {E_write(I2C_ADCHIP_ZERO,adchip.zero);SetNextcFunState();}
             break;
     case   4:
             if(pMsg->param==KEY_CHA)adchip.gain++;
             if(pMsg->param==KEY_NEXT)
             {E_write(I2C_ADCHIP_GAIN,adchip.gain);
              SetcFunState(2);adinit();}
             break;
      case   5:
             if(pMsg->param==KEY_NEXT)
             {
              CalSet.rule=(scalenow.ad-scalenow.zero)/GetTechWei(CalSet.cweight);
              E_writeex(I2C_RULE,(Uchar *)&CalSet.rule,sizeof(CalSet.rule));
             setstate(S_START);
             }
             break;
	}
	PostMessage(M_REFURBISH,cfun_state);
	break;
  case M_REFURBISH:
   	switch(cfun_state)
       {
        case  0:
             aprintf(0x20,"P4 CAL   ");
             break;
        case  1:
             if(CalSet.cweight>scaps[CalSet.cSCap].SCapn*10)CalSet.cweight=1;
             aprintf(0x00,"%7f",GetTechWei(CalSet.cweight));
             aprintf(0x10," Kg");
             break;
        case  2:
             aprintf(0x10,"CAL");
             break;
        case  3:
             aprintf(0x10,"ADZ");
             if(adchip.zero>ADZH)adchip.zero=ADZL;
             aprintf(0x00,"%3bd",adchip.zero);
             break;
       case  4:
             aprintf(0x10,"ADG");
             if(adchip.gain>ADGH)adchip.gain=ADGL;
             aprintf(0x00,"%3bd",adchip.gain);
             break;
        case  45:
             aprintf(0x10,"LOD");
             break;
   	}
	PostMessage(M_REFURBISH,cfun_state);
	break;
  case M_ADFILOK:

⌨️ 快捷键说明

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