PIC单片机-AD转换

发布者:collectors最新更新时间:2018-08-12 来源: eefocus关键字:PIC单片机  AD转换 手机看文章 扫描二维码
随时随地手机看文章

编写程序,使用数码管显示ADC测量得到的电压值。电压值由1位整数和1位小数构成。例如若当前AN0通道上的电压为6V,则数码管应显示3.6。

#include

#include

 

#define uint8 unsigned char

#define uint16 unsigned int

 

__CONFIG(FOSC_HS &WDTE_OFF &BOREN_OFF &PWRTE_OFF &LVP_OFF); //设置配置位

//WDTE_OFF:disable watchdog timer       看门狗禁止

//LVP_OFF:low voltage programming disabled  低电压编程禁止

//FOSC_HS:high speed crystal/resonator  4M以上晶振选择HS高速

//PWRTDIS:disable power up timer

//BOREN_OFF:disable brown out reset

/***************************定义全局变量***************************************/

 

uint8 disp[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //共阳数码管段码表

uint16 AD_Result;   //ADC转换结果变量

uint16 count;

long AD_Result_temp;

 

/***************************声明函数*******************************************/

 

void ADC_Init(void);

void Time2_Init(void);

void DelayUS(uint8 delay);

void LED_Display(uint8 chosebit, uint8 wdata);

 

/*******************************************************************************

* 函 数 名: DelayUS(uint8 delay)

* 函数功能: 微秒延时   for 20MHZ

* 入口参数: delay

* 返    回: 无

*******************************************************************************/

 

void DelayUS(uint8 delay)

{

    while(--delay);

}

 

/******************************************************************************

* 函 数 名: ADC_Init(void)

* 函数功能: ADC初始化

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

void ADC_Init(void)

{

    TRISA0 = 1;     //模拟通道0设置为输入

    ADCON1 = 0x8E;  //10001110  Vref+ = VDD Vref- = VSS

    ADCON0 = 0x01;  //选择通道0,使能AD

    ADIF = 0;       //中断标志清零

    ADIE = 1;       //ADC中断使能

}

 

/*******************************************************************************

* 函 数 名: Time2_Init(void)

* 函数功能: 定时器2初始化

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

 

void Time2_Init(void)

{

    T2CON = 0x01;   //postscale 1:1 prescale 1:4

    PR2 = 250;      //匹配寄存器   1*4*250*200ns = 200us

    TMR2IF = 0;         //定时器2中断标志位清零

    GIE = 1;            //开总中断

    PEIE = 1;           //开外设中断

    TMR2IE = 1;         //开定时器中断

}

 

/*******************************************************************************

* 函 数 名: LED_Display(uint8 chosebit,uint8 wdata)

* 函数功能: 单个数码管显示

* 入口参数: chosebit选择字位,wdata字型

* 返    回: 无

*******************************************************************************/

 

void LED_Display(uint8 chosebit, uint8 wdata)

{

    if((chosebit < 0) || (chosebit > 4))

        return;

    ADCON1 = 0x8E;  //10001110  RA0位模拟输入

    TRISA &= 0x01;

    TRISE &= 0xEF;      //配置PORTD为普通IO口,对PORTD的操作务必加上这句

    TRISD = 0x00;       //数据线配置为输出

    PORTA = (PORTA & 0xE3) | ((chosebit + 3) << 2); //RA2:RA3:RA4:011 选通第一位 100选通第二位 101选通第三位 110选通第四位

    PORTD = wdata;  //送显示数字的断码

    DelayUS(100);       //延时

    PORTD = 0xFF;       //关闭显示

}

 

/******************************************************************************

* 函 数 名: mian(void)

* 函数功能: 对模拟通道0进行采样,并显示,再采样,再显示

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

 

void main(void)

{

    long temp;

    ADC_Init();     //ADC初始化

    Time2_Init();   //定时器2初始化

    GIE = 1;        //总中断使能

    PEIE = 1;       //外设中断设能

    GO = 1;         //启动ADC转换

    TMR2ON = 1;     //启动定时器2计时

    while(1)

    {

        temp = AD_Result_temp;

        temp /= 10;

        LED_Display(2, disp[temp % 10]);    //显示十分位

        temp /= 10;

        LED_Display(1, disp[temp % 10] & 0x7F); //显示个位

    }

}

 

/******************************************************************************

* 函 数 名: interrupt PIC_Init(void)

* 函数功能: 中断函数

* 入口参数: 无

* 返    回: 无

*******************************************************************************/

 

void interrupt PIC_Init(void)

{

    if(ADIF == 1)

    {

        ADIE = 0;   //关AD中断

        ADIF = 0;                       //AD中断标志清零

        AD_Result = ADRESL & 0x00FF;    //读取ADC采样结果

        AD_Result |= ADRESH << 8 ;

        AD_Result_temp = AD_Result * 50;    //5V为VDD电压,根据不同的电压作修改

        AD_Result_temp = AD_Result_temp * 10 / 1023;    //再放大10倍,方便计算显示

        ADIE = 1;   //开启AD中断

    }

 

    if(TMR2IF == 1)

    {

        TMR2IE = 0;     //关定时器0中断

        TMR2IF = 0;     //清标志位

        count++;        //计数值加1

        if(count >= 500)    //200us*500 = 100ms,即0.1s启动采样一次

        {

            count = 0;

            GO = 1;     //启动ADC转换

        }

        TMR2 = 0x00;

        TMR2IE = 1;     //开中断

    }

}



关键字:PIC单片机  AD转换 引用地址:PIC单片机-AD转换

上一篇:PIC中断不同型号的不同写法
下一篇:PIC单片机芯片引脚常用符号的功能说明

推荐阅读最新更新时间:2024-03-16 16:10

CS5532 AD转换器部分电路图
在系统的应用过程是在8路差分 模拟 量输人选择通道中,信号首先经有源低通滤波器,以消除高次谐波和大部分高频噪声干扰信号;再由两片MAX4581选择其中的一路差分信号进人CS55犯进行数模转换。其在系统中的部分电路如图2所示。 其 中外接4.9152MHz的晶振,参考电压 V二F+由和提供稳定的sv电压,差分模 拟量输人来自两片MAX4581的Y。、Y,。CS片选是允 许访问串行口的 控制 线,低电平有效,接 单片机 的 PI.3。SDI为串行数据输人端;SDo为串行数据输出 端,分别接几;,耳6。SCLK串行时钟是数据输人输 的控制时钟,接单片机的P14。
[模拟电子]
PIC单片机CCP模块
CCP是Capture(捕捉)、Compare(比较)、PWM(脉宽调制)缩写。
[单片机]
<font color='red'>PIC单片机</font>CCP模块
PIC单片机指令集简介
PIC 8位单片机共有三个级别,有相对应的指令集。基本级PIC系列芯片共有指令33条,每条指令是12位字长;中级PIC系列芯片共有指令35条,每条指令是14位字长;高级PIC系列芯片共有指令58条,每条指令是16位字长。其指令向下兼容。 一、PIC汇编语言指令格式 PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下: 标号 操作码助记符 操作数1,操作数2;注释 指令格式说明如下:指令的4个部分之间由空格作隔离符,空格可以是1格或多格,以保证交叉汇编时,PC机能识别指令。 1标号 与MCS-51系列单片机功能相同,标号代表指令的符号地址。在程序汇编时,已赋
[单片机]
HC-SR04超声波模块51+PIC单片机例程
单片机源程序如下: //晶振=8M //MCU=STC10F04XE //P0.0-P0.6共阳数码管引脚 //Trig = P1^0 //Echo = P3^2 #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long //*********************************************** sfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频 //为STC单
[单片机]
TLC2543单片机程序 带Proteus仿真 电路原理图 AD转换实验
单片机与TLC2543接口实现ad转换,并且用数码管显示的仿真原理图如下(proteus仿真工程文件可到本帖附件下载) TLC2543与单片机连接的电路图: TLC2543是11通道12位串行A/D转换器.TLC2543中文资料详见: http://www.51hei.com/chip/4009.html TLC2543单片机驱动源代码: #include reg51.h sbit SDO=P3^0; //定义端口 sbit SDI=P3^1; sbit CS=P3^2; sbit CLK=P3^3; sbit EOC=P3^4; sbit P2_0=P2^0; sbit
[单片机]
TLC2543单片机程序 带Proteus仿真 电路原理图 <font color='red'>AD转换</font>实验
PIC单片机利用视觉暂留现象显示字符
Persistance of Vision (PoV), 即视觉暂留现象, 人眼在观察景物时,光信号传人大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称 后像 ,视觉的这一现象则被称为 视觉暂留 。其具体应用是电影的拍摄和放映。原因是由视神经的反应速度造成的.其时值是二十四分之一秒。是动画、电影等视觉媒体形成和传播的根据。 利用PoV,还可以制作电子小玩意,比如利用几个LED,就能显示图案,字符等。 下面是一个利用PoV显示时钟的例子: 下面是一段利用PoV显示字符的PIC单片机程序,利用CCS C编译器编译: 主程序文件: pov.c #fuses HS,NO
[单片机]
<font color='red'>PIC单片机</font>利用视觉暂留现象显示字符
PIC单片机访问铁电存储器的程序模块
//此子程序用于PIC系列单片机和铁电存储器FM24C04交换数据 #define bitset(var,bitno) ((var)|=(1 (bitno))) #define bitclr(var,bitno) ((var)&=((1 bitno)^0xff)) //定义铁电的写地址和读地址 //用高256字节,则为A2 A3 //用低256字节,则为A0 A1 #define WriteDeviceAdd 0xa2 //用高256字节 #define ReadDeviceAdd 0xa3 //用高256字节 #define SDA RC3 #define SCL RC2 /**********************
[单片机]
PIC单片机与51系列单片机的区别
PIC单片机的型号繁多,对初学者来说实在不好应付,容易混淆,以下作一简单分类,希望有助于初学者学习: 初档8位单片机:PIC12C5XXX/16C5X系列 PIC16C5X系列是最早在市场上得到发展的系列,因其价格较低,且有较完善的开发手段,因此在国内应用最为广泛;而PIC12C5XX是世界第一个八脚低价位单片机可用于简单的智能控制等一些对单片机体积要求较高的地方,前景十分广阔。 中档8位单片机:PIC12C6XX/PIC16CXXX系列 PIC中档产品是Microchip近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到200ns,带A/D,内部E2PROM数据存储器,双时钟
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved