📄 main.c
字号:
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/****************************************************************
*函数功能 :初始化ADC *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :参考电压AVDD,转换对象是1/3AVDD *
****************************************************************/
void InitialADwater(void)
{
//P1 out
//P1DIR = 0x03; //P1控制LED
//led1 = 1;
//led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCFG=0X02;
ADCCON3=0xb1; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void measurewater(void)
{
char temp[2];
InitialADwater(); //初始化ADC
//led1 = 1;
Delay(30000);
if(ADCCON1>=0x80)
{
//led1 = 0; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//ADCCON1 |= 0x40; //开始下一转换
//ADCCFG=0X02;
//ADCCON3=0xb1;
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
data[10]=temp[0];
data[11]=temp[1];
//num = ((float)(temp[0]*256+temp[1]))*3.3/8192; //有一位符号位,取2^13;
//num -= 0.2;
}
}
////////////处理数据部分/////////////////
/****************************************************
5、 CO2函数
****************************************************/
void InitialADco2(void)
{
//P1 out
//P1DIR = 0x03; //P1控制LED
//led1 = 1;
//led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
//P0=0X01;
ADCCFG=0X01;
ADCCON3=0xb0; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void measureco2(void)
{
char temp[2];
//P0INP=0X01;
InitialADco2(); //初始化ADC
//led1 = 1;
Delay(30000);
if(ADCCON1>=0x80)
{
//led1 = 0; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//ADCCON1 |= 0x40; //开始下一转换
//ADCCFG=0X02;
//ADCCON3=0xb1;
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
data[8]=temp[0];
data[9]=temp[1];
//num = ((float)(temp[0]*256+temp[1]))*3.3/8192; //有一位符号位,取2^13;
//num -= 0.2;
}
}
/****************************************************
6、 氨气函数
****************************************************/
void InitialADNH3(void)
{
//P1 out
//P1DIR = 0x03; //P1控制LED
//led1 = 1;
//led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCFG=0X20;
ADCCON3=0xb5; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void measureNH3(void)
{
char temp[2];
InitialADNH3(); //初始化ADC
//led1 = 1;
Delay(30000);
if(ADCCON1>=0x80)
{
//led1 = 0; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//ADCCON1 |= 0x40; //开始下一转换
//ADCCFG=0X02;
//ADCCON3=0xb1;
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
data[14]=temp[0];
data[15]=temp[1];
//num = ((float)(temp[0]*256+temp[1]))*3.3/8192; //有一位符号位,取2^13;
//num -= 0.2;
}
}
/****************************************************
7、 电导函数
****************************************************/
void InitialADdiandao(void)
{
//P1 out
//P1DIR = 0x03; //P1控制LED
//led1 = 1;
//led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCFG=0X10;
ADCCON3=0xb4; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void measurediandao(void)
{
char temp[2];
InitialADdiandao(); //初始化ADC
//led1 = 1;
Delay(30000);
if(ADCCON1>=0x80)
{
//led1 = 0; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//ADCCON1 |= 0x40; //开始下一转换
//ADCCFG=0X02;
//ADCCON3=0xb1;
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
data[16]=temp[0];
data[17]=temp[1];
//num = ((float)(temp[0]*256+temp[1]))*3.3/8192; //有一位符号位,取2^13;
//num -= 0.2;
}
}
/****************************************************
8、 电量函数
****************************************************/
void InitialADelectric(void)
{
//P1 out
//P1DIR = 0x03; //P1控制LED
//led1 = 1;
//led2 = 1; //关LED
ADCH &= 0X00; //清EOC标志
ADCCFG=0X80;
ADCCON3=0xb7; //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
//14位分辨率
ADCCON1 = 0X30; //停止A/D
ADCCON1 |= 0X40; //启动A/D
}
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void measureelectric(void)
{
uint x;
char temp[2];
InitialADelectric(); //初始化ADC
//float num;
//led1 = 1;
Delay(30000);
if(ADCCON1>=0x80)
{
//led1 = 0; //转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//ADCCON1 |= 0x40; //开始下一转换
//ADCCFG=0X02;
//ADCCON3=0xb1;
temp[1] = temp[1]>>2;
temp[1] |= temp[0]<<6;
temp[0] = temp[0]>>2; //数据处理
temp[0] &= 0x3f;
x=temp[0]*256+temp[1];
//num = ((float)(temp[0]*256+temp[1]))*3.3/8192; //有一位符号位,取2^13;
//num -= 0.2;
if(x<10000&x>=4592)
data[18]=3;
else if (x>4344&x<4592)
data[18]=2;
else if (x<=4344&x>=4096)
data[18]=1;
else
data[18]=0;
}
}
void main()
{
data[0]=0x00;
data[1]=0x00;
measuretemphumi();
measurelight();
read_data();// 读取温度
measurewater();
measureco2();
measureNH3();
measurediandao();
measureelectric();
int i;
for(i=0;i<20;i++)
{
if(data[i]==0xFF)
{P1DIR=0x01;
P1_0=0;
Delay(30000);
P1_0=1;
Delay(30000);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -