找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3096|回复: 0
收起左侧

51单片机ADC0808直流数字电压表系统Proteus仿真程序

[复制链接]
ID:858846 发表于 2020-12-11 19:43 | 显示全部楼层 |阅读模式
基于51单片机的直流数字电压表系统。
采用掌握LED动态显示和A/D转换接口的设计方法,制作直流数字电压表。
用到了ADC0808芯片和四位七段LED显示器。
将待显示的数据拆解为3位十进制数,并分时的显示在其相应的数码管上。一次完整的输出过程:最低位数据传送P0口—P2.3清零—软件延时—P2.3置1—中间位数据送P0口—P2.2清零—软件延时—P2.2置1—最高位数据送P0口—P2.1清零—软件延时—P2.1置1,如此循环。
启动信号与输出使能信号(START、ALT、OE)均由软件方式的正脉冲提供;结束信号(EOC)由P2.6的高电平提供。A/D转换时钟信号由T0定时方式2中断提供(设系统的振荡频率为12MHz)。一次完整的A/D转换过程:发出启动信号—查询EOC标志—发出OE置1信号—读取A/D结果—发出OE清零信号,如此无限循环。
仿真原理图如下: 51hei.png
1.png 2.png 3.png


单片机C语言程序如下:
#include <reg51.h>
sbit _st= P2^5;
sbit _eoc=P2^6;
sbit _oe=P2^7;
sbit led0=P2^3;
sbit led1=P2^2;
sbit led2=P2^1;
sbit led3=P2^0;
unsigned char ad_result=0;
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //×ÖÄ££¬êééÏ158ò3
unsigned char table2[]={0x3e};
void delay(unsigned int time)
{
        unsigned int j=0;
        for(;time>0;time--)
        for(j=0;j<125;j++);
}
void disp(void)
{
        led3=0;
        P0=table[ad_result/100];
        delay(10);
        led3=1;
        led2=0;
        P0=table[(ad_result/10)%10];
        delay(10);
        led2=1;
        led1=0;
        P0=table[(ad_result/1)%10];
        delay(10);
        led1=1;
        led0=0;
        P0=table2[0];
        delay(10);
        led0=1;
}
void main(void)
{
        while(1)
        {
                _st=0;_st=1;_st=0;
                while(!_eoc);
                _oe=1;
                ad_result=P1;
                _oe=0;
                disp();
        }
}
        附件下载(包含Protues工程和C语言程序):
text7.rar (64.53 KB, 下载次数: 50)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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