找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6005|回复: 10
打印 上一主题 下一主题
收起左侧

单片机ADC0804测量电压问题 数字量不是按线性变换的,没有规律

[复制链接]
跳转到指定楼层
楼主
50黑币
我用ADC0804测量电压,转换的数字量是(0~255),但是在变换电压时,这个数字量不是按线性变换的,变换没有规律,如果我把电压设为2.5V,输出位001,而不是177啊,这是怎么回事,我用的是郭天祥的那个程序,一模一样,程序没有错。

0804.png (18.39 KB, 下载次数: 140)

0804.png

最佳答案

查看完整内容

从数字量换算成模拟量的过程有问题。 在显示数转换为显示数字子程序中,满量程A-D值FFH(255)对应UREF+(5V),显示时需将A-D值按比例变换:255→500。变换方法为:(A-D值÷255)×500=(A-D值÷51)×100V。在变换过程中,数值会超出一字节(大于255)。 先Proteus仿真一下,确认有效。 实例81 ADC0808中断方式A-D(ALE输出CLK) 实例84 ADC0808并行A-D(虚拟CLK) 实例85 ADC0832串行A-D(TXD输出CLK) ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 2017-4-7 21:53 | 只看该作者
本帖最后由 zl2168 于 2017-4-9 09:48 编辑

从数字量换算成模拟量的过程有问题。
显示数转换为显示数字子程序中,量程A-DFFH255)对应UREF+5V),显示时需将A-D值按比例变换:255500变换方法为:(A-D÷255×500=A-D÷51×100V。在变换过程中,数值会超出一字节大于255)。
Proteus仿真一下,确认有效。
实例81 ADC0808中断方式A-D(ALE输出CLK)
实例81 ADC0808A-D( ALE输出CLK,中断方式).rar (54.32 KB, 下载次数: 13)

实例84 ADC0808并行A-D(虚拟CLK)
实例84 ADC0808A-D(虚拟CLK).rar (35.75 KB, 下载次数: 4)

实例85 ADC0832串行A-D(TXD输出CLK)
实例85 ADC0832串行A-D( TXD输出CLK).rar (36.86 KB, 下载次数: 3)

实例86 ADC0832串行A-D(虚拟CLK)
实例86 ADC0832串行A-D(虚拟CLK).rar (35.29 KB, 下载次数: 4)

以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。













回复

使用道具 举报

板凳
ID:82765 发表于 2017-4-7 22:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

地板
ID:151348 发表于 2017-4-8 09:04 | 只看该作者
附上程序看看
回复

使用道具 举报

5#
ID:183740 发表于 2017-4-8 09:27 | 只看该作者
有没有可能数码管的共阴和共阳弄错

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:166914 发表于 2017-4-8 15:12 | 只看该作者

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P2^0;
sbit wei=P2^1;
sbit wr=P3^0;
sbit rd=P3^1;
sbit cs=P3^2;
sbit intr=P3^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay1ms(uint t)
{
  uint i,j;
  for(i=0;i<t;i++)
  for(j=0;j<110;j++);
}
void display(uchar bai,uchar shi,uchar ge)
{
  wei=1;
  P0=0x7e;
  wei=0;
  P0=0xff;
  duan=1;
  P0=table[bai];
  duan=0;
  delay1ms(5);


  wei=1;
  P0=0x7d;
  wei=0;
  P0=0xff;
  duan=1;
  P0=table[shi];
  duan=0;
  delay1ms(5);


  wei=1;
  P0=0x7b;
  wei=0;
  P0=0xff;
  duan=1;
  P0=table[ge];
  duan=0;
  delay1ms(5);
}
void main()
{
  uchar a,A1,A2,A3,adval;
  cs=0;
  wei=1;
  P0=0x7f;
  wei=0;
  while(1)
  {
    wr=1;
        _nop_();
        wr=0;
        _nop_();
        wr=1;
        while(intr);
        for(a=10;a>0;a--)
        {
           display(A1,A2,A3);
        }
        P1=0xff;
        rd=1;
        _nop_();
        rd=0;
        _nop_();
        adval=P1;
        rd=1;
        A1=adval/100;
        A2=adval%100/10;
        A3=adval%100%10;
        display(A1,A2,A3);
  }
}
回复

使用道具 举报

7#
ID:166914 发表于 2017-4-8 15:13 | 只看该作者
1300584512 发表于 2017-4-8 09:27
有没有可能数码管的共阴和共阳弄错

这个应该没有,都能显示了
回复

使用道具 举报

8#
ID:166914 发表于 2017-4-8 15:14 | 只看该作者

这个电路有没有错啊
回复

使用道具 举报

9#
ID:151348 发表于 2017-4-8 19:21 | 只看该作者
雪花太 发表于 2017-4-8 15:14
这个电路有没有错啊

没有,程序似乎不行
回复

使用道具 举报

10#
ID:166914 发表于 2017-4-8 23:02 | 只看该作者
imxuheng 发表于 2017-4-8 19:21
没有,程序似乎不行

那你有没有一个正确的程序。能给我看哈吗?谢谢了
回复

使用道具 举报

11#
ID:151348 发表于 2017-4-9 09:03 | 只看该作者
雪花太 发表于 2017-4-8 23:02
那你有没有一个正确的程序。能给我看哈吗?谢谢了

木有,只有ADC0832的程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表