📄 main.txt
字号:
void scalegetzero();
void scale_setup();
void scale_opset();
void Time_UserHOOK();
void checkvolt();
//void ResetSCALESet();
void checkunit();
float pow10(char t);
void checkssens();
void resetad();
void showvolt();
bit countrule();
void writeonoff(bit nf);
long setnumbcd(long numset,long numlim,Uchar chchar,char incnum);
/**************************************************************************
* 函数原型: void scalegetzero()
* 功 能: 获取零点
**************************************************************************/
void scalegetzero()
{
Uchar i;
for(i=0;i<5;)
{
while(!getad()&&(!resetadbit)); //连续滤波5次,再进行保存零点
if(resetadbit)
{
resetad();
adchipdog=0;
beep(1000);
}
templong= readad();
templong=scalem_FILAD(templong);
if(templong) i++;
}
scalenow.zero=templong;
}
/**************************************************************************
* 函数原型: void scale_setup()
* 功 能: 经销商设定
**************************************************************************/
void scale_setup()
{
char key_t,i;
#if SYS_SETFIL_EN
aprintf(0x10,"FIL"); //设置滤波方式
while(1)
{
aprintf(0x00,"%3bd",scaleset.filmode);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){
if(scaleset.filmode++>FILMS)scaleset.filmode=0;
}
if(KEY_NEXT==key_t){
E_write(I2C_FILMODE, scaleset.filmode);
break;}
if(KEY_OUT==key_t){
E_write(I2C_FILMODE, scaleset.filmode);
return;
}
}
#endif
#if SYS_SETZER_EN
aprintf(0x10,"ZER"); //设置零点范围
while(1)
{
aprintf(0x00,"%3bd",zerot[scaleset.zeromode]);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){
if(scaleset.zeromode++>ZEROMS){scaleset.zeromode=0;}
}
if(KEY_NEXT==key_t){
E_write(I2C_ZEROMODE, scaleset.zeromode);
break;
}
if(ZERO==key_t){
E_write(I2C_ZEROMODE, scaleset.zeromode);
tempbit=1;
break;
}
}
#endif
aprintf(0x10,"CAP"); //设置量程
while(1)
{
scalescap=(scaps[scaleset.scap].scapn*pow10(scaleset.scapex)); //取得最大秤量
aprintf(0x00,"% 5f",scalescap);
while(!getkey());
key_t=key_read();
beep(100);
if(KEY_ADD==key_t){
if(++scaleset.scap>CAPS){scaleset.scap=0;}
}
if(KEY_SUB==key_t){
if(scaleset.scap--==0){scaleset.scap=CAPS;}
}
if(KEY_CHA==key_t){
if(++scaleset.scapex>4){scaleset.scapex=0;}
}
if(KEY_NEXT==key_t){
E_write(I2C_SCAP, scaleset.scap);
E_write(I2C_SCAPEX, scaleset.scapex);
break;
}
}
checkssens();
aprintf(0x10,"DIV");
while(1) //
{
i=ssenss[scaleset.ssens].dot-scaleset.scapex;
aprintf(0x00,fpt[i>=0?i:0],ssenss[scaleset.ssens].ssenn*pow10(scaleset.scapex));
while(!getkey());
key_t=key_read();
beep(100);
if(KEY_CHA==key_t){scaleset.ssens++;checkssens();}
if(KEY_NEXT==key_t)
{
E_write(I2C_SSENS,scaleset.ssens);
break;
}
}
aprintf(0x10,"WEI");
if(scalesys.cweight>scalescap)scalesys.cweight=scalescap;
temp2=ssenss[scaleset.ssens].dot;
temp=temp2;
while(1)
{
aprintf(0x00|(temp+1),fptn[5-temp2][i>=0?i:0],scalesys.cweight);
while(!getkey());
key_t=key_read();
beep(100);
if(KEY_ADD==key_t||KEY_SUB==key_t)
{
scalesys.cweight=(float)setnumbcd(scalesys.cweight*pow10(i),(long)scaps[scaleset.scap].scapn*
pow10(ssenss[scaleset.ssens].dot),temp,KEY_ADD==key_t?1:-1)/pow10(i);
}
if(KEY_CHA==key_t)
{
if(--temp<0)temp=temp2;
}
if(KEY_NEXT==key_t)
{
if(scalesys.cweight)
{
E_writeex(I2C_CWEIGHT,(Uchar *)&(scalesys.cweight),sizeof(scalesys.cweight));
break;
}
else beep(1000);
}
}
aprintf(0x10,"CAL");
enadof=1;
i=0;
temp=0;
while(1)
{
if(resetadbit)
{
resetad();
adchipdog=0;
beep(1000);
}
if(getkey())
{
key_t=key_read();
if(KEY_NEXT==key_t)
{
if(!i){scalenow.zero=scalenow.ad;i=3;}
else if(i==3)
{
if(countrule())break;
else beep(300);
}
}
if(KEY_CHA==key_t)
{
enadof=0;
if(i<3&&(++i>2))
{i=0;
E_writeex(I2C_ADCHIP,(Uchar *)&adchip,sizeof(adchip));
resetad();
}
}
if(KEY_ADD==key_t)
{
if(i==1){if(++adchip.zero>9)adchip.zero=-9;}
else if(i==2){if(++adchip.gain>9)adchip.gain=0;}
}
if(KEY_SUB==key_t)
{
if(i==1){if(--adchip.zero<-9)adchip.zero=9;}
else if(i==2){if(adchip.gain--==0)adchip.gain=9;}
}
if(i==1)
{
aprintf(0x10,"ADZ"); //调整AD零点
aprintf(0x00,"%6bd",adchip.zero);
}
else if(i==2)
{
aprintf(0x10,"ADG"); //调整AD放大倍数
aprintf(0x00,"%6bd",adchip.gain);
}
else if(i==0)aprintf(0x10,"CAL");
else aprintf(0x10,"LOD");
}
if(getad())
{
templong= readad();
templong=scalem_FILAD(templong);
if((!i||(i==3))){
if(!templong)continue;
enadof=1;
if(labs(scalenow.ad-templong)<1){
lcd_flagset(LCD_STA,1);
scalestaflag=1;temp++;}
else{lcd_flagset(LCD_STA,0);scalestaflag=0;temp=0;}
scalenow.ad=templong;
aprintf(0x00,"%6ld",templong);
if((i==3)&&(abs(temp)>3))
{
if(countrule())break;
else beep(300);
}
}
}
}
for(i=0;unitt[i].unitn!=0;i++) //自动打开和关闭单位
{
if(unitt[i].unitmode==1)
{
templong=scalescap/unitt[i].unitn;
if(templong/16>999)
scalesys.sysunits&=~unitt[i].unitbit;
else scalesys.sysunits|=unitt[i].unitbit;
}
else
{
if(scalescap/unitt[i].unitn>=900000)
{
scalesys.sysunits&=~unitt[i].unitbit;
}
else scalesys.sysunits|=unitt[i].unitbit;
}
}
scalesys.units&=scalesys.sysunits;
E_writeex(I2C_SYSUNITS,(Uchar * )&scalesys.sysunits,sizeof(scalesys.sysunits));
#if !USER_UNITSET_EN
for(i=0;unitt[i].unitn!=0;i++) //手动打开和关闭单位
{
aprintf(0x00," ");
tempbit=scalesys.sysunits&unitt[i].unitbit;
if(!tempbit)continue;
while(1)
{
if(!scalesys.units)
scalesys.units|=unitt[i].unitbit;
writeonoff(scalesys.units&unitt[i].unitbit);
aprintf(0x10,unitt[i].unitshow);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){scalesys.units^=unitt[i].unitbit; }
if(KEY_NEXT==key_t){E_writeex(I2C_UNITS, (Uchar *)&scalesys.units,sizeof(scalesys.sysunits));break; }
if(KEY_OUT==key_t){return;}
}
}
#endif
}
/**************************************************************************
* 函数原型: void scale_setup()
* 功 能: 用户参数设定
**************************************************************************/
void scale_opset()
{
Uchar key_t;
while(1)
{
//aprintf(0x00," ");
while(1)
{
writeonoff(scaleset.flag&POWREN); //自动开关机设定
aprintf(0x10,"PWR");
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t)scaleset.flag^=POWREN;
if(KEY_NEXT==key_t){E_write(I2C_FLAG, scaleset.flag); break;}
if(KEY_OUT==key_t){return;}
}
while(1)
{
writeonoff(scaleset.flag&LIGHTEN); //背光设置
aprintf(0x10,"BL ");
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){scaleset.flag^=LIGHTEN;lcd_setback(scaleset.flag&LIGHTEN); }
if(KEY_NEXT==key_t){E_write(I2C_FLAG, scaleset.flag); break;}
if(KEY_OUT==key_t){return;}
}
while(1)
{
writeonoff(scaleset.flag&HOLDEN);
aprintf(0x10," HD"); //锁定开关设置
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){scaleset.flag^=HOLDEN;}
if(KEY_NEXT==key_t){E_write(I2C_FLAG, scaleset.flag); break;}
if(KEY_OUT==key_t){return;}
}
aprintf(0x10," HT"); //锁定量
while(1)
{
if(holdset.holdd)
lcd_writen(holdset.holdd,3);
else
lcd_writen(' ',3);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){if(++holdset.holdd>5)holdset.holdd=0;}
if(KEY_NEXT==key_t){E_write(I2C_HOLDSET_HOLDD,holdset.holdd); break;}
if(KEY_OUT==key_t){return;}
}
aprintf(0x00," ");
aprintf(0x10," HR"); //锁定快慢设定
while(1)
{
lcd_writen(holdset.holdt,2);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){if(++holdset.holdt>7)holdset.holdt=0;}
if(KEY_NEXT==key_t){E_write(I2C_HOLDSET_HOLDT,holdset.holdt); break;}
if(KEY_OUT==key_t){return;}
}
#if USER_SETHLWARNEN_EN
while(1)
{
writeonoff(scaleset.flag&HLEN);//上下限报警开关设定
aprintf(0x10,"LIM");
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t)scaleset.flag^=HLEN;
if(KEY_NEXT==key_t){E_write(I2C_FLAG, scaleset.flag); break;}
if(KEY_OUT==key_t){return;}
}
#endif
#if USER_UNITSET_EN
for(i=0;unitt[i].unitn!=0;i++) //单位设置
{
//aprintf(0x00," ");
tempbit=scalesys.sysunits&unitt[i].unitbit;
if(!tempbit)continue;
while(1)
{
if(scalesys.units==0)
scalesys.units|=unitt[i].unitbit;
writeonoff(scalesys.units&unitt[i].unitbit);
aprintf(0x10,unitt[i].unitshow);
while(!getkey());
key_t=key_read();
if(KEY_CHA==key_t){scalesys.units^=unitt[i].unitbit; }
if(KEY_NEXT==key_t){E_writeex(I2C_UNITS, &scalesys.units,sizeof(scalesys.units));break; }
if(KEY_OUT==key_t){return;}
}
}
#endif
}
}
/**************************************************************************
* 函数原型: void scale_setup()
* 功 能: 电压检测
**************************************************************************/
void checkvolt()
{
Uint volt;
while(!getad()&&(!resetadbit));
readad();
volt=readvolt(); //显示电压值
aprintf(0x10," V ");
aprintf(0x00,"%7.2f",(float)volt/100);
showvolt(); //在电池符号位置显示电压条
}
/**************************************************************************
* 函数原型: void Time_UserHOOK()
* 功 能: 用户定时调用钩子函数,由系统定时器调用
**************************************************************************/
void Time_UserHOOK()
{
Ulong systime;
systime=getsystime();
if((scaleset.flag&POWREN)&&weightf) //如果允许自动关机则进行计时
{
if((!(Uint)systime)&&(powertime))powertime--;
if(!powertime){lcd_set(0);lcd_setback(0);} //到了关机时间则关机
}
if(powertime){ //只有没关机时才发声发送数据等
if(scaleset.flag&HLEN)
{
if(weightuhf){if((((Uchar)systime)&0x3f)==0)beep(200);}
else if(weightulf){if((((Uchar)systime)&0x7f)==0)beep(200);}
}
if(weightshf){if((((Uchar)systime)&0x1f)==0)beep(200);}
}
if((((Uchar)systime)&0x1f)==0) //AD看门狗
{
if(++adchipdog>5)
{
resetadbit=1; //AD复位标志置位
beep(1000);
}
}
}
/**************************************************************************
* 函数原型: void checkunit()
* 功 能: 判断所选单位是否为打开的单位并自动选择
**************************************************************************/
void checkunit()
{
while(!(unitt[scaleset.unit].unitbit&scalesys.units)){
scaleset.unit++;
if(unitt[scaleset.unit].unitn==0||scaleset.unit>10){scaleset.unit=0;}
}
E_write(I2C_UNIT,scaleset.unit);
}
/**************************************************************************
* 函数原型: Ulong pow10(Uchar t)
* 功 能: 返回10的指数函数值
**************************************************************************/
float pow10(char t)
{
if(t>=0)
return pow10t[t];
else return powp10t[-t];
}
/**************************************************************************
* 函数原型: void resetad()
* 功 能: 复位AD芯片
**************************************************************************/
void resetad()
{
//inin5550(0x20,0);
inin5550(gaint[adchip.gain],adchip.zero);
}
/**************************************************************************
* 函数原型: void showvolt()
* 功 能: 在电池符号上显示电压条
**************************************************************************/
void showvolt()
{
if(readvolt()<460)temp=0;
else
temp=(readvolt()-460)/50;
if(temp>5)temp=5;
if(temp<2)
{
voltlow=1;
voltsbit=~voltsbit;
if(voltsbit)lcd_writevolt(-1);
else lcd_writevolt(temp>0?temp:0);
}
else
{
voltlow=0;
lcd_writevolt(temp);
}
while(readvolt()<530)
{
aprintf(0x00," L-BAT ");
aprintf(0x10," ");
lcd_writevolt(0);
}
}
bit countrule()
{
if((scalenow.ad-scalenow.zero)>10000)
{
scalesys.rule=scalesys.cweight/(scalenow.ad-scalenow.zero);
E_writeex(I2C_RULE,(Uchar *)&scalesys.rule,sizeof(scalesys.rule));
return 1;
}
else return 0;
}
void writeonoff(bit nf)
{
aprintf(0x00,nf?" ON ":" OFF ");
}
void checkssens()
{
if(scaleset.ssens>scaps[scaleset.scap].high)
{
scaleset.ssens=scaps[scaleset.scap].low;
}
if(scaleset.ssens<scaps[scaleset.scap].low)
{
scaleset.ssens=scaps[scaleset.scap].high;
}
}
long setnumbcd(long numset,long numlim,Uchar chchar,char incnum)
{
char settemp,limtemp;
bit tempbit;
if(numset>numlim)numset=numlim;
chchar%=6;
settemp=(long)(numset/pow10(chchar))%10;
numset-=settemp*pow10(chchar);
limtemp=(long)(numlim/pow10(chchar))%10;
settemp+=incnum;
if(settemp<0){settemp=(limtemp>0?limtemp:9);limtemp=-1;}
tempbit=(numset+settemp*pow10(chchar))>numlim;
if(tempbit)
{
if(limtemp>=0)settemp=0;
else settemp--;
}
return numset+settemp*pow10(chchar);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -