/**********************************************************
程序描述:光照驱动文件
文件名:Illumination.c
**********************************************************/
#include <ioCC2530.h>
#define AO P0_6 //A0光照度模拟输出口
#define DO P0_5 //D0光照度数字输出口
//void Illumination_Init();
unsigned int Get_Illumination_Value();
void Get_Illumination_Str();
char illu_str[6]; //光照度字符串
/**************************************************************************
* 函数名称:Illumination_Init
* 功能描述:ADC初始化AIN6
***************************************************************************/
void Illumination_Init()
{
APCFG|=0x40; //AIN6模拟IO使用
P0SEL|= 0x40; //AIN6功能外设
ADCCON3=0xb6; //选择3.3V为参考电压,12位分辨率,AIN6输入
}
/**********************************************************
* 光照度采样值读取函数
**********************************************************/
unsigned int Get_Illumination_Value()
{
unsigned int value;
Illumination_Init(); //初始化
ADCCON1|=0x30; //选择ADC的启动模式为手动
ADCCON1|=0x40; //启动ADC转换
while(!(ADCCON1&0x80)); //等待ADC转换完成
value=((ADCH&0x7F)<<4)|(ADCL>>4);//ADH低7位,ADL高4位
//ADCCON1&=~0x40; //停止ADC转换
return value;
}
/**********************************************************
* 光照度字符串读取函数
**********************************************************/
void Get_Illumination_Str()
{
unsigned int avgTemp=0; //平均值
for(int i=0;i<4;i++)
{
//avgTemp+=Get_Illumination_Value()*3.3/2048;
avgTemp+=Get_Illumination_Value();
}
avgTemp=avgTemp>>2; //计算4次的采样平均值
avgTemp=(float)avgTemp*3300/(float)2048; //计算光照度
illu_str[0]=(unsigned char)(avgTemp/1000)+'0';//个位
illu_str[1]='.';//小数点
illu_str[2]=(unsigned char)(avgTemp/100%10)+'0'; //十分位
illu_str[3]=(unsigned char)(avgTemp/10%10)+'0'; //百分位
illu_str[4]='\0'; //字符串结束符
}