问下大家,我做这个自能水箱实验,中的ADC湿度转换,转换结果始终是乱的,(独立的湿度采集都没问题,但是加在主程序中,采集的数据就是乱的)这是什么原因呢?能指点下吗?谢谢了
程序已经上传
附件:自能水箱.rar
下面是部分主程序:
#include "stc8.h"
#include "lcd12864.h"
#include "adc.h"
#include "stdio.h"
unsigned char sta[10]={0,0,0,0,0,0,0,0,0,0};//第0、1位装水位百、十个位,第2,3位装湿度。
long int shidu=0;
void setport()
{
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x04; P1M0 = 0x00; //配置P1.2为高阻ADC输入
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
}
void main()
{
setport();//引脚初始化
LCDInit();//液晶初始化
adc_Init();//AD转换初始化
for(;;)
{
shidu=ADC_value();//湿度采集
sta[2]=shidu/100;
sta[3]=shidu%100;
DisplayNUMChar(4,4,sta[2]);
DisplayNUMChar(5,4,sta[3]);
DisplayListChar(6, 4, "mv");
}
}
ADC转换程序
ADC.C
#include "adc.h"
void adc_Init(void)
{
ADC_CONTR &= (0xF2);
P_SW2 |=0X80;
ADCTIM |=0X3F;
P_SW2 &=0X7F;
ADCCFG |=0X2F;
ADC_CONTR &=0XDF;
EADC=0;
ADC_CONTR|=0X82;
ADC_delay2ms();
ADC_delay2ms();
}
void ADC_start(void)
{
ADC_CONTR|=0X42;
}
unsigned int ADC_value()
{
float temp1,temp2,temp3;
long int temp4;
unsigned char ADC_H,ADC_L;
ADC_start();
ADC_delay2ms();
ADC_delay2ms();
while(!(ADC_CONTR & 0X20));
ADC_CONTR &=0XDF;
ADC_CONTR &=0XBF;
ADC_H=ADC_RES & 0X0F;
ADC_L=ADC_RESL;
temp1=(ADC_H<<8)+ADC_L;
temp2=temp1*5000;//参考电压为5V,转成mv
temp3=temp2/4096;
temp4=(unsigned int) temp3;//转换成整型
return temp4;
}
void ADC_delay2ms() //@11.0592MHz
{
unsigned char data i, j;
_nop_();
i = 4;
j = 146;
do
{
while (--j);
} while (--i);
}
ADC.H
#include "stc8.h"
#include <intrins.h>
void adc_Init();
void ADC_start();
void ADC_delay2ms();
unsigned int ADC_value();