找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机ADC0808电压表仿真程序

[复制链接]
跳转到指定楼层
楼主
51单片机电压表,ADC




LM324               CD4051

ADC0808


  • IN0~IN7:8路模拟量输入端。
  • D0D7:8位数字量输出端。
  • ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。
  • ALE:地址锁存允许信号,输入端,产生一个正脉冲以锁存地址。
  • START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
  • EOC A/D转换结束信号,输出端,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
  • OE: 数据输出允许信号,输入端,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
  • CLK:时钟脉冲输入端。要求时钟频率不高于640KHz。
  • REF(+)、REF(-):基准电压。
  • Vcc:电源,+5V。
  • GND:地。




74LS74                74LS04                    





CD4511
  • A0A3:二进制数据输入端   
  • YaYg:数据输出端
  • BI:输出消隐控制端,接电源
  • LT:灯测试端,接电源
  • LE:数据锁定控制端,接地
  • VDD: 接电源
  • VSS: 接地


4位数码管






AT89C52



单片机源程序如下:
  1. #include <reg52.H>
  2. #define uchar unsigned char;
  3. uchar code scan_con[]={0x08,0x04,0x02,0x01};  //定义扫描片选
  4. uchar dispbuf[4]={0,0,0,0}; //定义4个存储空间
  5. uchar getdata;
  6. unsigned long int temp;//定义暂存空间
  7. uchar i,j,k,l,m;
  8. int a,b;
  9. sbit s3=P3^7;  //位定义,控制模拟开关
  10. sbit s2=P3^6;
  11. sbit s1=P3^5;
  12. sbit dp=P0^7; //定义小数点
  13. #define v20_on {s3=0;s2=0;s1=0;} //宏定义不同量程,不同的开关状态
  14. #define v2_on {s3=0;s2=0;s1=1;}
  15. #define v02_on {s3=0;s2=1;s1=0;}
  16. sbit ST=P3^1;   //定义单片机和ADC的控制信号
  17. sbit OE=P3^3;
  18. sbit EOC=P3^2;

  19. delay_ms(int n)
  20. {
  21.         for(a=n;a>0;a--)
  22.                 for(b=100;b>0;b--);
  23. }

  24. main(void)
  25. {
  26.         while(1)
  27.         {   
  28. _20v:       //2~20V量程
  29.         v20_on;
  30.         ST=1;
  31.         delay_ms(1);      //启动A/D转换
  32.         ST=0;
  33.         while(EOC==0)
  34.         OE=1;
  35.         getdata=P1;
  36.         OE=0;
  37.         if(getdata<21)  //量程不合适,切换
  38.         {
  39.                 goto _2v;
  40.                 delay_ms(1);
  41.         }           
  42.         l=3;
  43.         temp=getdata;   //量程合适,数据处理
  44.         temp=temp*100;
  45.         temp=temp*5/51;
  46.         goto disp;   //跳到数码管显示程序段
  47. _2v:                   //200MV~2V量程
  48.         v2_on;
  49.         ST=1;
  50.         delay_ms(1);      //启动A/D转换
  51.         ST=0;
  52.         while(EOC==0)
  53.         OE=1;
  54.         getdata=P1;
  55.         OE=0;
  56.         if(getdata<21)
  57.         {
  58.                 goto _02v;
  59.                 delay_ms(1);
  60.         }
  61.         else if(getdata>204)
  62.         {
  63.                 goto _20v;
  64.                 delay_ms(1);
  65.         }
  66.         l=2;
  67.         temp=getdata;
  68.         temp=temp*100*5/51;
  69.         goto disp;
  70. _02v:              //0~200MV量程
  71.            v02_on;
  72.            OE=0;
  73.           ST=1;
  74.         delay_ms(1);      //启动A/D转换
  75.         ST=0;
  76.         while(EOC==0)
  77.         OE=1;
  78.         getdata=P1;
  79.         OE=0;
  80.         if(getdata>204)
  81.            {
  82.                    goto _2v;
  83.                    delay_ms(1);
  84.            }
  85.            l=1;
  86.            temp=getdata;
  87.            temp=temp*100*5/51;
  88.            
  89. disp:
  90.            dispbuf[3]=0;
  91.            dispbuf[2]=0;
  92.            dispbuf[1]=0;
  93.            dispbuf[0]=0;
  94.            i=0;
  95.            for(;temp;i++)//电压值的每个位计
  96.        {
  97.                    dispbuf[i]=temp%10;
  98.                    temp=temp/10;  
  99.            }
  100.            for(k=0;k<=3;k++)  //数码管显示
  101.            {
  102.                   
  103.                    if((k==3&&l==3&&i==3)        ||(k==3&&l==1&&i==3))
  104.                    continue;
  105.                    P0=scan_con[k];      //位选
  106.                     P2=dispbuf[k]&0x0f;   //段选
  107.                    if((l==3&&k==2)||(l==2&&k==3)||(l==1&&k==1))
  108.                    dp=0        ;
  109.                    else dp=1;
  110.                    for(m=0;m<=2;m++)
  111.                    for(j=0;j<=20;j++);
  112.                    }
  113.                    }
  114.                    }
复制代码

所有资料51hei提供下载:
电压表.zip (795.15 KB, 下载次数: 23)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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