📄 2.c
字号:
ad1240=0;
ad1240=AD_Data_Manage(ad1240_test1,AD_Sampling_num);
dataa=Hex_to_BCD(ad1240);
for(i=7;i>0;i--)
{
re_buffer1[i-1]=(dataa&0x0000000f);
re_buffer1[i-1]=re_buffer1[i-1]+0x30;
dataa=dataa>>4;
}
for(i=0;i<8;i++)
{
sent_byte(re_buffer1[i+1]);
}
sent_byte(0x0D);
sent_byte(0x0A);
//Zero_Sampling_AD=8890;
Press_Data=(float)(ad1240-Zero_Sampling_AD);
bar2=(Most_Sampling_AD-Zero_Sampling_AD);
Press_Data=(Press_Data/((float)bar2));
Press_Data=Press_Data*35000;//((float)Most_data);
set_lcd_out();
ad1240=(Press_Data)*100;
ad1240=0x000000ff&ad1240;
if(ad1240>5)
ad1240=(unsigned long int)(Press_Data)*10+1;
else
ad1240=(unsigned long int)(Press_Data)*10+1;
I_VDisplay(6,Press_Data);
set_lcd_powdn();
}
ad_flag=0;
}
}
else
{ Show_AD_Data(); }//没校正之前显示时时采样AD值
break;
case 1://校正模式
//========================================================================================
//校正密码验证
//========================================================================================
LCD_NUM=6;
/*if(!password_ok_flag)
Password_check(); */
rest_LCD_data();
Zero_modify_ok=0;
key_data=0;
//========================================================================================
// 零点校正
//========================================================================================
Zero_Most_Revise_Flag=0;
Open_WatchDog();
while(!Zero_modify_ok)
{
init_port();
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(key_data==0x01)
Zero_modify_ok=1;
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
ad_flag=0;
}
}
Close_WatchDog();
Zero_Sampling_AD=ad1240;
Save_AD_Data(&Zero_Sampling_AD,Press_Zero_Sampling_AD);
//Initial_Resistance=(float)Zero_Sampling_AD/PGA_Plus;
// Initial_Resistance=Initial_Resistance*3000;
// Initial_Resistance=Initial_Resistance/16777216;
key_data=0;
Zero_modify_ok=0;
rest_LCD_data();
set_lcd_out();
while(!Zero_modify_ok)
{
Zero_modify_ok=get_key_bar(LCD_Key_bar);
}
Save_key_data(&Zero_data,Press_Zero);
rest_LCD_data();
//========================================================================================
// 满程校正
//========================================================================================
Most_modify_ok=0;
Open_WatchDog();
while(!Most_modify_ok)
{
init_port();
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(key_data==0x01)
Most_modify_ok=1;
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
ad_flag=0;
}
}
Close_WatchDog();
Most_Sampling_AD=ad1240;
Save_AD_Data(&Most_Sampling_AD,Press_Most_Sampling_AD);
rest_LCD_data();
key_data=0;
Most_modify_ok=0;
set_lcd_out();
while(!Most_modify_ok)// 满程校正
{
Most_modify_ok=get_key_bar(LCD_Key_bar);
}
Save_key_data(&Most_data,Press_Most);
rest_LCD_data();
// k=((float)(Most_Sampling_AD-Zero_Sampling_AD))/16;
// k=k*3000;
//k=k/16777216;
// Zero_Most_k=(Most_data-Zero_data)/k;
Zero_Most_Revise_Flag=1;
Dis_key_INT();
WriteWord(Zero_Most_Revise_Flag,Zero_Most_modify);
En_key_INT();
//========================================================================================
// 线性校正点个数
//========================================================================================
rest_LCD_data();
line_modify_ok=0;
LCD_NUM=2;
DisplayNum(5,0,0,1);
DisplayNum(6,0,0,1);
DisplayNum(3,0,0,1);
DisplayNum(4,0,0,1);
while(!line_modify_ok)// 满程校正
{
line_modify_ok=get_key_bar(LCD_Key_bar);
}
line_modify_num=(unsigned long)LCD_Key_bar[1];
line_modify_num=line_modify_num+(unsigned long)LCD_Key_bar[0]*10;
LCD_NUM=6;
*Standard_Press=0;
Dis_key_INT();
WriteWord(Press_line_modify_num,line_modify_num);
En_key_INT();
//========================================================================================
// 线性校正数据
//========================================================================================
for(i=0;i<line_modify_num;i++)
{
line_modify_ok=0;
Open_WatchDog();
while(!line_modify_ok)
{
init_port();
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(key_data==0x01)
line_modify_ok=1;
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
ad_flag=0;
}
}
Close_WatchDog();
Most_Sampling_AD=ad1240;
bar1=Press_Measure+i*8;
bar2=(unsigned long int)(Measure_Press+i);
Save_AD_Data(&bar2,bar1);
line_modify_ok=0;
rest_LCD_data();
line_modify_ok=0;
rest_LCD_data();
set_lcd_out();
key_data=0;
while(!line_modify_ok)// 满程校正
{line_modify_ok=get_key_bar(LCD_Key_bar);}
bar1=Press_Standard+i*8;
bar2=(unsigned long int)(Standard_Press+i);
Save_key_data(&bar2,bar1);
if(i>0)
{
k=((float)(Measure_Press[i]-Measure_Press[i-1]))/16;
k=k*3000;
k=k/16777216;
line_modify_k[i-1]=(Standard_Press[i]-Standard_Press[i-1])/k;
}
}
//========================================================================================
// 存储校正OK标志
//========================================================================================
Press_Adjust_state=0x01;
Dis_key_INT();
WriteWord(Adjust_state,Press_Adjust_state);
En_key_INT();
set_lcd_powdn();
//========================================================================================
// 校正结束退出校正模式
//========================================================================================
Mode=0;
Open_WatchDog();
AD_Sampling_num=4;
//break;
goto star;
case 2://清零模式
//========================================================================================
// 退出清零模式
//========================================================================================
Mode=0;
Open_WatchDog();
goto star;
case 3://单位切换模式
//========================================================================================
// 退出单位切换模式
//========================================================================================
Mode=0;
Open_WatchDog();
goto star;
case 4://显示校正参数和时时AD值模式
if(ad_flag==1)
{
}
//========================================================================================
// 退出显示校正参数和时时AD值模式
//========================================================================================
Mode=0;
Open_WatchDog();
goto star;
default: break;
} //switch( Mode)
goto star;
}
//========================================================================================
//函数:__interrupt void Port2(void)
//功能://ADC interrupt
//变量:无
//返回:无
//========================================================================================
#pragma vector=PORT2_VECTOR
__interrupt void Port2(void)
{
unsigned char port2;
port2=P2IFG;
Close_WatchDog();
Close_AD_Sampling();
if(port2&(BIT5+BIT6+BIT4))//P1.5P1.6P1.7(key)=1
{
key_data= port2;
KeyDown_flag=1;
key_data=key(key_data);
}
P2IFG&=~(BIT5+BIT6+BIT4);//clear IFG
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
//========================================================================================
//函数:__interrupt void Port10_AD_DRDY(void)
//功能://ADC interrupt
//变量:无
//返回:无
//========================================================================================
#pragma vector=PORT1_VECTOR
__interrupt void Port10_AD_DRDY(void)
{
unsigned char i;
//intdata=IE1;
//IE1=0;
if(P1IFG&BIT0)//P1.0(DRDY)=0
{
// ad0.dat4[0]=0x00;
ADS1240SendByte(ADS1240_CMD_RDATA);
//ad0.dat4[1]高字节,ad0.dat4[2]中间字节,ad0.dat4[3]低字节
for(i=1;i<4;i++)
{
ad0.dat4[i]=ADS1240ReceiveByte();
}
ad1240=0;
ad1240=ad1240+(unsigned long)ad0.dat4[1]<<8;
ad1240=ad1240+(unsigned long)ad0.dat4[2]<<8;
ad1240=ad1240+(unsigned long)ad0.dat4[3];
ad1240_test[AD_num]=ad1240;
if(AD_num>(AD_Sampling_num-1))
{
ad_flag=1;
init_port();
En_key_INT();
Dis_AD_DRDY_INT(); //关中断
Close_AD_Power();//关AD电源
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
_NOP();
}
else
{AD_num++; }
}
// IE1=intdata;
P1IFG&=~BIT0;//clear IFG
}
//========================================================================================
//函数:__interrupt void watchdog_timer (void)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
Open_AD_Sampling();
_NOP();
_NOP();
}
//========================================================================================
//函数:void adc_init(void)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
void adc_init(void)
{
unsigned char i,j;
ADS1240Init();
P4OUT&=~ADS1240_RESET;//RSET LO
Delay(6);//52 cycle
P4OUT|=ADS1240_RESET;//RSET HI, LO-->HI > 16 clock
Delay(6);//52 cycle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -