📄 usermain.c
字号:
#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 + -