📄 yh_t3_new.c
字号:
}
over_load();
ave3_ad0=ave3_ad;
ave3_ad=average3();
f_stab=stab(ave3_ad,ave3_ad0);
f_stab2=stab2();
//自动归零功能
ad_zero=auto_zero(ave3_ad);
i=0;
while(i<13)
{
ad13[i].times++;
if(ad13[i].times==13)
{
temp_j=i;
ad13[i].ad=ave3_ad;
ad13[i].times=0;
}
i++;
}
rotate();
sort();
if(ad13[6].ad>=ad_zero)
{
inc_ad=ad13[6].ad-ad_zero;
f_minus=1;
}
else
{
inc_ad=ad_zero-ad13[6].ad;
f_minus=0;
}
weight=inc_ad*buf_24c02_2L[0];
temp_weight=weight%(buf_24c02_AD[1]);
weight/=(buf_24c02_AD[1]);
if(temp_weight>((buf_24c02_AD[1])/2))
weight++;
weight*=step;
BIN_to_BCD(weight);
if((dis_zone[1]==0xbe)&&(count_point!=4))
{
dis_zone[1]=0x00;
if((dis_zone[2]==0xbe)&&(count_point!=3))
{
dis_zone[2]=0x00;
if((dis_zone[3]==0xbe)&&(count_point!=2))
{
dis_zone[3]=0x00;
if((dis_zone[4]==0xbe)&&(count_point!=1))
dis_zone[4]=0x00;
}
}
}
//稳定符号
if(weight==temp_weight0)
f_stab_weight=1;
else
{
f_stab_weight=0;
temp_weight0=weight;
}
//归零符号
if(weight==0)
f_zero=1;
else
f_zero=0;
//-----------------------
//数据的正负也是公共的
if((f_minus==0)&&(weight>=step))
dis_zone[0]=0x40;
else
dis_zone[0]=0x00;
//单位是克的情况
if((f_g==1)&&(count_point!=0))
dis_zone[5-count_point]|=0x01;
/********************************
//单位是千克的情况
if(f_kg==1)
{
i=1;
while(i<6)
{
j=arr_BCD[i];
dis_zone[i]=discode_num[j];
i++;
}
//1621显示区域的第2个字位,必须包含小数点
dis_zone[1]=((dis_zone[1])|0x01);
}
//单位是英镑的情况
if(f_lb==1)
{
weight*=220468;
i=5;
while(i>0)
{
weight/=10;
i--;
}
temp_weight=weight;
BIN_to_BCD(temp_weight);
i=1;
while(i<6)
{
j=arr_BCD[i];
dis_zone[i]=discode_num[j];
i++;
}
//1621显示区域的第2个字位,必须包含小数点
dis_zone[1]=((dis_zone[1])|0x01);
}
//单位是盎司的情况
if(f_oz==1)
{
weight*=352734;
i=4;
while(i>0)
{
weight/=10;
i--;
}
temp_weight=weight;
BIN_to_BCD(temp_weight);
if(arr_BCD[0]==0)
{
i=1;
while(i<6)
{
j=arr_BCD[i];
dis_zone[i]=discode_num[j];
i++;
}
//1621显示区域的第2个字位,必须包含小数点
dis_zone[1]=((dis_zone[1])|0x01);
}
else
{
i=0;
while(i<5)
{
j=arr_BCD[i];
dis_zone[i+1]=discode_num[j];
i++;
}
//1621显示区域的第2个字位,必须包含小数点
dis_zone[2]=((dis_zone[2])|0x01);
}
}
*********************************/
//LCD显示的这条语句是公共的
display_1621();
//清零功能
//清零和去皮模块必须有范围,否则容易出现超载现象
//暂时将手动清零的范围设定为+2%~-2%,并且是
//以开机零点为基准
if(ZERO==0)
{
delay_nms(50);
if(ZERO==0)
{
while(1)
{
if(ZERO==1)
break;
}
alarm(200);//按键音,表示按键有效
if(f_zero==1)
{
n_add=0;
total=0;
f_add=0;
//显示“n =0”
dis_zone[0]=discode_low[14];
dis_zone[1]=0x00;
dis_zone[2]=0x00;
dis_zone[3]=0x00;
dis_zone[4]=discode_low[0];
//dis_zone[5]=0xbe;
dis_zone[5]=discode_num[0];
display_1621();
delay_nms(5000);
}
else if(f_tare==1)//去皮状态下不能清零
alarm(2000);
else
{
dif=ad13[6].ad-ad_zero_kj;
if((dif<MANU_ZERO_POS(y))&&(dif>MANU_ZERO_NEG(y)))
//if((dif<manu_zero_pos)&&(dif>manu_zero_neg))
ad_zero=ad13[6].ad;
else
alarm(800);
}
}
}
//去皮功能
//去皮模块必须有范围,而且去皮必须有标识符号
//去皮的范围上限暂时设定为100%
//说明:自己编写的这个去皮模块包含了扣重。
//这个下限暂时copy保加利亚,
//?不知道该下限如何确定。
if(TARE==0)
{
delay_nms(50);
if(TARE==0)
{
while(!TARE);
alarm(200);//按键音,表示按键有效
//f_tare=1;
f_tare=!f_tare;
if(f_tare==1)
{
//if(f_minus==0)//重量为负数时,不能去皮。
//{
//f_tare=0;
//alarm(800);
//}
dif=ad13[6].ad-ad_zero;//注意:此处使用的是
//当前的零点
if(((dif>TARE_LOW)&&(dif<TARE_HIGH(y)))||((dif>-TARE_HIGH(y))&&(dif<-TARE_LOW)))
//if(((dif>TARE_LOW)&&(dif<tare_high))||((dif>-tare_high)&&(dif<-TARE_LOW)))
ad_zero=ad13[6].ad;
else
{
f_tare=0;
alarm(800);
}
}
else
ad_zero=ad_zero_kj;
}
}
/****************
if(MENU==0)
{
delay_nms(50);
{
if(MENU==0)
{
delay_nms(500);//延时的作用:避免按
//一下,程序当作按
//两下。
count_unit++;
if(count_unit>4)
count_unit=1;
switch(count_unit)
{
case 1:f_oz=1;
f_lb=0;
f_g=0;
f_kg=0;
break;
case 2:f_oz=0;
f_lb=1;
f_g=0;
f_kg=0;
break;
case 3:f_oz=0;
f_lb=0;
f_g=1;
f_kg=0;
break;
case 4:f_oz=0;
f_lb=0;
f_g=0;
f_kg=1;
break;
default://应该报错!显示Err 2
dis_zone[0]=0x00;
dis_zone[1]=discode_cap[5];
dis_zone[2]=discode_low[18];
dis_zone[3]=discode_low[18];
dis_zone[4]=0x00;
//dis_zone[5]=0x7c;
dis_zone[5]=discode_num[2];
display_1621();
alarm(800);
}
}
}
}
****************/
//----------------------------------------------
//串口部分
if(MENU==0)
{
delay_nms(50);
if(MENU==0)
{
while(!MENU);
//TH2=0xFF; // 波特率9600
//TL2=0xDC;
//TR2=1; // 启动定时器2
//TR1=1; // 启动定时器1
alarm(200);
i=5;//arr_BCD[0]中存放的内容无意义。
while(i>0)
{
arr_BCD[i]+=48;
i--;
}
for(;i<5-count_point;i++)
{
arr_BCD[i]=arr_BCD[i+1];
}
arr_BCD[i]=46;
i=5;
while(i>=0)
{
//发送之前必须把数字转化成ASCII码。
send_byte(arr_BCD[i]);
i--;
}
if(f_minus==0)
send_byte(45);//"-"对应的ASCII码
else
send_byte(32);//" "对应的ASCII码
}
//TR2=0; // 停止定时器2
//TR1=0; // 停止定时器1
}
//-------------------------------------------
//累加部分
if(ADD==0)
{
if(ADD==0)
{
while(1)
{
if(ADD==1)
break;
}
alarm(200);
f_add=1;
if(f_zero==0)//不是空载的情况下。
{
total+=weight;
n_add++;
}
//显示:“totL= ”
dis_zone[0]=discode_low[20];
dis_zone[1]=discode_low[15];
dis_zone[2]=discode_low[20];
dis_zone[3]=discode_cap[12];
dis_zone[4]=discode_low[0];
dis_zone[5]=0x00;
display_1621();
delay_nms(5000);
BIN_to_BCD(total);
if((dis_zone[0]==0xbe)&&(count_point!=5))
{
dis_zone[0]=0x00;
if((dis_zone[1]==0xbe)&&(count_point!=4))
{
dis_zone[1]=0x00;
if((dis_zone[2]==0xbe)&&(count_point!=3))
{
dis_zone[2]=0x00;
if((dis_zone[3]==0xbe)&&(count_point!=2))
{
dis_zone[3]=0x00;
if((dis_zone[4]==0xbe)&&(count_point!=1))
dis_zone[4]=0x00;
}
}
}
}
if(count_point!=0)
dis_zone[5-count_point]|=0x01;
display_1621();
delay_nms(5000);
//显示“n =x”
dis_zone[0]=discode_low[14];
dis_zone[1]=0x00;
dis_zone[2]=0x00;
dis_zone[3]=0x00;
dis_zone[4]=discode_low[0];
dis_zone[5]=discode_num[n_add];
display_1621();
delay_nms(5000);
}
}
//以下是延时关闭LCD部分。
if(f_stab_mainly==0)
{
if(f_stab_weight==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -