慕司板的摇杆和锂电池电压的检测都是通过AD实现的。IAP15有8路10位的AD,速度可达300k 次/s。板子上使用了5路:
ADC的初始化和读取函数比较简单(adc.c):
#include "adc.h"
#include "delay.h"
#include <intrins.h>
/*----------------------------
初始化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