?? yh_t3_new.c
字號:
}
over_load();
ave3_ad0=ave3_ad;
ave3_ad=average3();
f_stab=stab(ave3_ad,ave3_ad0);
f_stab2=stab2();
//自動(dòng)歸零功能
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;
}
}
}
//穩(wěn)定符號
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;
//-----------------------
//數(shù)據(jù)的正負(fù)也是公共的
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顯示區(qū)域的第2個(gè)字位,必須包含小數(shù)點(diǎn)
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顯示區(qū)域的第2個(gè)字位,必須包含小數(shù)點(diǎn)
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顯示區(qū)域的第2個(gè)字位,必須包含小數(shù)點(diǎn)
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顯示區(qū)域的第2個(gè)字位,必須包含小數(shù)點(diǎn)
dis_zone[2]=((dis_zone[2])|0x01);
}
}
*********************************/
//LCD顯示的這條語句是公共的
display_1621();
//清零功能
//清零和去皮模塊必須有范圍,否則容易出現(xiàn)超載現(xiàn)象
//暫時(shí)將手動(dòng)清零的范圍設(shè)定為+2%~-2%,并且是
//以開機(jī)零點(diǎn)為基準(zhǔn)
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)//去皮狀態(tài)下不能清零
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);
}
}
}
//去皮功能
//去皮模塊必須有范圍,而且去皮必須有標(biāo)識(shí)符號
//去皮的范圍上限暫時(shí)設(shè)定為100%
//說明:自己編寫的這個(gè)去皮模塊包含了扣重。
//這個(gè)下限暫時(shí)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ù)數(shù)時(shí),不能去皮。
//{
//f_tare=0;
//alarm(800);
//}
dif=ad13[6].ad-ad_zero;//注意:此處使用的是
//當(dāng)前的零點(diǎn)
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);//延時(shí)的作用:避免按
//一下,程序當(dāng)作按
//兩下。
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://應(yīng)該報(bào)錯(cuò)!顯示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; // 啟動(dòng)定時(shí)器2
//TR1=1; // 啟動(dòng)定時(shí)器1
alarm(200);
i=5;//arr_BCD[0]中存放的內(nèi)容無意義。
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)
{
//發(fā)送之前必須把數(shù)字轉(zhuǎn)化成ASCII碼。
send_byte(arr_BCD[i]);
i--;
}
if(f_minus==0)
send_byte(45);//"-"對應(yīng)的ASCII碼
else
send_byte(32);//" "對應(yīng)的ASCII碼
}
//TR2=0; // 停止定時(shí)器2
//TR1=0; // 停止定時(shí)器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);
}
}
//以下是延時(shí)關(guān)閉LCD部分。
if(f_stab_mainly==0)
{
if(f_stab_weight==1)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -