找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 24577|回复: 27
收起左侧

数模转换ADC0809数字电压表的proteus仿真及源码

  [复制链接]
ID:137190 发表于 2016-10-10 16:22 | 显示全部楼层 |阅读模式
ADC0809中文资料  
1.主要特性  1)8路8位A/D转换器,即分辨率8位。   2)具有转换起停控制端。   3)转换时间为100μs   4)单个+5V电源供电   5)模拟输入电压范围0~+5V,不需零点和满刻度校准。   6)工作温度范围为-40~+85摄氏度   7)低功耗,约15mW。   

2.内部结构    ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近  ADC0809内部结构框图 寄存器、三态输出锁存器等其它一些电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输出与TTL兼容。   

3.外部特性(引脚功能)   ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。       IN0~IN7:8路模拟量输入端。  
    2-1~2-8:8位数字量输出端。  
    ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。
  ALE:地址锁存允许信号,输入,高电平有效。   
    START: A/D转换启动信号,输入,高电平有效。   
    EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)   OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。  
    CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。   
    REF(+)、REF(-):基准电压。   
    Vcc:电源,单一+5V。   
    GND:地。   
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。


51单片机做的数模转换ADC0809芯片的数字电压表的proteus仿真原理图如下:
0.png
单片机源程序:
  1. /********************************************************************
  2. 51黑电子论坛
  3. *********************************************************************/
  4. #include <reg52.h>             //头文件
  5. #define uchar unsigned char           //宏定义无符号字符型
  6. #define uint  unsigned  int           //宏定义无符号整型
  7. code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
  8. uchar wei[4]={0XEf,0XDf,0XBf,0X7f};  //位的控制端                                                                 //位控制码
  9. sbit ST=P3^0;   //A/D启动转换信号
  10. sbit OE=P3^1;   //数据输出允许信号
  11. sbit EOC=P3^2;  //A/D转换结束信号
  12. sbit CLK=P3^3;  //时钟脉冲  
  13. uint z,x,c,v,AD0809, date;        //定义数据类型
  14. /******************************************************************
  15. 延时函数
  16. ******************************************************************/
  17. void delay(uchar t)
  18. {
  19.   uchar i,j;
  20.    for(i=0;i<t;i++)
  21.    {
  22.             for(j=13;j>0;j--);
  23.          { ;
  24.          }
  25.    }
  26. }
  27. /**********************************************************************
  28.                 数码管动态扫描
  29. *********************************************************************/
  30. void xianshi() //显示函数
  31. {
  32. uint z,x,c,v;
  33.   z=date/1000;                         //求千位
  34.   x=date%1000/100;                 //求百位
  35.   c=date%100/10;                 //求十位
  36.   v=date%10;                         //求个位

  37.       P2=0XFF;
  38.           P0=seg7code[z]&0x7f;
  39.           P2=wei[0];
  40.           delay(80);
  41.           P2=0XFF;  
  42.       P0=seg7code[x];
  43.           P2=wei[1];
  44.           delay(80);
  45.           P2=0XFF;  
  46.              P0=seg7code[c];
  47.           P2=wei[2];
  48.           delay(80);
  49.           P2=0XFF;  
  50.       P0=seg7code[v];
  51.           P2=wei[3];
  52.           delay(80);
  53.           P2=0XFF;
  54.   }
  55. /*************************************************************************
  56.                                 CLK振荡信号        
  57. **************************************************************************/
  58. void timer0( ) interrupt 1 //定时器0工作方式1
  59. {

  60. TH0=(65536-2)/256;          //重装计数初值
  61. TL0=(65536-2)%256;          //重装计数初值
  62. CLK=!CLK;                          //取反
  63. }

  64. /*************************************************************************
  65.                                 主函数        
  66. **************************************************************************/
  67. void main()
  68. {
  69. TMOD=0X01;                          //定时器中断0

  70. CLK=0;                                  //脉冲信号初始值为0
  71. TH0=(65536-2)/256;          //定时时间高八位初值
  72. TL0=(65536-2)%256;          //定时时间低八位初值
  73. EA=1;                                  //开CPU中断
  74. ET0=1;                                  //开T/C0中断
  75. TR0=1;
  76. while(1)                           //无限循环
  77.         {
  78.         ST=0;                                //使采集信号为低
  79.         ST=1;                                //开始数据转换
  80.         ST=0;                                //停止数据转换
  81.         while(!EOC);                //等待数据转换完毕
  82.         OE=1;                                //允许数据输出信号
  83.         AD0809=P1;                    //读取数据
  84.         OE=0;                                //关闭数据输出允许信号
  85.         if(AD0809>=251)                //电压显示不能超过5V
  86.         AD0809=250;
  87.         date=AD0809*20;                //数码管显示的数据值,其中20为采集数据的毫安值
  88.         xianshi();                        //数码管显示函数
  89.    
  90.     }
  91. }        
复制代码
0.png


ADC0809数字电压表仿真工程文件及所有完整程序等资料下载地址(压缩包一共有45个单片机仿真,全部下载后找到第012个项目即可):
http://www.51hei.com/bbs/dpj-56298-1.html

评分

参与人数 3黑币 +11 收起 理由
923932516 + 5 很给力!
QQwert + 5 很给力!
山贼甲 + 1 赞一个!

查看全部评分

回复

使用道具 举报

ID:136693 发表于 2017-12-21 21:23 | 显示全部楼层
厉害了
回复

使用道具 举报

ID:262115 发表于 2017-12-25 21:28 来自手机 | 显示全部楼层
很厉害
回复

使用道具 举报

ID:265659 发表于 2017-12-27 17:12 | 显示全部楼层
赞了,非常有用
回复

使用道具 举报

ID:271459 发表于 2018-1-4 16:20 | 显示全部楼层
谢谢楼主分享哈
回复

使用道具 举报

ID:276416 发表于 2018-1-17 00:31 来自手机 | 显示全部楼层
借了lz的程序为什么数码管显示的有问题
回复

使用道具 举报

ID:246228 发表于 2018-1-18 22:25 | 显示全部楼层
51黑有你更精彩!!!
回复

使用道具 举报

ID:124995 发表于 2018-1-19 21:19 | 显示全部楼层
不错,学习中,对我有用
回复

使用道具 举报

ID:287137 发表于 2018-3-4 18:17 | 显示全部楼层
HAO真心不错的帖子
回复

使用道具 举报

ID:302544 发表于 2018-4-5 21:49 | 显示全部楼层
真的很不错,很有借鉴作用
回复

使用道具 举报

ID:308622 发表于 2018-4-16 13:04 | 显示全部楼层
电路图怎么打开?
回复

使用道具 举报

ID:308622 发表于 2018-4-16 17:02 | 显示全部楼层
程序在keil怎么通过编译?
回复

使用道具 举报

ID:314776 发表于 2018-4-24 09:34 来自手机 | 显示全部楼层
数码管为啥数字是一位一位的显示,怎么可以让四位同时显示
回复

使用道具 举报

ID:124995 发表于 2018-4-24 10:26 | 显示全部楼层
很好很不错
回复

使用道具 举报

ID:276534 发表于 2018-6-11 12:47 | 显示全部楼层
为什么侧的值只有某个准确,代码是不是有问题
回复

使用道具 举报

ID:580869 发表于 2019-7-9 14:13 | 显示全部楼层
赞一个
回复

使用道具 举报

ID:475783 发表于 2019-7-15 14:02 | 显示全部楼层
想问下楼主这个电压表的量程是多少
回复

使用道具 举报

ID:134271 发表于 2019-10-7 08:43 | 显示全部楼层
得分。有用。谢谢了。
回复

使用道具 举报

ID:705047 发表于 2020-3-9 11:24 | 显示全部楼层
eoc是可以直接接到单片机上的吗
回复

使用道具 举报

ID:706694 发表于 2020-3-11 22:07 | 显示全部楼层
太给力,谢谢分享
回复

使用道具 举报

ID:711413 发表于 2020-4-19 15:29 | 显示全部楼层
资料很全。
回复

使用道具 举报

ID:729193 发表于 2020-4-28 09:44 | 显示全部楼层
真厉害呀
回复

使用道具 举报

ID:697141 发表于 2020-5-13 16:06 | 显示全部楼层
做设计急需,谢谢楼主分享
回复

使用道具 举报

ID:786044 发表于 2020-6-23 21:00 | 显示全部楼层
厉害了,很有用
回复

使用道具 举报

ID:495287 发表于 2020-6-24 21:23 | 显示全部楼层
谢谢楼主分享,再温习下数模转换。
回复

使用道具 举报

ID:787783 发表于 2020-6-25 00:22 | 显示全部楼层
厉害了
回复

使用道具 举报

ID:163623 发表于 2021-3-11 12:23 | 显示全部楼层
范总 发表于 2018-6-11 12:47
为什么侧的值只有某个准确,代码是不是有问题

感觉程序的时序有问题吧,值都不对啊
回复

使用道具 举报

ID:911035 发表于 2021-5-31 12:03 | 显示全部楼层
数码管显示有问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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