PIC单片机内部A/D转换

来源:本站
导读:目前正在解读《PIC单片机内部A/D转换》的相关信息,《PIC单片机内部A/D转换》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC单片机内部A/D转换》的详细说明。
简介:本文主要介绍了关于PIC单片机内部A/D转换的问题,希望对你的学习有所帮助。

//需求,将板子上电位器接RA0,设置PIC的AD相关寄存器,显示电压

#include<pic.h>

__CONFIG(0x3831);//配置位18323831

#define uint unsigned int

#define uchar unsigned char

//共阴数码管(板子上用了达林顿管ULN2003,反向器)

const unsigned char table[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};

//加小数点的共阴数码管显示,非常不错

const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};

void init();//数码管,和AD相关寄存器设置

uint get_ad();//获取电压值,其中包括AD读取,及AD值转电压值的处理,返回值为uint型,精度保留小数点后3位

void delay_ms(int z);

void disp(uchar num1,uchar num2,uchar num3,uchar num4);//数码管动态扫描

void main()

{

uint lednum;//

uchar num1,num2,num3,num4;//高两位接RA1和RA0用不到了

init();

while(1)

{

lednum=get_ad();

num1=lednum/1000;//求模即取整

num2=lednum/100%10;

num3=lednum/10%10;

num4=lednum%10;

disp(num1,num2,num3,num4);

}

}

void init()//数码管,和AD相关寄存器设置

{

TRISA=0x01;//RA0设置为输入,用于AD模拟信号输入

TRISD=0;//接数码管段选IO设置为输出

PORTA=0;

PORTD=0;

ADCON0=0x41;//选择8分频(4M/8=0.5MHz)时钟频率即8倍时钟周期,开AD

ADCON1=0x8E;//选择结果右对齐,ADRESH高6位读作0,选择A通道以电源VDD VSS作参考电压

delay_ms(10);//延时等待AD稳定

}

//获取电位器电压,PIC内部AD

uint get_ad()//一般做工程的时候带个通道参数,读取几通道直接带通道数就可以

{

//实际中要进行数字滤波(如20个数取平均值,然后将其返回去,滤波算法有很多,平均值是一种而已)

uint adval;//存放AD的值

float advalf;//存放AD值转换为的电压值

ADGO=1;//开始转换,ADGO与GODONE宏定义一致

while(ADGO);//AD转换完,硬件自动清零ADGO

adval=ADRESH;//先读AD高8位寄存器的低二位

adval=adval<<8|ADRESL;

advalf=adval/1023.0*5.0;//1023为电位器显示的最大值,假设板子电压为5v时

adval=advalf*1000;//精度取小数点后三位,如4.2356,则读为4.235

return(adval);

}

void disp(uchar num1,uchar num2,uchar num3,uchar num4)//数码管动态显示

{

PORTD=table1[num1];

PORTA=0x20;//0010 0000

delay_ms(2);

PORTD=table[num2];

PORTA=0x10;//0001 0000

delay_ms(2);

PORTD=table[num3];

PORTA=0x08;//0000 1000

delay_ms(2);

PORTD=table[num4];

PORTA=0x04;//0000 0100

delay_ms(2);

}

void delay_ms(int z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

提醒:《PIC单片机内部A/D转换》最后刷新时间 2024-03-14 00:56:17,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC单片机内部A/D转换》该内容的真实性请自行鉴别。