找回密码
 立即注册

QQ登录

只需一步,快速开始

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

数码管显示ADC0809转换的数字量(电路+单片机程序)

[复制链接]
跳转到指定楼层
楼主
从ADC0809的通道IN0输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。

电路原理图如下:

程序如下:
#include <reg52.h>         //头文件定义
#include<intrins.h>
#define uchar unsigned char           //宏定义
#define uint  unsigned int
sbit EOC=P3^3;//EOC转换结束信号,高电平说明转换结束。如果只是作为P3.3口,查询编程;如果是INT1,中断编程方法。
sbit CS=P3^0;
sbit AD_WR=P3^6;//控制ST,WR=0,ST=1;WR=1,ST=0;上升沿(0—1)启动A/D转换,下降沿(1—0)进入A/D转换。
sbit AD_RD=P3^7;//控制OE,RD=0,OE=1;RD=1,OE=0;OE=1,允许数据输出给单片机。OE=0,停止数据输出给单片机
uchar code table[ ]={0x3F,0x06,0x5B,0x4F,
                     0x66,0x6D,0x7D,0x07,
                     0x7F,0x6F,0x77,0x7C,
                                         0x39,0x5E,0x79,0x71};

void delayms(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
    for(j=110;j>0;j--);
}

void display(uchar bai,uchar shi,uchar ge)//显示子函数
{
        
        P2=table[bai];//P2连接DATA 显示数字
        P1=0x04;          //P1连接BIT 选择哪一位数码管
        delayms(1);
        P2=table[shi];
        P1=0x02;
        delayms(1);
        P2=table[ge];
        P1=0x01;
        delayms(1);
}

void main()
{
   uchar A1,A2,A3,ad_dat,a;
   CS=0;//WR=1;RD=1;
   while(1)
   {
      AD_WR=1;//st=1;
      _nop_();
      _nop_();
      _nop_();
      AD_WR=0;         //上升沿启动A/D转换
      _nop_();
      _nop_();
      _nop_();
          AD_WR=1; //下降沿开始A/D转换
      while(!EOC);//等待A/D转换结束,当EOC变为1时,A/D转换结束。
          for(a=5;a>0;a--);
      AD_RD=0;//输出转换数据给单片机
          _nop_();
     ad_dat=P0;//段选显示
     AD_RD=0;//输出数据线为高阻状态         每改变一次电压值,就需要按下仿真器复位按钮,再点击下载,才能显示新的数字量
     A1=ad_dat/100;
         A2=ad_dat%100/10;
         A3=ad_dat%10;
         display(A1,A2,A3);
  }
}



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

使用道具 举报

沙发
ID:452566 发表于 2018-12-30 10:00 | 只看该作者
有详细的介绍吗,整体的电路,小白不懂,求教
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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