配置单片机的ADC时一定要将IO口配置成高阻输入模式,
以下是单片机引脚对应的ADC通道
文章来源:https://www.toymoban.com/news/detail-723568.html
文章来源地址https://www.toymoban.com/news/detail-723568.html
u16 temp_adc_value = 0;
/*
* 描述: 配置ADC引脚
* 参数: 无
* 返回: 无*/
void ADC_GPIO_Init(void)
{
//注意:配置ADC引脚必须配置为高阻态输入
P0M1 |= (GPIO_BIT5); P0M0 &= (~GPIO_BIT5);
}
/*
* 描述: ADC初始化
* 参数: 无
* 返回: 无*/
void ADC_Init(void)
{
ADC_GPIO_Init();
P_SW2 |= 0x80;
ADCTIM = 0x3f; //设置 ADC 内部时序,ADC采样时间建议设最大值
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //设置 ADC 时钟为系统时钟/2/16
ADC_CONTR = 0x80; //使能 ADC 模块
}
/*
* 描述: 查询法读一次ADC结果.
* 参数: channel:将要读取的通道,channel = 0~15
* 返回: 读取到对应通道的数据*/
u16 Get_ADC12bitResult(u8 channel)
{
u16 adc_res = 0;
//清除ADC数据缓存区
ADC_RES = 0;
ADC_RESL = 0;
//启动 AD 转换
ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;
_nop_();
_nop_();
_nop_();
_nop_();
//wait for ADC finish
while((ADC_CONTR & 0x20) == 0) ;
//清除ADC结束标志
ADC_CONTR &= ~0x20;
adc_res = ADC_RES;
adc_res = (adc_res<<8) | ADC_RESL;
return adc_res;
}
/*
* 描述: 获取电池电压ADC
* 参数: 无
* 返回值:0按下 1没按下*/
void Get_ADC_Value(void)
{
u8 maopao_i = 0,maopao_j = 0;
u16 adc_temp , adcarr_temp[5] = {0};
for(maopao_i = 0;maopao_i<5;maopao_i++)
{
adcarr_temp[maopao_i] = Get_ADC12bitResult(13);
}
for(maopao_i=0;maopao_i<4;maopao_i++)
{
for(maopao_j=0;maopao_j<4-maopao_i;maopao_j++)
{
if(adcarr_temp[maopao_j]> adcarr_temp[maopao_j+1])
{
adc_temp= adcarr_temp[maopao_j];
adcarr_temp[maopao_j]=adcarr_temp[maopao_j+1];
adcarr_temp[maopao_j+1]=adc_temp;
}
}
}
temp_adc_value = (adcarr_temp[1]+adcarr_temp[2]+adcarr_temp[3])/3;
}
到了这里,关于STC8H8K64U单片机-ADC采集数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!