|
#include"STC12C5410AD.H" //STC12C54系列單片機頭文件
#define uchar unsigned char
#define uint unsigned int
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}
void AD_Init()
{
P1M0=0x0f;//0000 1111 設(shè)置P1口低4位為開漏模式,用來AD采集
P1M1=0x0f;//0000 1111
ADC_CONTR=0xe0;//1110 0000 開啟AD轉(zhuǎn)換器電源,設(shè)置最高轉(zhuǎn)換速度
delayms(100);
}
int GetAD(unsigned char channel) //channel為要取的通道號(0~7)
{
unsigned char AD_finished=0;
int result;
ADC_CONTR|=channel; //選擇AD通道號
ADC_CONTR|=0x08; //啟動AD轉(zhuǎn)換
while(AD_finished==0) //等待AD轉(zhuǎn)換結(jié)束
{
AD_finished=(ADC_CONTR&0x10);//查詢ADC_FLAG位是否置1
}
result=ADC_DATA*4+ADC_LOW2;//讀走AD轉(zhuǎn)換結(jié)果,由于ADC_DATA中存儲12位中的
//高8位,當(dāng)要轉(zhuǎn)換成10進制時,需將ADC_DATA中的數(shù)左移2位,即相當(dāng)于*4
ADC_CONTR&=0xf7; //清除轉(zhuǎn)換結(jié)束標(biāo)志
return (result); //返回結(jié)果給函數(shù)
}
float Ad_Av(uchar channel) //求100次采集電壓的平均值
{
float Val_Av=0;
uchar num;
for(num=100;num>0;num--)
{
Val_Av+=GetAD(channel);//100次采集求和
}
Val_Av/=100.0; //求平均值
Val_Av=Val_Av*5.0/1024; //單片機電源為5V,求的真實電壓值
return (Val_Av); //返回給函數(shù)
}
void main()
{
float ad1,ad2,ad3,ad4;
AD_Init();
ad1=Ad_Av(1);
ad2=Ad_Av(2);
ad3=Ad_Av(3);
ad4=Ad_Av(4);
while(1);
}
|
|