📄 q1.c
字号:
ad_flag=0;
} // if(ad_flag==1)
}
else
{
if(ad_flag==1)
{
Show_AD_Data();
ad_flag=0;
}
}//没校正之前显示时时采样AD值
break;
case 1://校正模式
//========================================================================================
//校正密码验证
//========================================================================================
LCD_NUM=6;
if(!password_ok_flag)
Password_check();
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
rest_LCD_data();
Zero_modify_ok=0;
key_data=0;
//========================================================================================
// 满程校正
//========================================================================================
Most_modify_ok=0;
Open_WatchDog();
PGA_Plus=0;
while(!Most_modify_ok)
{
EN_AD_Flag=1;
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(key_data==0x01)
Most_modify_ok=1;
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
ad_flag=0;
}
}
Close_WatchDog();
//bar2=ad1240;
/* if(ad1240>0x7fffff)
{
ad1240=(ad1240|0xff000000);
ad1240=~ad1240+1;
Press_Data=0-(float)ad1240;
}*/
i=0;
i=(unsigned char)(0x7fffff/bar2);
if(i>64) PGA_Plus=6;
else {if(i>32) PGA_Plus=5;
else{if(i>16) PGA_Plus=4;
else{if(i>8) PGA_Plus=3;
else{if(i>4) PGA_Plus=2;
else{if(i>2) PGA_Plus=1;
else{ PGA_Plus=0;}
}
}
}
}
}
AD1240_Reg_Val[0]=PGA_Plus;
WriteWord(AD_PGA_Plus,PGA_Plus);
Most_modify_ok=0;
ad_flag=0;
/* Open_WatchDog();
modify_num=0;
while(!Most_modify_ok)
{
EN_AD_Flag=1;
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
bar3[modify_num]=ad1240;
modify_num++;
ad_flag=0;
if(modify_num>3)
Most_modify_ok=1;
}
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
}
Close_WatchDog();
ad1240=bar3[0]+bar3[1]+bar3[2]+bar3[3];
ad1240=(unsigned long int)(ad1240/4);
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)// 满程校正
{
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
Most_modify_ok=get_key_bar(LCD_Key_bar);
}
Save_key_data(&Most_data,Press_Most);
rest_LCD_data();
Zero_Most_Revise_Flag=1;
Dis_key_INT();
WriteWord(Zero_Most_Revise_Flag,Zero_Most_modify);
En_key_INT();
//========================================================================================
// 零点校正
//========================================================================================
Zero_Most_Revise_Flag=0;
Open_WatchDog();
while(!Zero_modify_ok)
{
En_key_INT();
EN_AD_Flag=1;
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
if(key_data==0x01)
Zero_modify_ok=1;
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
if(ad_flag==1)
{
Show_AD_Data(); //ad1240 8388608
ad_flag=0;
}
}
Close_WatchDog();
if(ad1240>0x800000)
{
AD_negative_flag=1;
ad1240=(ad1240|0xff000000);
ad1240=~ad1240+1;
}
Zero_Sampling_AD=ad1240;
Dis_key_INT();
WriteWord(AD_negative_ee_flag,AD_negative_flag);
En_key_INT();
Save_AD_Data(&Zero_Sampling_AD,Press_Zero_Sampling_AD);
key_data=0;
Zero_modify_ok=0;
rest_LCD_data();
set_lcd_out();
while(!Zero_modify_ok)
{
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
Zero_modify_ok=get_key_bar(LCD_Key_bar);
}
Save_key_data(&Zero_data,Press_Zero);
rest_LCD_data(); */
//========================================================================================
// 线性校正点个数
//========================================================================================
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)// 等待输入线性校正点数
{
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
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)
{
EN_AD_Flag=1;
En_key_INT();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
_NOP();
_NOP();
if(key_data==0x01)
line_modify_ok=1;
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
if(ad_flag==1)
{
Show_AD_Data(); //ad1240
ad_flag=0;
}
}
Close_WatchDog();
Measure_Press[i]=ad1240;
bar1=Press_Measure+i*8;
bar2=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)// 满程校正
{
if(key_data==0x05)
{Mode=0; power_off();key_data=0;goto star;}
line_modify_ok=get_key_bar(LCD_Key_bar);
}
bar1=Press_Standard+i*8;
bar2=(Standard_Press[i]);
Save_key_data(&bar2,bar1);
Standard_Press[i]=key_assignments;
}
for(i=0;i<100;i++)
{
if(Measure_Press[i]>0x7fffff)
{
bar2=(Measure_Press[i]|0xff000000);
bar2=~bar2+1;
Measure_Press1[i]=0;
Measure_Press1[i]=(float)(0-bar2);
}
else
{
Measure_Press1[i]=(float)Measure_Press[i];
}
}
//========================================================================================
// 存储校正OK标志
//========================================================================================
Press_Adjust_state=0x01;
Dis_key_INT();
WriteWord(Adjust_state,Press_Adjust_state);
En_key_INT();
set_lcd_powdn();
//========================================================================================
// 校正结束退出校正模式
//========================================================================================
Mode=0;
EN_AD_Flag=1;
Open_WatchDog();
AD_Sampling_num=4;
break;
case 2://清零模式
//========================================================================================
// 退出清零模式
//========================================================================================
Mode=0;
EN_AD_Flag=1;
//Open_WatchDog();
break;
case 3://单位切换模式
//========================================================================================
// 退出单位切换模式
//========================================================================================
Mode=0;
EN_AD_Flag=1;
//Open_WatchDog();
break;
case 4://显示校正参数和时时AD值模式
if(ad_flag==1)
{
}
//========================================================================================
// 退出显示校正参数和时时AD值模式
//========================================================================================
Mode=0;
EN_AD_Flag=1;
//Open_WatchDog();
break;
default: break;
} //switch( Mode)
}
}
//========================================================================================
//函数:__interrupt void watchdog_timer (void)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
if(EN_AD_Flag==1)
{
Open_AD_Power();
Delay(5);
}
if(back_light_flag)
{
if(back_light_num>5)
{
P2OUT |= BIT5;
back_light_flag=0;
}
}
back_light_num++;
if(EN_AD_Flag==1)
{
ADS1240Init();
adc_init();
En_AD_DRDY_INT();
_NOP();
}
}
//========================================================================================
//函数:__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&(BIT0+BIT1+BIT2+BIT3+BIT4))//P1.5P1.6P1.7(key)=1
{
key_data= port2;
key_data=key(key_data);
if(key_data!=0x00)
{
EN_AD_Flag=0;
KeyDown_flag=1;
if(key_data==4)
{
key_data=0;
// P2DIR |= BIT5;//
P2OUT &= ~BIT5;// 0x7e;
back_light_flag=1;
back_light_num=0;
EN_AD_Flag=0;
KeyDown_flag=0;
EN_AD_Flag=1;
}
if(key_data==5)
{
EN_AD_Flag=1;
if(C_Power_Flag==1)
{
EN_AD_Flag=0;
power_off();
//key_data=0;
}
else
{
C_Power_Flag=1;
EN_AD_Flag=1;
Mode=0;
WDTCTL =WDT_ADLY_1000; //WDT_ADLY_250;//WDT_ADLY_1000; // WDT 1s/4 interval timer
IE1 |= WDTIE;
En_key_INT();
//key_data=0;
}
}
}
}
P2IFG&=~(BIT0+BIT1+BIT2+BIT3+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;
Dis_AD_DRDY_INT(); //关中断
Close_AD_Power();//关AD电源
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
_NOP();
//En_key_INT();
}
else
{AD_num++; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -