📄 ad.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 + -