?? yh_t3_new.c
字號:
}
}
}
if(ZERO==0)
{
delay_nms(50);
if(ZERO==0)
{
while(!ZERO);
alarm(200);//按鍵音
if(f_FaMa==0)
{
temp_FaMa=0;
f_FaMa=1;
}
else
{
temp_FaMa*=10;
if(temp_FaMa>=100000)
temp_FaMa%=100000;
}
count_FaMa=0;
}
}
if(MENU==0)
{
delay_nms(50);
if(MENU==0)
{
while(!MENU);
alarm(200);//按鍵音
buf_24c02_2L[0]=temp_range;
buf_24c02_2L[1]=temp_FaMa;
wr_nbyte(0x10,buf_24c02_2L,8);
delay_nms(10);
if(buf_24c02_2L[0]!=buf_24c02_2L[1])
{
buf_24c02_AD[1]*=buf_24c02_2L[0];
buf_24c02_AD[1]/=buf_24c02_2L[1];
}
wr_nbyte(0x00,buf_24c02_AD,8);
delay_nms(10);
break;
}
}
BIN_to_BCD(temp_FaMa);
dis_zone[0]=discode_cap[6];//第一個字位顯示“F”
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();
}
}
//校準(zhǔn)完成后顯示“byE”字符
dis_zone[0]=0x00;
dis_zone[1]=discode_low[2];
dis_zone[2]=discode_low[25];
dis_zone[3]=discode_cap[5];
dis_zone[4]=0x00;
dis_zone[5]=0x00;
dis_zone[6]=0x00;
display_1621();
alarm(1000);
wr_nbyte(0x08,buf_24c02_4B,4);
//菜單結(jié)束:
while(1)
{
if(MENU==0)
{
delay_nms(50);
if(MENU==0)
{
while(!MENU);
alarm(200);//按鍵音
break;
}
}
}
}
}
}
//-------------------------------
//讀取AT24C02中的數(shù)據(jù)
//buf_24c02_AD[0]=rd_long(0x00);
//buf_24c02_AD[1]=rd_long(0x04);
rd_seq(0x00,buf_24c02_AD,8);
y=(long)(buf_24c02_AD[1]);
//buf_24c02_2L[0]=rd_long(0x10);
//buf_24c02_2L[1]=rd_long(0x14);
rd_seq(0x10,buf_24c02_2L,8);
//---------------------------------
/***********************************
zero_pos=buf_24c02_AD[1]/5;
zero_neg=buf_24c02_AD[1]/25;
zero_neg*=(-1);
manu_zero_pos=buf_24c02_AD[1]/50;
manu_zero_neg=manu_zero_pos*(-1);
auto_zero_pos=buf_24c02_AD[1]/200;
auto_zero_neg=auto_zero_pos*(-1);
tare_high=buf_24c02_AD[1];//可以100%去皮。
AD_over=E*9;
AD_over+=buf_24c02_AD[1];
AD_over+=buf_24c02_AD[0];
************************************/
//y=buf_24c02_AD[1];
//buf_24c02_AD[0]=15420;
//buf_24c02_AD[1]=76477;
//limit_load=buf_24c02_AD[0];
//此處求解滿量程的AD平均值的上限會存在一定的誤差,
//但是,誤差有限,可以忽略。
//if(buf_24c02_2L[0]==buf_24c02_2L[1])
//limit_load=buf_24c02_AD[0]+buf_24c02_AD[1];
//else
//{
//limit_load=buf_24c02_AD[1]*buf_24c02_2L[0];
//limit_load/=buf_24c02_2L[1];
//limit_load+=buf_24c02_AD[0];
//}
//limit_load+=E*9;
//--------------------------------------
//讀取AT24C02中的除校準(zhǔn)之外的數(shù)據(jù)
rd_seq(0x08,buf_24c02_4B,4);
count_step=buf_24c02_4B[0];
count_point=buf_24c02_4B[1];
count_baud=buf_24c02_4B[2];
count_BL=buf_24c02_4B[3];
//下面這些條件判斷語句的目的是防止從24C02中第一次
//的讀出數(shù)據(jù)超出指定的范圍,造成差錯。
if(count_step>5)
count_step=0;
if(count_point>5)
count_point=0;
if(count_BL>1)
count_BL=0;
if(count_baud>3)
count_baud=0;
//---------------------------------------
//串口設(shè)置
//串口方式選擇方式1,波特率可選。
//PCON可能會應(yīng)用一下,畢竟我們的波特率是可選的。
//這樣改變波特率肯定比修改定時器的寄存器要方便。
//如果使用T2作為波特率發(fā)生器,則PCON沒有意義。
//定時器2產(chǎn)生波特率,T2,設(shè)置成波特率模式且串口
//產(chǎn)生發(fā)送脈沖。
/********************************************
T2CON=0x30; // 定時器2工作于波特率模式。
RCAP2H=0xFF; // 波特率9600
RCAP2L=0xDC;
//TH2=0xFF; // 波特率9600
//TL2=0xDC;
SCON=discode_low[0]; // 設(shè)定串行口工作方式
IE=0x00; // 禁止任何中斷
//TR2=1; // 啟動定時器2
***********************************************/
//---------------------------------------------
//---------------------------------------------
TMOD = 0x25; // 定時器1工作于8位自動重載模式,作為波特率發(fā)生器。
//計數(shù)器0工作于16計數(shù)器模式。
T2CON=0x00; //定時器2工作在16位自動重裝載模式。
//TH1 = 0xFD; // 波特率9600
//TL1 = 0xFD;
switch(count_baud)
{
case 0: TH1 = discode_cap[6];
TL1 = discode_cap[6];
break;//波特率1200
case 1: TH1 = 0xf4;
TL1 = 0xf4;
break;//波特率2400
case 2: TH1 = discode_low[2];
TL1 = discode_low[2];
break;//波特率4800
case 3: TH1 = 0xfd;
TL1 = 0xfd;
break;//波特率9600
default: //顯示錯誤號“Err 8”
alarm(800);
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]=0xfe;
dis_zone[5]=discode_num[8];
display_1621();
//此處延時很長,目的是讓使用者
//看清楚錯誤號。
delay_nms(5000);
}
RCAP2H=0x3c;
RCAP2L=0xb0;
SCON=0x40; // 設(shè)定串行口工作方式
PCON&=0xef; // 波特率不倍增
TR1=1; // 啟動定時器1
CLK_COUNTER0=0;
//--------------------------------------
//確定稱重時的分度值
switch(count_step)
{
case 0: step=1;
break;
case 1: step=2;
break;
case 2: step=5;
break;
case 3: step=10;
break;
case 4: step=20;
break;
case 5: step=50;
break;
default: //顯示錯誤號"Err 7"
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]=0x0e;
dis_zone[5]=discode_num[7];
display_1621();
alarm(800);
//此處延時很長,目的是讓使用者
//看清楚錯誤號。
delay_nms(5000);
}
buf_24c02_2L[0]/=step;//使分度值發(fā)揮作用,此后
//buf_24c02_2L[0]存儲的數(shù)據(jù)
//并不是準(zhǔn)確的量程值,但是
//從另一種角度來講是真正的
//量程。
//-------------------------------
//下面是開機顯示部分
//reset_1621();
//cmd_1621(BIAS_COM);
//cmd_1621(SYSTEN);
//-------------------------------
//cmd_1621(BUZON);//打開蜂鳴器
//cmd_1621(F_2K);//聲音頻率設(shè)為2K
//delay_nms(800);
//cmd_1621(BUZOFF);//關(guān)閉蜂鳴器
alarm(800);
//-------------------------------
//利用初始化數(shù)據(jù),使得開機時LCD不顯示
//display_1621();
//cmd_1621(LCDON);//打開LCD
//-------------------------------
i=0;
while(i<6)
{
cs_1621=0;
wr_id(ID_WR);
wr_addr(0x00+2*i);
wr_byte_1621(0xff);
reset_1621();
delay_nms(400);
cs_1621=0;
wr_id(ID_WR);
wr_addr(0x00+2*i);
wr_byte_1621(0x00);
reset_1621();
delay_nms(400);
i++;
}
//-------------------------------
//使LCD全部顯示
f_g=1;
//f_kg=1;//表征單位克
//f_lb=1;//表征單位英鎊
//f_oz=1;//表征單位盎司
f_x1=1;
f_hold=1;
f_tare=1;
f_bat=1;
f_zero=1;
f_stab_weight=1;
f_add=1;
i=5;
while(i>=0)
{
dis_zone[i]=0xff;
i--;
}
display_1621();
//-------------------------------
off_on_lcd();
off_on_lcd();
//清除LCD上的多余內(nèi)容,因為默認(rèn)單位是克,所以此處
//沒有把f_g清零。
//f_kg=0;
//f_lb=0;
//f_oz=0;
f_x1=0;
f_hold=0;
f_tare=0;
f_bat=0;
f_zero=0;
f_stab_weight=0;
f_add=0;
i=5;
while(i>=0)
{
dis_zone[i]=0x00;
i--;
}
display_1621();
//-------------------------------
//背光是否點亮取決于下面這條語句。
BL=count_BL;
//------------------------------------------
//alarm_low();
//------------------------------------------
i=0;
while(i<3)//最開始取3次AD值,存放在ad3數(shù)據(jù)緩沖區(qū)
{
cmd_5460(0x5e);//輸入向狀態(tài)寄存器寫數(shù)據(jù)命令
write_5460(0x00800000);//向5460中寫入24位數(shù)據(jù)
//DRDY清零
while(1)
{
cmd_5460(0x1e);//輸入讀狀態(tài)寄存器命令
buf_5460=read_5460();//從5460讀出24位數(shù)據(jù)
//查詢DRDY
if(((buf_5460)&0x00020000)==0x00020000)
{
//cmd_5460(0x0e);//讀取瞬時電流寄存器
cmd_5460(0x16);//讀取平均電流寄存器
ad3[i]=read_5460();
break;
}
}
i++;
}
ave3_ad=average3();
ad_zero_kj=ave3_ad;
i=12;
while(i>=0)
{
ad13[i].ad=ave3_ad;
ad13[i].times=12-i;
i--;
}
//------------------
over_load();
//------------------------------------
//記重部分開始
ad_zero_kj=zero_comp();
ad_zero=ad_zero_kj;
while(1)
{
rotate3();
cmd_5460(0x5e);//輸入向狀態(tài)寄存器寫數(shù)據(jù)命令
write_5460(0x00800000);//向5460中寫入24位數(shù)據(jù)
//DRDY清零
while(1)
{
cmd_5460(0x1e);//輸入讀狀態(tài)寄存器命令
buf_5460=read_5460();//從5460讀出24位數(shù)據(jù)
//查詢DRDY
if(((buf_5460)&0x00020000)==0x00020000)
{
//cmd_5460(0x0e);//讀取瞬時電流寄存器
cmd_5460(0x16);//讀取平均電流寄存器
ad3[0]=read_5460();
break;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -