📄 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();
}
}
//校准完成后显示“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);
//菜单结束:
while(1)
{
if(MENU==0)
{
delay_nms(50);
if(MENU==0)
{
while(!MENU);
alarm(200);//按键音
break;
}
}
}
}
}
}
//-------------------------------
//读取AT24C02中的数据
//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中的除校准之外的数据
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中第一次
//的读出数据超出指定的范围,造成差错。
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;
//---------------------------------------
//串口设置
//串口方式选择方式1,波特率可选。
//PCON可能会应用一下,毕竟我们的波特率是可选的。
//这样改变波特率肯定比修改定时器的寄存器要方便。
//如果使用T2作为波特率发生器,则PCON没有意义。
//定时器2产生波特率,T2,设置成波特率模式且串口
//产生发送脉冲。
/********************************************
T2CON=0x30; // 定时器2工作于波特率模式。
RCAP2H=0xFF; // 波特率9600
RCAP2L=0xDC;
//TH2=0xFF; // 波特率9600
//TL2=0xDC;
SCON=discode_low[0]; // 设定串行口工作方式
IE=0x00; // 禁止任何中断
//TR2=1; // 启动定时器2
***********************************************/
//---------------------------------------------
//---------------------------------------------
TMOD = 0x25; // 定时器1工作于8位自动重载模式,作为波特率发生器。
//计数器0工作于16计数器模式。
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; // 设定串行口工作方式
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;//使分度值发挥作用,此后
//buf_24c02_2L[0]存储的数据
//并不是准确的量程值,但是
//从另一种角度来讲是真正的
//量程。
//-------------------------------
//下面是开机显示部分
//reset_1621();
//cmd_1621(BIAS_COM);
//cmd_1621(SYSTEN);
//-------------------------------
//cmd_1621(BUZON);//打开蜂鸣器
//cmd_1621(F_2K);//声音频率设为2K
//delay_nms(800);
//cmd_1621(BUZOFF);//关闭蜂鸣器
alarm(800);
//-------------------------------
//利用初始化数据,使得开机时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上的多余内容,因为默认单位是克,所以此处
//没有把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数据缓冲区
{
cmd_5460(0x5e);//输入向状态寄存器写数据命令
write_5460(0x00800000);//向5460中写入24位数据
//DRDY清零
while(1)
{
cmd_5460(0x1e);//输入读状态寄存器命令
buf_5460=read_5460();//从5460读出24位数据
//查询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);//输入向状态寄存器写数据命令
write_5460(0x00800000);//向5460中写入24位数据
//DRDY清零
while(1)
{
cmd_5460(0x1e);//输入读状态寄存器命令
buf_5460=read_5460();//从5460读出24位数据
//查询DRDY
if(((buf_5460)&0x00020000)==0x00020000)
{
//cmd_5460(0x0e);//读取瞬时电流寄存器
cmd_5460(0x16);//读取平均电流寄存器
ad3[0]=read_5460();
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -