找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机+ADC0809数码管显示程序+Proteus仿真

[复制链接]
跳转到指定楼层
楼主
一。ADC0809介绍
二。基于51单片机的原理图
三。相关程序

一。ADC0809介绍

1、ADC0809简介
  • ADC0809是采用COMS工艺制造的双列直插式单片8位A/D转换器。分辨率8位,精度7位,带8个模拟量输入通道,有通道地址译码锁存器,输出带三态数据锁存器。启动信号为脉冲启动方式,最大可调节误差为±1LSB。
  • ADC0809内部没有时钟电路,故CLK时钟需由外部输入,fclk允许范围为500kHz-1MHz,典型值为640kHz。每通道的转换需要66~73个时钟脉冲,大约100-110us。(转换时间)工作温度范围为-40℃—+85℃。功耗为15mW,输入电压范围为0–5V,单一+5V电源供电。
2、ADC0809的引脚介绍

  • IN0~IN7 : 8路模拟量输入端
  • D0~D7:8位数字量输出端
  • ADDA、ADDC、ADDC:3位地址输入线,用于选择8路模拟通道中的一路,选择情况见表。
  • ALE:地址锁存允许信号,输入,高电平有效
  • START:A/D转换启动信号,输入,高电平有效
  • EOC:A/D转换结束信号,输出。当启动转换时,高引脚为低电平,当A/D结束转换时,高引脚输出高电平。
  • OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。
  • CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ.
  • REF+、REF-:基准电压输入端。
  • VCC:电源,接+5V;
  • GND:地。

3、ADC0809的工作流程
  • 输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。
  • 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
  • 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
  • 当CPU执行一读数据指令,使OE为高电平,则从输出端D0~D1读出数据

二。基于51单片机的原理图


三。相关程序
  1. #include<reg52.h>
  2. unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  3. unsigned char dispbuf[4];
  4. unsigned int i;
  5. unsigned int j;
  6. unsigned char getdata;
  7. unsigned int temp;
  8. unsigned int temp1;
  9. unsigned char count;
  10. unsigned char d;
  11. sbit ST=P3^0;
  12. sbit OE=P3^1;
  13. sbit EOC=P3^2;
  14. sbit CLK=P3^3;
  15. //sbit P34=P3^4;
  16. //sbit P35=P3^5;
  17. //sbit P36=P3^6;
  18. sbit P20=P2^0;
  19. sbit P21=P2^1;
  20. sbit P22=P2^2;
  21. sbit P23=P2^3;
  22. sbit P17=P1^7;
  23. void TimeInitial();
  24. void Delay(unsigned int i);

  25. void TimeInitial()
  26. {
  27.          TMOD=0x10;
  28.          TH1=(65536-200)/256;
  29.          TL1=(65536-200)%256;
  30.          EA=1;
  31.          ET1=1;
  32.          TR1=1;
  33. }

  34. void Delay(unsigned int i)
  35. {
  36.   unsigned int j;
  37.   for(;i>0;i--)
  38.   {
  39.   for(j=0;j<125;j++)
  40.   {;}
  41.   }
  42. }

  43. void Display()
  44. {
  45.            P1=dispbitcode[dispbuf[3]];
  46.                  P20=0;
  47.                  P21=1;
  48.                  P22=1;
  49.                  P23=1;
  50.                  Delay(10);
  51.                  P1=0x00;
  52.                  P1=dispbitcode[dispbuf[2]];
  53.                  P17=1;
  54.                  P20=1;
  55.                  P21=0;
  56.                  P22=1;
  57.                  P23=1;
  58.                  Delay(10);
  59.                  P1=0x00;
  60.                  P1=dispbitcode[dispbuf[1]];
  61.                  P20=1;
  62.                  P21=1;
  63.                  P22=0;
  64.                  P23=1;
  65.                  Delay(10);
  66.                  P1=0x00;
  67.                  P1=dispbitcode[dispbuf[0]];
  68.                  P20=1;
  69.                  P21=1;
  70.                  P22=1;
  71.                  P23=0;
  72.                  Delay(10);
  73.                  P1=0x00;
  74. }
  75. void main()
  76. {
  77.                 TimeInitial();
  78.                 while(1)
  79.                 {
  80.                                 ST=0;
  81.                                 OE=0;
  82.                                 ST=1;
  83.                                 ST=0;
  84. //                                P34=0;
  85. //                                P35=0;
  86. //                                P36=0;
  87.                                 while(EOC==0);
  88.                                 OE=1;
  89.                                 getdata=P0;
  90.                                 OE=0;
  91.                                 temp=getdata*1.0/256*500;
  92.                                 dispbuf[0]=temp%10;
  93.                                 dispbuf[1]=temp/10%10;
  94.                                 dispbuf[2]=temp/100%10;
  95.                                 dispbuf[3]=temp/1000;
  96.                                 Display();
  97.                 }
  98. }

  99. void t1(void) interrupt 3 using 0
  100. {
  101.   TH1=(65536-200)/256;
  102.   TL1=(65536-200)%256;
  103.   CLK=~CLK;
  104.   }
复制代码

全部资料51hei下载地址:
ADC0809.7z (101.46 KB, 下载次数: 71)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:826428 发表于 2020-11-30 13:52 来自手机 | 只看该作者
老哥,实物的话,51时钟怎么达到500khz呢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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