基于51单片机和ADC0809数模转换的C程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#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[]="12345678";
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;
tab1[4*channel+3]=(temp%100)%10+0x30;
}
if(channel>=4)
{
channel=channel-4;
tab2[4*channel]=temp/100+0x30;
tab2[4*channel+2]=(temp%100)/10+0x30;
tab2[4*channel+3]=(temp%100)%10+0x30;
}
}
void keyscan()/* 按键2进行减1*/
{
uint k;
if(key1==0)
{
m--;
if(m<5)
{
write_com(0x80+0x07);