一、ADC0804的操作
1、试验板上ADC0804的接线图
AD芯片上的第5管脚INTR没有接线,因为该实验板读取A/D数据没有用中断法,所以可以不接该引脚。
2、芯片的操作时序图如下
操作芯片时基本按照此顺序操作各个引脚。操作过程:在此实验中要连续转换连续读取数据,就将CS一直置低,没有用到中断也不用操作INTR引脚,剩下就只用操作WR和RD引脚,首先将WR置低,经过tW(WR)L时间后拉高WR,转换开始,经过1~8个A/D时钟周期1/fCLK和内部Tc时间后,转换完成;接着将RD置低,经过tACC时间后数字输出口上的数据达到稳定状态,此时直接读取数字输出端口数据,读完数据直接拉高RD。
3、用单片机控制ADC0804进行模数转换,当拧动实验板上A/D旁边的电位器Re2时,在数码管前三位以十进制方式动态显示出A/D转换后的数字量(8位A/D转换后数值在0~255变化)。
#include <reg52.h>
sbit ledwela=P2^5;
sbit dula=P2^6;
sbit wela=P2^7;
sbit adwr=P3^6;
sbit adrd=P3^7;
#define uint unsigned int
#define uchar unsigned char
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
dula=1;
P0=table[num/100];
dula=0;
P0=0x7f;
wela=1;
P0=0x7e;
wela=0;
delayms(1);
wela=1;
P0=0x7f;
wela=0;
dula=1;
P0=table[num/10%10];
dula=0;
P0=0x7f;
wela=1;
P0=0x7d;
wela=0;
delayms(1);
wela=1;
P0=0x7f;
wela=0;
dula=1;
P0=table[num%10];
dula=0;
P0=0x7f;
wela=1;
P0=0x7b;
wela=0;
delayms(1);
wela=1;
P0=0x7f;
wela=0;
}
void main()
{
uchar num=0,i=0;
ledwela=1;
P1=0xff;
ledwela=0;
wela=1;
P0=0x7f;
wela=0;
while(1)
{
adwr=0;
adwr=1;
for(i=30;i>0;i--)
{
display(num);
}
adrd=0;
num=P1;
adrd=1;
}
}
AD转换关键在于看懂时序图,根据时序图操作,关键代码如下,记住在WR拉高之后,转换时间要够。
while(1)
{
adwr=0;
adwr=1;
for(i=30;i>0;i–)
{
display(num);
}
adrd=0;
num=P1;
adrd=1;
}
二、DAC0832的操作
1、实验板上的DAC0832接线图
DAC0832芯片数据输入可采用双缓冲、单缓冲和直通三种方式,实验板上的是接成直通方式的。
在此例程中,DAC0832以电流形式输出,当输出需要转换为电压时可在I(OUT1)和I(OUT2)后外接运算放大器,即将电流转换为电压。在此实验板上I(OUT2)接地,I(OUT1)直接与发光二极管D12相连,由于I(OUT1)电流非常小,所以二极管变化的亮度也很暗。
转换电压的典型接法:
2、DAC0832内部结构
3、芯片时序图
将CS置低后数据总线上数据才开始保持有效数据,再将WR置低,从I(OUT)线看出,在WR置低ts秒后,DA转换完成,I(OUT)输出稳定。在此次例程中要连续转换DA,所以CS和WR一直置低即可,只需一直改变P0口。
4、用单片机控制DAC0832芯片输出电流,让发光二极管D12由灭均匀变到最亮,再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别报警一声,完成整个周期时间控制在5s左右,循环变化。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit csda=P3^2;
sbit dawr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uchar valtage=0,k=0;
dula=0;
wela=0;
csda=0;
dawr=0;
while(1)
{
beep=0;
P0=valtage;
valtage+=5;
delayms(50);
beep=1;
for(k=0;k<49;k++)
{
P0=valtage;
valtage+=5;
delayms(50);
}
P0=valtage;
valtage+=5;
delayms(50);
beep=0;
P0=valtage;
delayms(50);
beep=1;
for(k=0;k<50;k++)
{
valtage-=5;
P0=valtage;
delayms(50);
}
valtage-=5;
}
}
一个while循环的时间为(1+49+1+50)*50ms=5050ms,约为5s。课本上93页可以看到倒T形电阻网络DAC转换器电流的分流电路图。
蜂鸣器的电路图如下:蜂鸣器的FM端接单片机的P2^3口
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)