AD转换 :如何通过单片机(我用的是凌阳)将AD转换来了数字量再次转换为模拟量显示出来

比如我的输入模拟电压是范围是0-5V,通过AD转换将数字信号给单片机,单片机再通过相应处理将数字量输出到外围设备(比如输出到数码管或者液晶)显示出我输入的模拟电压

第1个回答  2013-07-12
#include <reg52.h>
#include <math.h>

#define uint unsigned int
#define uchar unsigned char

sbit LED=P1^4;
sbit cs=P2^0;
sbit rd=P3^7;
sbit wr=P3^6;
sbit dacs=P3^2; //AD控制
sbit D27=P2^7; //数码管锁存器控制引脚
sbit D26=P2^6;
sbit key=P3^4;

uchar b,s,g,num;
float voltage;
uint disdata;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; //整数字符

uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,<br/>0x87,0xff,0xef}; //带小数点数字编码

void display(uchar b,uchar s,uchar g);
void delay(uint z);
void start();
void initial();

void main()
{
LED=1;
cs=0; //AD片选给低电平
dacs=1;
initial();
start();
delay(5);
rd=0;
delay(5);
num=P1;
delay(5);
rd=1;
delay(1);

voltage = 5.00*num/256; //实际电压
disdata=(uint)(voltage*100);
delay(1);
b=disdata/100;
s=disdata%100/10;
g=disdata%10;
display(b,s,g);

}

void start()
{
wr=1;
wr=0;
wr=1;
}

void initial()
{
disdata=0;
num=0;
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}

void display(uchar b,uchar s,uchar g) //显示数字个十百位
{
D27=1;
P0=0xfd;
D27=0;
P0=0x00;
D26=1;
P0=table1[b];
D26=0;
P0=0x00;
delay(1);

D27=1;
P0=0xfb;
D27=0;
P0=0x00;
D26=1;
P0=table[s];
D26=0;
P0=0x00;
delay(1);

D27=1;
P0=0xf7;
D27=0;
P0=0x00;
D26=1;
P0=table[g];
D26=0;
P0=0x00;
delay(1);
}
第2个回答  2013-07-12
那你根据数字量算出模拟值再显示不就可以了?如8位ad,256代表5v 128 就代表2.5
第3个回答  2013-07-12
首先要看你的芯片型号了.转换很简单.百来行代码搞定
第4个回答  2013-07-12
凌阳单片机,可以直接咨询凌阳网站的工程师。他们会给你答复和帮助的。
第5个回答  2013-07-12
有相应的DA转换芯片呀. 不难的
相似回答