LPC1788的ADC和DAC使用

#ifndef __ADC1_H_

#define __ADC1_H_

 

#include "common.h"

#include "delay.h"

 

void adc_init(u8 ch,u8 div);

 

u16 adc_cover(u8 ch);

 

 

 

 

#endif

 

 

 

 

 

 

#include "adc1.h"

 

 

 

void adc_init(u8 ch,u8 div)//最大时钟不得大于12.4M

{

    //打开ADC和IO口时钟

    LPC_SC->PCONP |= (1<<15)|(1<<12);

    switch(ch)

    {

    case 0:

        LPC_IOCON->P0_23 = 0x00;

        LPC_IOCON->P0_23 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 1:

        LPC_IOCON->P0_24 = 0x00;

        LPC_IOCON->P0_24 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 2:

        LPC_IOCON->P0_25 = 0x00;

        LPC_IOCON->P0_25 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 3:

        LPC_IOCON->P0_26 = 0x00;

        LPC_IOCON->P0_26 |= (1<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 4:

        LPC_IOCON->P0_30 = 0x00;

        LPC_IOCON->P0_30 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 5:

        LPC_IOCON->P0_31 = 0x00;

        LPC_IOCON->P0_31 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 6:

        LPC_IOCON->P0_12 = 0x00;

        LPC_IOCON->P0_12 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    case 7:

        LPC_IOCON->P0_13 = 0x00;

        LPC_IOCON->P0_13 |= (3<<0)|(1<<8)|(1<<10);//无过滤 模拟adc 开漏

        break;

    }

    LPC_ADC->CR = 0X00;

    LPC_ADC->CR |= (1<<ch)|(div<<8)|(1<<21);//正常工作 非规则转换 并选中响应通道

    LPC_ADC->INTEN = 0x00;//禁用全部中断

   

}

 

u16 adc_cover(u8 ch)

{

    u16 temp;

    LPC_ADC->CR &= ~(0x000000ff);

    LPC_ADC->CR |= (1<<ch);

    LPC_ADC->CR |= 1<<24;//启动转换

    while(!(LPC_ADC->GDR &(1u<<31)));//等待转换结束

    temp = (u16)((LPC_ADC->GDR & 0x00000fff0)>>4);

    return temp;

}

 

 

 

 

 

 

#ifndef __ADC_H_

#define __ADC_H_

 

#include "common.h"

 

#define DAC_IO_CON  LPC_IOCON->P0_26

 

void dac_init(void);

 

void dac_set_value(u16 value);

 

#endif

 

 

 

 

#include "dac.h"

 

 

void dac_init(void)

{

    //io口初始化

    DAC_IO_CON = 0x00;

    DAC_IO_CON |= (2<<0)|(1<<16)/*|(1<<10)*/;//使能DAC

   

    LPC_DAC->CTRL = 0x00;//双缓冲禁止,超时禁止 DMA禁止

    LPC_DAC->CR = 1<<16;

//  LPC_DAC->CNTVAL = 100;

}

 

 

void dac_set_value(u16 value)

{

    if(value > 1024)

    {

        return;

    }

    else

    {

        LPC_DAC->CR = (u16)((1<<16)|(value<<6));       

    }

}

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/dengxiaojun/p/4338703.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值