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

📄 adc.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
sys_data_type adc_flag;
#define adc_dy_flag adc_flag.Bit.BIT0
#define adc_yg_flag adc_flag.Bit.BIT1
#define adc_dyoryg  adc_flag.Bit.BIT2
//AD2电源       AD3雨刮
unsigned int ad_tran_temp;
unsigned int ad_yg_timer;
unsigned char ad_yg_counter;
unsigned int ad_dy_value;
unsigned char ad_dy_counter;

unsigned char ad_dy_arr[4];
unsigned char ad_dy_counter1;

//adc初始化:系统电压和雨刮时间
void init_adc(void){
  adc_dy_flag=0;
  adc_yg_flag=0;
  adc_dyoryg=0;         //先电压后雨刮时间
  ad_yg_timer=0;
  ad_dy_value=0;
  ad_yg_counter=0;
  ad_dy_counter=0;
  ad_dy_counter1=0;
  
  ADSCR=0x1f;
  //ADSCR_COCO/转换结束标志位/1=结束/只读
  //ADSCR_AIEN=0;//ADC中断使能/禁止中断
  //ADSCR_ADCO=0;//连续转换位/单次转换
  //ADSCR_ADCH[4..0]/AD转换通道选择/11111=关闭
  
  ADCLK=0x40;
  //ADCLK_ADIV[2..0]=0/时钟选择位/分频比÷1
  //ADCLK_ADICLK=0;//晶振
  //ADCLK_MODE[1..0]=0/8位截止
  //R.R
}

//AD转换及读取有效值
void ad_oper(void)
{
  if(adc_dyoryg)
  {        //电压AD转换
  	if(adc_dy_flag)
  	{
  	  if(ADSCR_COCO)
  	  {		 //AD完成位
  	    ad_dy_counter++;
  	    ad_tran_temp=ADRL;
  	    //添加AD转换量到电压值的关系式
  	    ad_dy_value+=ad_tran_temp;
  	    if(ad_dy_counter>=8)
  	    {
  	      ad_dy_counter=0;
  	      ad_dy_arr[ad_dy_counter1]=(unsigned char)(ad_dy_value>>3);
  	        ad_dy_counter1++;
  	        if(ad_dy_counter1>=1)
  	        {
  	          ad_dy_counter1=0;
  	          ad_dy_value=ad_dy_arr[0]/*+ad_dy_arr[1]+ad_dy_arr[2]+ad_dy_arr[3]*/;
  	          //ad_dy_value>>=1;
  	          //下面电压关系运算
  	          if(ad_dy_value<=0x72)
  	          {
  	            CAN_YB6.Byte=18;
  	          }
  	          else
  	          {
  	            ad_dy_value=(ad_dy_value+14)/7;
  	            if(ad_dy_value>33) ad_dy_value=33;
  	            CAN_YB6.Byte=(unsigned char)ad_dy_value;
  	          }
  	          /////
  	        }
  	      ad_dy_value=0;
  	      //关系式
  	      adc_dy_flag=0;
  	      adc_dyoryg=0;
  	      ADSCR=0x1f;//ADC power off
  	    }
  	    //加到CAN_YB6
  	  }
  	  else
  	  {
  	    adc_dy_flag=0;
  	  }
  	}
  	else
  	{
  	ADSCR=0x22;				  //AD2连续转换
  	adc_dy_flag=1;
  	}		   	  
  }
  else
  {								 	//雨刮AD转换
    if(adc_yg_flag)
    {
  	  if(ADSCR_COCO)
  	  {   //AD完成位
  	    ad_yg_counter++;
  	    ad_tran_temp=ADRL;
  	    //添加AD转换量到雨刮时间的关系式
  	    ad_yg_timer+=ad_tran_temp;
  	    if(ad_yg_counter>=8)
  	    {
  	      ad_yg_counter=0;
  	      ad_yg_timer=ad_yg_timer>>3;
  	      if(ad_yg_timer>=0xe8)
  	      {//0xe8
  	        CAN_YB7.Byte=120;
  	      }
  	      else if(ad_yg_timer>=0xe0)
  	      {
  	        ad_yg_timer-=0xe0;
  	        ad_yg_timer*=4;
  	        CAN_YB7.Byte=(unsigned char)(ad_yg_timer+90);
  	      }
  	      else if(ad_yg_timer>=0xd1)
  	      {
  	        ad_yg_timer-=0xd1;
  	        ad_yg_timer*=2;
  	     		CAN_YB7.Byte=(unsigned char)(ad_yg_timer+60);
  	      }
  	      else if(ad_yg_timer>=0xa8)
  	      {
  	        ad_yg_timer-=0xa8;
  	        ad_yg_timer*=3;
  	        ad_yg_timer>>=2;
  	     		CAN_YB7.Byte=(unsigned char)(ad_yg_timer+30);  	        
  	      }
  	      else if(ad_yg_timer>=0x12)
  	      {
  	        ad_yg_timer-=0x7;
  	        ad_yg_timer*=3;
  	        ad_yg_timer>>=4;
  	     		CAN_YB7.Byte=(unsigned char)ad_yg_timer; 
  	      }
  	      else
  	      {
  	        CAN_YB7.Byte=2;
  	      }  	      
  	      //CAN_YB7.Byte=(unsigned char)(ad_yg_timer>>3);			 //0.5s及*2
  	      ad_yg_timer=0;
  	      //关系式
  	      adc_yg_flag=0;
  	      adc_dyoryg=1;
  	      ADSCR=0x1f;
  	    }
  	    //加到CAN_YB7
  	  }
  	  else
  	  {
  	    adc_yg_flag=0;
  	  }
  	}
  	else
  	{
      	ADSCR=0x23;          //AD3连续转换
      	adc_yg_flag=1;
  	}		   									
  }
}
///////////////////////////////////////////
///////////////////////////////////////////

⌨️ 快捷键说明

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