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

📄 2.c

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