单片机ADC实验报告
ADC实验报告
实验任务
利用单片机STC89C52与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。
现有元件
模数转换器ADC0804,STC89C52单片机,两个共阳极数码管。
硬件设计
模数转换器ADC0809与单片机STC89C52的连接
ADC0809规格及引脚分配图如下图3-1所示:
STC89C52各个引脚分布如下图3-2所示:
图3-1 ADC0809引脚图 图3-2 STC89C52引脚图
(3) 硬件连线
(a) 把“单片机系统”区域中的P3.0与”模数转换模块ADC0809“区域中的ST端子用导线相连接。
(b) 把“单片机系统”区域中的P3.1与”模数转换模块ADC0809“区域中的ALE端子用导线相连接。
(c) 把“单片机系统”区域中的P3.2与”模数转换模块ADC0809“区域中的OE端子用导线相连接。
(d) 把“单片机系统”区域中的P3.6与”模数转换模块ADC0809“区域中的EOC端子用导线相连接。
(e) 把“单片机系统”区域中的P3.7与”模数转换模块ADC0809“区域中的CLK端子用导线相连接。
(f) 把“模数转换模块ADC0809”区域中的ADDA、ADDB、ADDC端子用导线连接到单片机的VCC端子上。把“模数转换模块ADC0809”区域中IN7与外接输入电压相连。
(g) 把“单片机系统”区域中的P2.0-P2.7连接到“模数转换模块ADC0809”区域中D0D1D2D3D4D5D6D7端子上。
(h) 把“单片机系统”区域中的P1.0-P1.7连接到“数码管”区域中ABCDEFG端子上。把“单片机系统”区域中的P0.0-P0.1连接到“数码管”区域中12端口。
4. 电路原理图
图4 电路原理图
5、程序设计流程图
Y
N
6. C语言源程序
#include
sbit ALE = P3^1;
sbit ST = P3^0;
sbit EOC = P3^2;
sbit OE = P3^6;
sbit CLK = P3^7;
sbit wexuan1=P0^0;
sbit wexuan2=P0^1;
//sbit IN1 = P0^5;
//sbit IN2 = P0^6;
//sbit IN3 = P0^7;
unsigned int code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//段码表
unsigned int n=0,flag1=1;flag=1,ad_data,num1=0,num2=0;
void delay(xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void display()//2位数码管显示
{
float a;
a=(float)ad_data/256*5*1000;
num1=(int)a/1000;
num2=(int)a/100-num1*10;
P1=table[num1];
wexuan1=0;
delay(1);
wexuan1=1;
P1=0x00;
P1=0x80; //小数点
wexuan1=0;
delay(1);
wexuan1=1;
P1=0x00;
P1=table[num2];
wexuan2=0;
delay(1);
wexuan2=1;
P1=0x00;
}
void init()
{
ST = 0;
ALE = 0;
OE = 0;
CLK = 0;
//_EOC= 1;
TMOD=0x12;IP=0x09;
TH0=(65536-22)/256;
TL0=(65536-22)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
EA=1;
ET0=1;ET1=1;
TR0=1;TR1=1;
EX0=1;//打开外部中断
IT0=1;//从高到低的负跳变有效
P0=0x00;
}
void start() //int a,int b,int c) //选择通道
{
//IN1 = a;IN2 = b;IN3 = c;
ALE = 0;ALE = 1;
ST = 0;ST = 1;
ALE = 0;ST = 0;
display();
delay(10);
}
int read()
{
unsigned int dat;
P2