uchar get_key()
{
uchar temp=0xff;
if(Key_Down()==1)
{
temp=key_scan();
}
return (temp) ;
}
void get_pizhong() //獲取皮重,秤盤重量
{
uint j;
ulong hx711_dat;
for(j=0;j<5;j++)
delay_1602(5);
hx711_dat=ReadCount(); //HX711AD轉換數據處理
temp=(uint)(hx711_dat/100);
}
void get_weight() //獲取被測物體重量
{
ulong hx711_data;
uint get,aa;
hx711_data=ReadCount(); //HX711AD轉換數據處理
get=(uint)(hx711_data/100);
if(get<(temp+4))
{
while(1)
{
weight="0;
TR0=0; //不允許運行
chaozhong_flag=0; //無重物,超重標志為0;
weight_shuzhi(weight);//顯示重量
hx711_data=ReadCount(); //HX711AD輸出數據處理
get=(uint)(hx711_data/100);
if(get">(temp+4))break;
}
}
else
aa=get-temp;
weight=(uint)((float)aa/4.4+0.05);//重量轉換函數,傳感器型號不同此函數要適當修改
weight=weight-qi_weight; //去皮
if(weight>=0) //重量為正
{
if(weight>5000) //報警極限范圍
{
buzz=0;
TR0=1;chaozhong_flag=1;} //重量大于1000g,超重報警
else
{buzz=1;chaozhong_flag=0;TR0=0;}
weizhi_zifu(0x00,'+');
}
else {weizhi_zifu(0x00,'-');} //重量為負時顯示負號,此語句可不要
}
void press()
{
nn: P3=0xf0; //保存個位
while(P3==0xf0)
{
get_weight();//得到重量
if(weight>0)
{weight_shuzhi(weight);}//顯示重量
else
{weight_shuzhi(-weight);}
}
dat=get_key();
if(dat>=0&&dat<10)
{
pricetable[0]=dat;
price_shuzhi(4,pricetable[0]+0x30);//顯示單價
}
if(dat==16) //去皮
{qi_weight=weight+qi_weight;goto nn;}
if(dat==15) //置零
{
zero();
goto nn;
}
//**************************************************
mm: P3=0xf0; //保存十位
while(P3==0xf0)
{
get_weight();//得到重量
if(weight>0)
{weight_shuzhi(weight);}//顯示重量
else
{weight_shuzhi(-weight);}
}
dat=get_key();
if(dat>=0&&dat<10)
{
pricetable[1]=pricetable[0];
price_shuzhi(2,pricetable[1]+0x30);
pricetable[0]=dat;
price_shuzhi(4,pricetable[0]+0x30);//顯示單價
}
if(dat==16) //去皮
{qi_weight=weight+qi_weight;goto mm;}
if(dat==12) //清除
{price_shuzhi(4,' ');goto nn;}
if(dat==15) //置零
{
zero();
goto nn;
}
//**************************************************
zz: P3=0xf0; //保存百位
while(P3==0xf0)
{
get_weight();//得到重量
if(weight>0)
{weight_shuzhi(weight);}//顯示重量
else
{weight_shuzhi(-weight);}
}
dat=get_key();
if(dat>=0&&dat<10)
{
pricetable[2]=pricetable[1];
price_shuzhi(1,pricetable[2]+0x30);
pricetable[1]=pricetable[0];
price_shuzhi(2,pricetable[1]+0x30) ;
pricetable[0]=dat;
price_shuzhi(4,pricetable[0]+0x30);//顯示
}
if(dat==12) //清除
{
pricetable[1]=pricetable[2] ;
price_shuzhi(4,pricetable[1]+0x30);
price_shuzhi(2,' ');goto mm;}
if(dat==16) //去皮
{qi_weight=weight+qi_weight;goto zz;}
if(dat==15) //置零
{
zero();
goto nn;
}
//**************************************************
xx:
do{
P3=0xf0; //清除百位
while(P3==0xf0)
{
get_weight();//得到重量
if(weight>0)
{weight_shuzhi(weight);}//顯示重量
else
{weight_shuzhi(-weight);}
}
dat=get_key();
if(dat==16) //去皮
{qi_weight=weight+qi_weight;goto xx;}
if(dat==12) //清除
{
pricetable[0]=pricetable[1];
price_shuzhi(4,pricetable[0]+0x30) ;
pricetable[1]=pricetable[2];
price_shuzhi(2,pricetable[1]+0x30);
price_shuzhi(1,' ');goto zz;}
if(dat==15) //置零
{
zero();
goto nn;
}
}while(dat!=14);
}
void main()
{
init(); //初始化定時器
init_1602();//初始化lcd
system(); //顯示初始化
dat=get_key(); //獲得鍵
M1=1;M2=1;//電機初始化
if(dat==13) //啟動鍵
{
clcye: M1=1;M2=0; //電機1工作
price_shuzhi(6,'M'); //顯示
price_shuzhi(7,'1');
while(1) //循環
{
if(dat==11)break; //停止鍵
get_pizhong(); //獲得皮重
press();//獲得鍵盤輸入值 函數調用
jianzhi=(uint)((pricetable[2]*10)+(pricetable[1])+pricetable[0]/10);//轉換
if((weight>=(float)jianzhi-0.2)&&(weight<=(float)jianzhi+0.2)) //結果比較
{
TR0=1; //開啟計數
M1=0;M2=1; //電機2工作 2min
price_shuzhi(6,'M');
price_shuzhi(7,'2');
if (count==2400) //延時間 2min
{
count=0;
TR0=0;
goto clcye;
}
}
}
}
}
void t0() interrupt 1 //定時器t0中斷
{
TH0=0x3c;
TL0=0xb0; //定時50ms
count++;
}
void t1() interrupt 3 //定時器t1中斷
{
TH1=0x3c;
TL1=0xb0; //定時50ms
if((weight>5000)&&(chaozhong_flag==1))
{
buzz=1;
}
else
{chaozhong_flag=0;}
}
為什么結果比較的時候總是實現不了? |