//程序頭函數
#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(); //顯示數值
}
}