//程序头函数
#include <reg52.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//ADC0809
sbit ST=P3^2;
sbit EOC=P3^3;
sbit OE=P3^1;
sbit DIAN = P0^5; //小数点
/*******************************定义全局变量********************************/
unsigned char dis[3]; //显示数值
unsigned int sum=0;
unsigned int temp=0;
unsigned int dat=0;
/*******************************共阴LED段码表*******************************/
unsigned char code tab[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0x5e/*字母U*/}; //gc.debfa
/****************************************************************************
函数功能:AD转换子程序
****************************************************************************/
//ADC0809读取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//转化初始化
ST=0;
//开始转换
ST=1;
ST=0;
//外部中断等待AD转换结束
while(EOC==0)
//读取转换的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
/****************************************************************************
函数功能:延时子程序
入口参数:
出口参数:
****************************************************************************/
void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
//=====================================================================================
//=====================================================================================
//=====================================================================================
/****************************************************************************
函数功能:将0-255级换算成0.00-5.00的电压数值
入口参数:i
出口参数:
****************************************************************************/
void convdata(unsigned char dat1)
{
unsigned int Vo;
Vo=dat1*1.96;
dis[0] = Vo/100; //十位
dis[1] = Vo%100/10; //个位
dis[2] = Vo%100%10; //小数点后第1位
}
/****************************************************************************
函数功能:数码管显示子程序
入口参数:
出口参数:
****************************************************************************/
void display(void)
{
P0=~tab[dis[0]];
P2=0xfe; //11011111
DIAN=0;
delay(1);
P2=0xff;
P0=~tab[dis[1]];
P2=0xfb; //10111111
delay(1);
P2=0xff;
P0=~tab[dis[2]];
P2=0xef; //01111111
delay(1);
P2=0xff;
P0=~tab[10];
P2=0xbf;
delay(1);
P2=0xff;
}
/****************************************************************************
函数功能:主程序
入口参数:
出口参数:
****************************************************************************/
void main(void)
{
unsigned char p=0;
while(1) //主循环
{
for(p=0;p<20;p++)
{
sum=sum+ADC0809();
display();
}
// dat=((sum/20)+dat)/2;
dat=sum/20;
convdata(dat); //数据转换
sum=0;
display(); //显示数值
}
}