基于51单片机和ADC0809数模转换的C程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
/********************定义LCD1602接口信息********************************/
sbit lcdrs=P3^0;//数据命令选择位
sbit lcden=P3^1;//使能位
sbit lcdrw=P3^2;
/********************定义ADC0808接口信息********************************/
sbit ADA=P2^0;
sbit ADB=P2^1;
sbit ADC=P2^2;
sbit EOC=P2^3;
sbit CLK=P2^4;
sbit START=P2^5;
sbit OE=P2^6;
/*****************键盘管脚定义*************/
sbit key1=P3^3;
sbit key2=P3^7;
/*********************定义数据********************************/
uchar tab1[]={48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48};
//存放AD采集数据
uchar tab2[]={48,46,48,48,48,46,48,48,48,46,48,48,48,46,48,48};
uchar tab3[]="TONGLU:";
uchar tab4[]="DIANYA:";
uchar tab5[]=;
uchar num,m=0,getdata=0;
uint temp=0;
/*延时函数*/
void delay(uchar t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
void delayl(uchar ltime)
{
uchar i;
for(i=ltime;i>0;i--)
delay(255);
}
/*写命令函数*/
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
/*写数据函数*/
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void disp(uchar h,l,uchar *p)
{
write_com(0x80+h*0x40+l);
while(*p!='\0')
{
write_data(*p);
p++;
}
}
/*初始化函数*/
void LcdInit()
{
lcdrw=0;
delay(5);
lcden=0;//使能位置低电平
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
delayl(20);
}
void TimeInit()
{
TMOD=0x10;//定时器1工作于方式1,16位不重装初值 TH1=(65536-200)/256; //定时200us(5KHz)
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
void AdTr(bit ADDA,ADDB,ADDC,uchar channel)
{
START=0;
OE=0;
START=1;
START=0;//A/D转换启动信号,正脉冲启动选中的模拟信号开始转换 ADA=ADDA;
ADB=ADDB;
ADC=ADDC;
delay(5);
while(EOC==0);//启动转换后EOC变为L,转换结束后变为H
OE=1;
getdata=P1;
temp=getdata*1.0/255*500;
OE=0;
if(channel<4)
{
tab1[4*channel]=temp/100+0x30;
tab1[4*channel+2]=(temp%100)/10+0x30;