网站标志
导航菜单
当前日期时间
当前时间:
购物车
购物车中有 0 件商品 去结算 我的订单
商品搜索
商品搜索:
文章正文
PIC单片机内部A/D转换
作者:管理员    发布于:2015-07-26 16:55:45    文字:【】【】【
 //需求,将板子上电位器接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--);
 }
浏览 (65) | 评论 (0) | 评分(0) | 支持(0) | 反对(0) | 发布人:管理员
将本文加入收藏夹
新闻详情
脚注栏目
|
脚注信息
机电工程网(C) 2015-2020 All Rights Reserved.    联系我们