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

📄 main.c

📁 24位AD压力实验板 protell99se打开
💻 C
📖 第 1 页 / 共 3 页
字号:
//========================================================================================
//校正密码验证 
//========================================================================================
    WDTCTL=WDTPW+WDTHOLD;  //Stop WDT 
    LCD_NUM=6;
    rest_LCD_data();
    if(!Password_ok_flag)
        Password_check(); 
    if(Exit_Modify_flag)  goto Exit_Modify; 
//========================================================================================
//校正密码验证通过进入用户上下限的输入
//========================================================================================  
   // rest_LCD_data();
    user_zero=User_input(0);//下限输入
    _NOP();
    //rest_LCD_data();
    user_basinful=User_input(0);//上限输入
   _NOP();  
  if(user_basinful>10000) P_RangeFlag=1;
//========================================================================================
//校正密码验证通过进入PGA的校正
//========================================================================================   
   PGA_Plus=0x00;
   WDTCTL =WDT_ADLY_250;  //WDT_ADLY_250;
   IE1 |= WDTIE;     // Enable WDT interrupt
   AD_Task_Complete=0;
   flag=0;
   while(flag)
   {
     while(AD_Task_Complete)    
          {  
          AD_Task_Complete=0;
          flag=0;
          for(i=0;i<(AD_Sampling_Time-1);i++)
            {
             ad1240_test[i]=Sampling_AD.Sampling_AD_Num[i+1];
            }
          }  
     
   }
  WDTCTL=WDTPW+WDTHOLD;  //Stop WDT  
  ad1240_PGA=(unsigned long int)((ad1240_test[0]+ad1240_test[1])/2);
  k=0;
  k=(unsigned long int)(8388608/ad1240_PGA);
  if(k>64) PGA_Plus=6;
  else {if(k>32) PGA_Plus=5;
       else{if(k>16) PGA_Plus=4;
            else{if(k>8) PGA_Plus=3;
                 else{if(k>4) PGA_Plus=2;
                      else{if(k>2) PGA_Plus=1;
                           else{ PGA_Plus=0;}
                          }
                     }
                }    
           }   
      }
//========================================================================================
//请用户输入线性校正点个数
//======================================================================================== 
 line_revise_num=6;
 line_revise_num=Line_num_Input(line_revise_num);
//========================================================================================
//进入线性校正
//========================================================================================  
 data=(user_basinful-user_zero)/line_revise_num;
 //if(abs(user_zero)>99999)  user_zero=0;
 //if(abs(user_basinful)>99999)  user_basinful=0;
 //if(abs(data)>99999)  data=0;
 LCD_NUM=6;
 for(i=0;i<line_revise_num;i++) 
 {
   if(i==(line_revise_num-1))
     Standard_Press[i]=User_input(user_zero); 
   else
     {     
     data_ad =user_basinful-i*data;
     Standard_Press[i]=User_input(data_ad);
     }
   WDTCTL =WDT_ADLY_250;  //WDT_ADLY_250;
   IE1 |= WDTIE;     // Enable WDT interrupt
   AD_Task_Complete=0;
   flag=1;
   while(flag)
        {
        while(AD_Task_Complete)    
            { 
            AD_Task_Complete=0;
            flag=0;
            for(j=0;j<(AD_Sampling_Time-1);j++)
              {
               ad1240_test[j]=Sampling_AD.Sampling_AD_Num[j+1];
              }
            } 
       
         }
   WDTCTL=WDTPW+WDTHOLD;  //Stop WDT  
   ad12401=(long int)((ad1240_test[0]+ad1240_test[1])/2);
   Measure_Press[i]=ad12401;
 } 
  Dis_key_INT();
  Press_Adjust_state=0x01;
  WriteWord(Adjust_state,Press_Adjust_state);//压力校正标志 
  
  WriteWord(AD_PGA_Plus,PGA_Plus);//PGA输入
  
  Foat_TO_Char(user_zero,char_data); //user_basinful
  WriteWord(Press_Zero,char_data[0]);//压力用户输入零点 
  WriteWord((Press_Zero+1),char_data[1]);//压力用户输入零点 
  WriteWord((Press_Zero+2),char_data[2]);//压力用户输入零点 
  WriteWord((Press_Zero+3),char_data[3]);//压力用户输入零点 
  
  Foat_TO_Char(user_basinful,char_data);  
  WriteWord(Press_Most,char_data[0]);//压力用户输入满程 
  WriteWord((Press_Most+1),char_data[1]);//压力用户输入满程 
  WriteWord((Press_Most+2),char_data[2]);//压力用户输入满程 
  WriteWord((Press_Most+3),char_data[3]);//压力用户输入满程
  
  WriteWord(Press_line_modify_num,line_revise_num);//线性校正点的个数  
   
  for(i=0;i<line_revise_num;i++) 
     {
     Foat_TO_Char(Standard_Press[i],char_data);  
     WriteWord((Press_Standard+i*8),char_data[0]);   //线性校正点的用户输入点的压力值  
     WriteWord((Press_Standard+i*8+1),char_data[1]); //线性校正点的用户输入点的压力值 
     WriteWord((Press_Standard+i*8+2),char_data[2]); //线性校正点的用户输入点的压力值 
     WriteWord((Press_Standard+i*8+3),char_data[3]); //线性校正点的用户输入点的压力值 
     Long_TO_Char(Measure_Press[i],char_data); 
     WriteWord((Press_Measure+i*8),char_data[0]);    //线性校正点的用户输入点的压力测量AD值
     WriteWord((Press_Measure+i*8+1),char_data[1]); //线性校正点的用户输入点的压力测量AD值 
     WriteWord((Press_Measure+i*8+2),char_data[2]);  //线性校正点的用户输入点的压力测量AD值 
     WriteWord((Press_Measure+i*8+3),char_data[3]);  //线性校正点的用户输入点的压力测量AD值 
    }
  
   En_key_INT();   
  
 Exit_Modify:
   WDTCTL =WDT_ADLY_250;  //WDT_ADLY_250;
   IE1 |= WDTIE;     // Enable WDT interrupt  
   Task_Mode=0;
//========================================================================================
//校正结束进入压力采样模式
//======================================================================================== 
break; 
case 2://温度测量任务
  
break; 
case 3://显示任务,压力显示任务,密码显示任务,键盘输入的压力值显示任务,AD值显示任务
 
break; 
case 4://键盘任务:密码输入任务,压力值输入任务,背光任务,关电源任务

break; 
case 5://CPU休眠任务


break; 
default: break;
 }
}
}
//========================================================================================
//函数:__interrupt void watchdog_timer (void)
//功能:检测AD采样是否完成
//变量:Byte
//返回:无
//========================================================================================
  #pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
	WDT_num++;
	if(WDT_num>4)
          {   
          if(EN_AD_Measure==1)
            {      
            AD_Task_Complete=0; 
            P6OUT &= ~BIT5;
            //Open_AD_Power();        
            Delay_1ms(10);    
            } 
          }
	if(Back_Light_Task_Start)
          {
           Back_Light_Time_num++; 
           if(Back_Light_Time_num>20)
             {
               Back_Light_Time_num=0;
             P2OUT |= BIT6;
             Back_Light_Task_Start=0;
             }
          }
	if(WDT_num>4)
	{    
	  if(EN_AD_Measure==1)
	    {   
	    WDT_num=0;  
	    ADS1240Init();      
	    En_AD_DRDY_INT(); 
	    adc_init();	
	    AD_Task_Start=1; 
	     }
	}   
} 
//========================================================================================
//函数:__interrupt void Port10_AD_DRDY(void)
//功能://ADC interrupt
//变量:无
//返回:无
//========================================================================================
#pragma vector=PORT1_VECTOR
__interrupt void Port10_AD_DRDY(void)
{  
  unsigned char i;     
  if(P1IFG&BIT0)//P1.0(DRDY)=0
    {    
      ADS1240SendByte(ADS1240_CMD_RDATA);
     //ad0.dat4[1]高字节,ad0.dat4[2]中间字节,ad0.dat4[3]低字节
      for(i=0;i<3;i++)
         Sampling_AD.Data_8Bit[i]=ADS1240ReceiveByte();   
      ad1240=0;
      ad1240= ad1240+(unsigned long)Sampling_AD.Data_8Bit[0]<<8;    
      ad1240= ad1240+(unsigned long)Sampling_AD.Data_8Bit[1]<<8;
      ad1240= ad1240+(unsigned long)Sampling_AD.Data_8Bit[2];
      if(ad1240 & 0x800000)
        ad1240 |= 0xff000000;
      Sampling_AD.Sampling_AD_Num[AD_Sampling_Num]=ad1240;  
      if(AD_Sampling_Num>(1))
      {
        AD_Task_Complete=1; 
        AD_Task_Start=0;
        AD_Sampling_Num=0;     
        Dis_AD_DRDY_INT(); //关中断
        Close_AD_Power();//关AD电源              
        _BIC_SR_IRQ(LPM3_bits);                 // Clear LPM3 bits from 0(SR)
        _NOP();	
        }
      else      
        {AD_Sampling_Num++; }    
   }
  P1IFG&=~BIT0;//clear IFG 
}

 //========================================================================================
//函数:__interrupt void Port2(void)
//功能://ADC interrupt
//变量:无
//返回:无
//========================================================================================
#pragma vector=PORT2_VECTOR
__interrupt void Port2(void)
{  
  unsigned char port2;  
   port2=P2IFG;   
  if(port2&(BIT0+BIT1+BIT2+BIT5))//P1.5P1.6P1.7(key)=1
   {
    key_data=0x00; 
    key_data= port2;
    key_data&=0x27;
    if(key_data!=0x00)
      {      
      KeyDown_flag=1;        
     /* if(key_data==0x01)  
         {
         key_data=0;          
         P2OUT &= ~BIT6;// 背光打开  
         Back_Light_Task_Start=1;
         Back_Light_Time_num=0;          
         KeyDown_flag=0;
        } 
      else*/
        _BIC_SR_IRQ(LPM3_bits);                 // Clear LPM3 bits from 0(SR) 
      }
   }  
P2IFG&=~(BIT0+BIT1+BIT2+BIT5);//clear IFG
}
//========================================================================================
//函数:void Password_check(void)
//功能:读取AD1240积存器
//变量:Byte
//返回:无
//========================================================================================
void Password_check(void)
{
 unsigned char flag,i;
////校正密码验证
 Exit_Modify_flag=0;
 Password_ok_flag=0;
  while(!Password_ok_flag)
  {
  switch(key_data)
       {
       case 0x01:
          {
            LCD_Cursor_Addr++;
           if(LCD_Cursor_Addr>=LCD_NUM) LCD_Cursor_Addr=0;
           key_data=0;
          } 
       break;
       case 0x04:
            {
              LCD_Key_bar[LCD_Cursor_Addr]++;
              if(LCD_Key_bar[LCD_Cursor_Addr]>=10) LCD_Key_bar[LCD_Cursor_Addr]=0;
                  key_data=0;    
            }
       break;
       case 0x02:
           {
           flag=0;
           for(i=0;i<LCD_NUM;i++)
           {
             if(LCD_Key_bar[i]!=password[i])//password_ok_flag
             { flag=1;break;}         
           }
           if(flag==1)
             Password_ok_flag=0;
           else 
             Password_ok_flag=1;
           key_data=0;
           }
        break;
        case 0x20://退出校验模式
            {
              Exit_Modify_flag=1;
              key_data=0;    
              flag=0;
              Password_ok_flag=1;
            }
       break;
       }
  Password_LCD_Display(LCD_Cursor_Addr,LCD_Key_bar);
  }
}
//========================================================================================
//函数:void Zero_input(void)
//功能:用户零点输入
//变量:Byte
//返回:无
//========================================================================================
float User_input(float input_data)
{
unsigned char flag,unit;
float  data;
long int data1;
unsigned long int data2;
  flag=0;
  unit=0;
  if(input_data<0)LCD_Key_bar[0]='-';
  else LCD_Key_bar[0]='+';
  data1=(long int)(input_data*10);
  if(input_data<0)data2=(~data1)+1;
  else data2=(unsigned long int)data1;
  LCD_Key_bar[1]=(unsigned char)(data2/10000);
  data2-=LCD_Key_bar[1]*10000;
  LCD_Key_bar[2]=(unsigned char)(data2/1000);
  data2-=LCD_Key_bar[2]*1000;
  LCD_Key_bar[3]=(unsigned char)(data2/100);
  data2-=LCD_Key_bar[3]*100;
  LCD_Key_bar[4]=(unsigned char)(data2/10);
  data2-=LCD_Key_bar[4]*10;
  LCD_Key_bar[5]=(unsigned char)(data2);
  DisplayUnit(0);
while(!flag)
  {  
      {
       switch(key_data)
        {
        case 0x01:
          {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -