📄 cmain.c
字号:
SS1=2;
SS2=0;
IOBeep = 1;
IOPower = 1;
ReadEeprom(e_start, 1, (unsigned char xdata*)&test_start);
test_start=~test_start & 0x01;
WriteEeprom(e_start, 1, (unsigned char xdata*)&test_start);
IOBeep = 0;
delay(2000);
IOBeep = 1;
if( test_start == 0)
{
IOPower = 0;
while (1)
{
}
}
startup:
for(ptr_xdata=0;ptr_xdata<744;ptr_xdata++)
{
*ptr_xdata=0; //将外部744个存储单元清零
}
IOBK = 1;
InitSfr(); ///初始化特殊功能寄存器
InitLcd(); ///初始化lcd
InitVar(); //初始化变量和参数
InitUart(); //设置为1200bps,8N1
/* bankbuff[1] = bankbuff[2]=bankbuff[3]=bankbuff[4]=bankbuff[5]=bankbuff[6]=0;
cont_1 = cont_2 = cont_3 = 0;*/
ClearFlag();
unit = 0xff;
DispStr(version);
DelayInter(100);
if (!SelfTest()) goto startup;
// InitUart(); //设置为1200bps,8N1
wink = 0;
InitSendAS();
adz = adz0 = adzero;
ad_out = 0;
for ( ; ; ) //确定零点内码
{
DisposeUart();
if (pick)
{
pick = 0;
if ( (!BErrData) && (stab) )
{
f_w = GetWeightKg();
if (decimal_n >= 0) f_w = f_w * exp_m[decimal_n];
f_w = f_w + 0.5*((float)division_n);
w_gross = (signed long int)f_w;
w_gross = w_gross / (signed long int)division_n;
w_gross = w_gross * division_n;
if (w_gross < 0) w_gross = -w_gross;
w_gross = 100 * w_gross;
w_net = 20 * capacity_n;
if (decimal_n < 0) w_net = w_net * exp_m[-decimal_n];
if (w_gross <= w_net)
{
adz = adz0 = ad_out;
beep = 13;
}
else
{
DispStr(err_4);
beep = 2;
DelayInter(200);
}
break;
}
}
if (wink >= 400)
{
if (BErrData)
{
DispStr(err_10);
beep = 2;
DelayInter(200);
break;
}
else beep = 2;
break;
}
}
if (ad_out < 100)
{
DispStr(err_6);
beep = 2;
DelayInter(200);
adz = adz0 = adzero;
}
// adz = adz0 = adzero;
unit = s_unit;
BMustDisp = TRUE;
second = 0;
shut_min = 0;
last_min = 0;
w_tare = 0;
for ( ; ; )
{
AutoPower();
switch (para.mode.bk)
{
case 0: //AUto
CheckBk();
break;
case 1: //ON
if (batt_lcd == 0) IOBK = 1;
else CheckBk();
break;
case 2: //OFF
// if (bk_delb == 0) bk=0;
IOBK = 0;
break;
}
//零点跟踪
if (stab_lcd)
{
switch (para.mode.auto_zero)
{
// case 0: //不进行零位跟踪
// break;
case 0: //0.5d
tmp_li1 = adz - ad_out;
if (tmp_li1 < 0) tmp_li1 = -tmp_li1;
if ( tmp_li1 < fd5 )
{
if (times>100) //2秒
{
times=0;
adz = ad_out;
BMustDisp = TRUE;
continue;
}
}
else times = 0;
break;
default:
if (w_gross <0) w_gross = -w_gross;
TmpData[0] = para.mode.auto_zero -1;
TmpData[0] = 1 << TmpData[0];
TmpData[0] = TmpData[0] * division;
if (w_gross <= (signed long)TmpData[0])
{
if (times > 100)
{
times = 0;
adz = ad_out;
BMustDisp = TRUE;
continue;
}
}
else times = 0;
break;
}
}
else times = 0;
if (BMustDisp)
{
BMustDisp = FALSE;
goto mustdisp;
}
DisposeUart();
if (pick)
{
mustdisp:
pick = 0;
stab_lcd = FALSE;
if (stab) stab_lcd = TRUE;
net_lcd = FALSE;
if (BTareFlag) net_lcd = TRUE;
if (!BErrData)
{
w_gross = GetWeightUnit();
if (w_gross > capacity + 9 * (signed long int)division)
{
beep = 15;
ClearFlag();
unit = 0xff;
DispStr(ol);
BOverLoad = TRUE;
BLess20d = FALSE;
}
else
{
beep = 30;
BOverLoad = FALSE;
unit = s_unit;
zero_lcd = FALSE;
if (w_gross == 0) zero_lcd = TRUE;
w_net = w_gross - w_tare;
if (w_net < 20*division)
{
BLess20d = TRUE;
BAcc = TRUE;
}
else
{
BLess20d = FALSE;
second = 0;
shut_min = 0;
}
if (BHold) DispDigital(w_hold,decimal);
else DispDigital(w_net,decimal);
}
}
}
if (!BErrData) ray_lcd = TRUE;
else ray_lcd = FALSE;
if (keyp)
{
keyp = 0;
second = 0;
shut_min = 0;
if (BErrData) {beep=1;continue;} //按键无作用
if (para.mode.bk == 0)
{
bk_del = 500;
bk_delb = 1;
IOBK = 1;
}
switch(kbuf)
{
case KEYUNIT:
if (BHold) {beep = 1;break;}
if ( (para.mode.unit&0x0f) == 0)
{
beep = 1;
break;
}
TmpData[0] = s_unit;
for ( ; ; )
{
s_unit++;
if (s_unit > 3) s_unit = 0;
if ( (para.mode.unit&allbit[s_unit]) != 0) break;
}
if (s_unit != TmpData[0])
{
WriteEeprom(e_s_unit,1,(unsigned char xdata*)&s_unit);
getcap(s_unit);
unit = s_unit;
BMustDisp = TRUE;
}
else {beep = 1; break;}
BAcc = TRUE;
M_lcd = FALSE;
w_total = 0;
n_total = 0;
//确定扣重值
if (BTareFlag)
{
f_w = f_t;
f_w = f_w * CONVERTUNIT[s_unit];
if (decimal >= 0) f_w = f_w * exp_m[decimal];
f_w = f_w + 0.5*((float)division);
w_tare = (signed long int)f_w;
w_tare = w_tare / (signed long int)division;
w_tare = w_tare * division;
}
if (BHold)
{
f_w = f_h;
f_w = f_w * CONVERTUNIT[s_unit];
if (decimal >= 0) f_w = f_w * exp_m[decimal];
f_w = f_w + 0.5*((float)division);
w_hold = (signed long int)f_w;
w_hold = w_hold / (signed long int)division;
w_hold = w_hold * division;
}
break;
case KEYMPLUS:
if (BHold ) {beep = 1; break;}
if (BLess20d)
{
if (n_total == 0) {beep = 1; break;}
set_3: BMustDisp = TRUE;
dispbuff[0] = 0x16; //n
dispbuff[1] = 0x20;
dispbuff[2] = 0x20;
dispbuff[5] = (unsigned char)(n_total%10);
TmpData[0] = (unsigned char)(n_total/10);
dispbuff[3] = TmpData[0] / 10;
dispbuff[4] = TmpData[0] % 10;
unit = 0xff;
ClearFlag();
M_lcd = TRUE;
tran();
wrlcd();
m_delb = TRUE;
m_del = 100;
for ( ; ; )
{
if (!m_delb) break;
if (keyp)
{
keyp = 0;
if (kbuf == KEYCLEAR) goto set_31;
beep = 1;
}
}
unit = s_unit;
DispDigital(w_total,decimal);
m_delb = 1;
m_del = 100;
for ( ; ; )
{
if (keyp)
{
keyp = 0;
if (kbuf == KEYCLEAR)
{
set_31: n_total = 0;
BAcc = TRUE;
M_lcd = FALSE;
w_total = 0;
BMustDisp = TRUE;
goto ret_3;
}
beep = 1;
}
if (m_delb == 0) break;
}
}
else
{
if (!BAcc) {beep=1;break;}
tmp_li1 = w_total + w_net;
if ( (n_total>=999) || (tmp_li1 > 999999) )
{
beep = 1;
DispStr(err_12);
break;
}
BAcc = FALSE;
M_lcd = TRUE;
w_total = tmp_li1;
n_total++;
goto set_3;
}
ret_3: break;
case KEYHOLD:
BHold = ~BHold;
BMustDisp = TRUE;
f_h = (float)w_net;
w_hold = w_net;
break;
case KEYCHANGE:
if (BHold) {beep = 1; break;}
BAcc = TRUE;
M_lcd = FALSE;
n_total = 0;
w_total = 0;
para.mode.change++;
if (para.mode.change > 2) para.mode.change=0;
WriteEeprom(e_para+8, 1,(unsigned char xdata*)¶.cmode[8]);
getcap(s_unit);
if (BTareFlag)
{
f_w = f_t;
f_w = f_w * CONVERTUNIT[s_unit];
if (decimal >= 0) f_w = f_w * exp_m[decimal];
f_w = f_w + 0.5*((float)division);
w_tare = (signed long int)f_w;
w_tare = w_tare / (signed long int)division;
w_tare = w_tare * division;
}
if (BHold)
{
f_w = f_h;
f_w = f_w * CONVERTUNIT[s_unit];
if (decimal >= 0) f_w = f_w * exp_m[decimal];
f_w = f_w + 0.5*((float)division);
w_hold = (signed long int)f_w;
w_hold = w_hold / (signed long int)division;
w_hold = w_hold * division;
}
BMustDisp = TRUE;
break;
case KEYT_Z:
if (BHold) {beep=1;break;}
if ( (!stab_lcd) || BErrData || BOverLoad) {beep = 1; break;}
if (w_gross > capacity) {beep = 1; break;}
tmp_li1 = adz;
adz = adz0;
f_w = GetWeightKg();
if (decimal_n >= 0) f_w = f_w * exp_m[decimal_n];
f_w = f_w + 0.5*((float)division_n);
tmp_li2 = (signed long int)f_w;
tmp_li2 = tmp_li2 / (signed long int)division_n;
tmp_li2 = tmp_li2 * division_n;
BTmp = FALSE;
if (tmp_li2 < 0) {tmp_li2 = -tmp_li2;BTmp = TRUE;}
tmp_li2 = 100 * tmp_li2;
tmp_li3 = 10 * capacity_n;
if (decimal_n < 0) tmp_li3 = tmp_li3 * exp_m[-decimal_n];
if (tmp_li2 <= tmp_li3)
{
adz = ad_out;
w_tare = 0;
BTareFlag = FALSE;
BMustDisp = TRUE;
}
else
{
adz = tmp_li1;
if (BTmp) {beep = 2;break;}
f_t = GetWeightKg();
w_tare = w_gross;
n_tare = w_tare;
t_unit = s_unit;
BTareFlag = TRUE;
BMustDisp = TRUE;
}
break;
default:
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -