AD转换 PIC 单片机之AD转换( 二 )


//开发环境MPLAB X IDE,单片机PIC16LF1823。
#include &lt。pic.h&gt。
_ _ CONFIG(FOSC _ INTOSC & amp;WDTE _ OFF & ampPWRTE _ ON & ampMCLRE _ OFF & ampCP _ ON & ampCPD _ OFF & amp博伦_开
& ampCLKOUTEN _ OFF & ampIESO _开& ampFCMEN _ ON);//这个应该放在前面一行
_ _ CONFIG(PLLEN _ OFF & amp;LVP _ OFF);
#定义ADC_NUM 8 //转换次数
#定义发光二极管LATA1
void init_GPIO(无效)
{
TRISA = 0x01//端口设置为输入
ANSELA = 0x01//设置为模拟输入
PORTA = 0x00
LATA = 0x00
}
void init_fosc(无效)
{
OSCCON = 0xF0//32MHZ
}
无效init_AD(无效)
{
ADCON1 = 0xA0//右对齐,AD时钟为Fosc/32,参考电压为电源电压,
ADCON0 = 0x00//选择频道AN0
ADCON0bits。ADON = 1;//打开模块
}
无符号int ADC_BAT_ONE(void)//转换一次
{
无符号int值;
value = https://www.qqbk.com/html/0;
ADCON0bits。CHS = 0;//选择频道AN0
ADCON0bits。ADGO = 1;//开始转换
while(ADcon 0 bit。GO = = 1);//等待转换结束
value=https://www.qqbk.com/html/(无符号整数)ADRESH//强制类型转换,因为ADRESH是字符类型,只能表示8位二进制。所以必须转换成可以容纳10位二进制的整数。
value= https://www.qqbk.com/html/value<。& lt8;//将上面两位向左移动8位
value+= ADRESL;//将ADRESL的值加到低8位。
返回值;
}
无符号整数ADC_BAT_contiue(void)
{
无符号int ADV_MCU[ADC_NUM],ADV_CNT,ADV _ ALL;
ADV _ ALL = 0;
for(ADV _ CNT = 0;ADV _ CNT & lt;ADC _ NUMADV _ cnt++//进行几次AD转换
{
ADV _ MCU[ADV _ CNT]= ADC _ BAT _ ONE();
}
for(ADV _ CNT = 0;ADV _ CNT & lt;ADC _ NUMADV_CNT++)//计算多个AD转换的平均值
{
ADV _ ALL+= ADV _ MCU[ADV _ CNT];
}
ADV _ ALL = ADV _ ALL/ADC _ NUM;
返回ADV _所有;//获取结果并返回
}
/*
*
*/
int main(int argc,char** argv) {
init _ fosc();//设置时钟
init _ GPIO();//设置输入输出端口
init _ AD();//设置AD
while(1)
{
if(ADC _ BAT _ contue()>;400)//判断输入电压是否大于1.2V
{
LED = 1;//灯亮着
}
其他
{
LED = 0;//灯灭了
}
}
}
【AD转换 PIC 单片机之AD转换】原始链接:

推荐阅读