实验六 AD转换程序设计
一、实验目的:
1.掌握转换器ADC0809的使用。
2.用PROTEUS 设计,仿真基于AT89C51单片机的A/D转换实验。
3.通过改变电位器的值改变模拟量的输入,经转换为数字量在LED上显示,比对模拟量和数字量的关系。
二、PROTEUS电路设计:
三、实验仪器和设备
PC机、PROTEUS软件或W-A-51综合开发学习板
源程序设计:
程序
#include<reg51.h>
sbit STA=P2^5;
sbit EOC=P2^6;
sbit OE=P2^7;
sbit CLK=P2^4;
sbit led4=P2^3;
sbit led3=P2^2;
sbit led2=P2^1;
sbit led1=P2^0;
sbit point=P0^7;
int ad_result;
float result;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int time)
{
unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void ad_init()
{
OE=1;
STA=0;
CLK=0;
}
void time_init()
{
TMOD=0X02;
TH0=0X94;
TL0=0;
EA=1;
ET0=1;
TR0=1;
}
void T0_time()interrupt 1
{
CLK=!CLK;
}
void ad_start()
{
ad_init();
delay(10);
STA=1;
delay(10);
STA=0;
}
void disp( int a)
{
led1=0;
P0=table[a/1000];
point=1;
delay(2);
led1=1;
led2=0;
P0=table[a%1000/100];
delay(2);
led2=1;
led3=0;
P0=table[(a%100)/10];
delay(2);
led3=1;
led4=0;
P0=table[a%10];
delay(2);
led4=1;
}
void main(void)
{
ad_init();
time_init();
while(1)
{
ad_start();
while(EOC==0);
result=(P1*(5.0/255.0))*1000;
ad_result=(int)(result+0.5);
disp(ad_result);
}
}