例程5. ADC -- 慕司板IAP15

慕司板的摇杆和锂电池电压的检测都是通过AD实现的。IAP15有8路10位的AD,速度可达300k 次/s。板子上使用了5路:
例程5. ADC -- 慕司板IAP15_第1张图片

ADC的初始化和读取函数比较简单(adc.c):

#include "adc.h"
#include "delay.h"
#include 

/*----------------------------
初始化ADC
----------------------------*/
void ADC_Init()
{
    P1ASF = 0x1f;                   //设置P1.0 1 2 3 4口为AD口
    ADC_RES = 0;                    //清除结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDH;
    Delay_ms(2);                     //ADC上电延时
}

/*----------------------------
读取ADC结果
----------------------------*/
unsigned char ADC_GetResult(unsigned char ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //等待4个NOP
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC

    return ADC_RES;                 //返回ADC结果
}

其中,ADC转换速率的宏定义在ADC.h中:

#define ADC_SPEEDLL 0x00            //540个时钟
#define ADC_SPEEDL  0x20            //360个时钟
#define ADC_SPEEDH  0x40            //180个时钟
#define ADC_SPEEDHH 0x60            //90个时钟

注意把P19的跳线帽放到下面,即开启LCD背光。

完整工程参见资源汇总帖.

原作于 2014年10月
CSDN发表于2016年4月
weifengdq

你可能感兴趣的:(ADC,慕司板,IAP15)