⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 part3.4.6.c

📁 新概念51单片机C语言教程.入门、提高、开发
💻 C
字号:
#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 设置P1口低4位为开漏模式,用来AD采集
	P1M1=0x0f;//0000 1111
	ADC_CONTR=0xe0;//1110 0000 开启AD转换器电源,设置最高转换速度
	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转换
	while(AD_finished==0) //等待AD转换结束
	{
		AD_finished=(ADC_CONTR&0x10);//查询ADC_FLAG位是否置1
	}
	result=ADC_DATA*4+ADC_LOW2;//读走AD转换结果,由于ADC_DATA中存储12位中的
	//高8位,当要转换成10进制时,需将ADC_DATA中的数左移2位,即相当于*4
	ADC_CONTR&=0xf7;     //清除转换结束标志
	return (result);    //返回结果给函数
}
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);          //返回给函数
}
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);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -