⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 q1.c

📁 24位AD压力实验板 protell99se打开
💻 C
📖 第 1 页 / 共 3 页
字号:
      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 + -