AD转换 PIC 单片机之AD转换( 二 )
//开发环境MPLAB X IDE,单片机PIC16LF1823。
#include <。pic.h>。
_ _ 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转换】原始链接:
推荐阅读
- 上菜咯!年夜饭半成品“硬菜”集合,你pick哪一款?
- 《梦幻西游》手游:子女资质转换系统全服开启
- 粥、蒜、饭、面……万物皆可腊八?这些节日美食你pick哪一款
- Epic 部分玩家无法登录《永劫无间》,官方征集日志排查原因
- 今日小寒!此节气是一年中阴阳转换的时候,要格外注意防寒养生
- 【千问千寻大运河】宁津大柳面:5种卤子24种菜码 总有你的pick!
- 中国青梅之乡 优品寿乡 梅香四溢 为诏安青梅打call 赶快pick
- 有氧运动的6大好处,你pick哪一个?
- 宝宝便便后如何处理?“水洗派”vs“纸擦派”,你更pick哪一个
- 寻味浙江直播过半,快来PICK你心中的美食C位!