AD转换 :如何通过单片机(我用的是凌阳)将AD转换来了数字量再次转换为模拟量显示出来
比如我的输入模拟电压是范围是0-5V,通过AD转换将数字信号给单片机,单片机再通过相应处理将数字量输出到外围设备(比如输出到数码管或者液晶)显示出我输入的模拟电压...
比如我的输入模拟电压是范围是0-5V,通过AD转换将数字信号给单片机,单片机再通过相应处理将数字量输出到外围设备(比如输出到数码管或者液晶)显示出我输入的模拟电压
展开
5个回答
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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
2013-07-12
展开全部
那你根据数字量算出模拟值再显示不就可以了?如8位ad,256代表5v 128 就代表2.5
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-12
展开全部
首先要看你的芯片型号了.转换很简单.百来行代码搞定
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-12
展开全部
凌阳单片机,可以直接咨询凌阳网站的工程师。他们会给你答复和帮助的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-12
展开全部
有相应的DA转换芯片呀. 不难的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询