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

📄 ad.h

📁 客车车身控制模块 分为仪表部分 前控左 前控右 尾控和中控程序模块
💻 H
字号:
//******************************************************************************
//函数:   void ad_init(void);
//描述:   初始化AD转换器作为单一转换 
//参数:    none
//返回值: none
//*******************************************************************************

void Init_AD(void)
 {
  	ADSCR=0x1f;	
  				//ADCH0=1
  				//ADCH1=1
  				//ADCH2=1
  				//ADCH3=1
  				//ADCH4=1  此时AD电源关闭,AD通道选择   
  				//ADCO=0   单次转换
  				//AIEN=0   禁止中断	
  				//COCO=0   1转换结束,0忙			
    ADCLK=0x10;
       			//0~1为NC
    			//MODE0=0
    			//MODE1=0     转换结果为无符号8位
    			//ADICLK=1    0晶振、1总线
    			//ADIV0=1
    			//ADIV1=1
    			//ADIV2=0     //27.669ms   
 }
  
//*******************************************************************************
//函数:    unsigned char ad_single(unsigned char ch);
//参数:     unsigned char ch---选择A/D 通道;
//返回值:  A/D 转换值
//说明:	channel为AD通道取值0-7
//*******************************************************************************

unsigned char ad_single(unsigned char channel)
{
	unsigned char   i     	=	0;
	unsigned int  	ad_sum	=	0;
	unsigned char 	ad_max	=	0;
	unsigned char	ad_min	=	0xff;
	unsigned char 	ad_temp =	0;
	unsigned char 	ad[8];
	ADSCR=0X20+channel;						//写ADSCR启动连续AD转换
	while(i<8)								//8次采样
    {
    	if(ADSCR_COCO==1)					
    	{
        	ad[i]  = ADRL;					//取AD寄存器,8位AD量
        	i++;
      	}
    }
    ADSCR=0X1F;								//写ADSCR关闭AD转换
	for(i=0;i<8;i++)
	{
		if(ad[i]>ad_max)	ad_max=ad[i];	//取得最大值
		if(ad[i]<ad_min)	ad_min=ad[i];	//取得最小值
		ad_sum+=ad[i];						//求和
	}
  	ad_sum=ad_sum-ad_max;					//去掉最大值
  	ad_sum=ad_sum-ad_min;					//去掉最小值
  	ad_temp=ad_sum%6;						//求余数
  	ad_sum=ad_sum/6;						//求平均
	if(ad_temp>3)							//判断余数,4舍5入
	{
    	ad_sum++;
	}
	ad_temp=ad_sum%0x100;					//确定最后结果
	return ad_temp;							//返回结果
}

⌨️ 快捷键说明

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