基于51单片机和ADC0809数模转换的C程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档