基于51单片机的三路自动数字电压表仿真ADC0809 数码管显示程序设计

news/2024/11/24 8:36:00/

硬件设计、

之前讲过的几种数字电压表均是一路输入,今天讲一下多路输入的电压表,显示是采用数码管显示,ADC采用的是TI的ADC0809。
以AT89C51单片机为核心,起着控制作用。系统包括数码管显示电路、复位电路、时钟电路、模数转换电路电路。设计思路分为五个模块:复位电路、晶振电路模块、AT89C51、数码管显示电路、模数转换器电路这五个模块。
在这里插入图片描述

仿真图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三路输出分别采用数码管轮流显示,测量精度大概在0.0.1V左右。

程序设计

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示0-9的电平码
uint volt,vtime; //电压值测定值 
uchar addr;//测量地址位
sbit LW1=P2^3; //对应第4个数码管
sbit LW2=P2^2; //对应第3个数码管
sbit LW3=P2^1; //对应第2个数码管
sbit LW4=P2^0; //对应第1个数码管
sbit LW5=P1^4;//指示当前显示的是第几个转换值
sbit CLK=P2^4; //时钟信号
sbit START=P2^5; //转换启动开关
sbit EOC=P2^6;	//转换结束标志
sbit OE=P2^7;//定义ADC0809各脚
/**********************************************************/
//函数名:delay(uint x)
//功能:延时程序 改变测量地址 	
//调用函数:
//输入参数:x
//输出参数:
//说明:程序的延时时间为x乘以0.5ms 每5s改变测量地址位
/**********************************************************/
void delay(uint x)
{uchar y,z;for(y=x;y>0;y--)for(z=250;z>0;z--);//该步运行时间约为0.5msvtime++;if(vtime==1000){vtime=0;addr++;if(addr==3)	 //本例子一共有3个测量输入值,轮流读取这3个值并转换显示addr=0;//以上语句实现测量地址位的改变		}	
}
/**********************************************************/
//函数名:ADC()
//功能:数模转换程序
//调用函数:
//输入参数:
//输出参数:
//说明:将转换好的测定值保存在变量volt中
/**********************************************************/
void ADC()
{EA=1;//开中断//确保进入正常AD转换状态?START=0;START=1;START=0;//ad开始转换		while(EOC==0); //等待转换结束OE=1; //输出数据标志为真EA=0;//关中断volt=P3;//获取转换值保存到volt中,(P3为转换后数据)volt=volt*196;//转换值处理 (例子的满量程为5V,转换分辩率为8位即最大值是255,5/255=196mV,即1代表196mV)OE=0;//输出转换结束 (要在获取转换值之后)
}
/**********************************************************/
//函数名:display()
//功能:4位数码管显示
//调用函数:delay(uint x)
//输入参数:
//输出参数:
//说明:将处理后的电压值显示在4位数码管上
/**********************************************************/
void display()
{P0=0xff;//消隐 (相当于全部灭灯,清除上次显示效果)LW1=0;P0=~led[volt/10000]&0x7f;//带小数点1伏显示位delay(2);P0=0xff;LW1=1;LW2=0;P0=~led[(volt/1000)%10];//100毫伏显示位delay(2);P0=0xff;LW2=1; LW3=0;P0=~led[(volt/100)%10];//10毫伏显示位delay(2);P0=0xff;LW3=1;LW4=0;P0=~led[(volt/10)%10];//1毫伏显示位delay(2);P0=0xff;LW4=1;LW5=0;P0=~led[addr+1];//显示电压测量位delay(2);LW5=1;//指示当前显示的是第几个转换值								
}

附:http://www.jh-tec.cn/archives/7307


http://www.ppmy.cn/news/633485.html

相关文章

【转载】LWE问题简介

原文链接&#xff1a;https://blog.csdn.net/qq_44925830/article/details/126288136 文章目录 解线性方程组问题LWE问题搜索LWE问题判定LWE问题两个LWE问题之间的规约LWE问题的复杂性结论平均情况下的复杂性结论其他版本的LWE问题其他信息论文索引 容错学习(learning with err…

【云原生】设备云之FlexManager边缘计算[Javascript]

文章目录 前言一、新建脚本二、读写函数1、getMultiS642、setS163、getMultiS324、setMultiU645、setU646、setU327、getMultiU168、setS169、setMultiFloat10、setDouble11、getFloat三、脚本示例1、读写16位有符号数据2、多读写函数3、Tcp操作相关函前言 使用边缘计算,可以…

学习LwM2M协议

OMA Lightweight M2M 主要动机是定义一组轻量级的协议适用于各种物联网设备&#xff0c;因为M2M设备通常是资源非常有限的嵌入式终端&#xff0c;无UI, 计算能力和网络通信能力都有限。同时也因为物联网终端的巨大数量&#xff0c;节约网络资源变得很重要。 体系结构图如图1所示…

matlab神经网络工具箱的使用

单变量 单变量取数据 data load(ex1data1.txt); X data(:, 1); y data(:, 2);多变量取数据 data load(ex1data2.txt); X data(:, 1:2); y data(:, 3);运行train后弹出 对应的图 比如simulink格式 graphics格式 导出的函数形式 function [Y,Xf,Af] myNeuralNetwo…

解决Matlab 调用训练好的BP网络的权值和阀值算出来的预测值和调用sim得到的值不一样的办法

解决方法 解决方法很简单&#xff1a;自己通过训练好的权值和阈值计算时&#xff0c;归一化和反归一化的范围应该设为(-1,1)&#xff0c;而不是(0,1)。 也就是从原来的&#xff1a; [p_train, ps_input] mapminmax(Id,0,1); [t_train, ps_output] mapminmax(train_y,0,1);…

深入区块链层:L1 和 L2

深入区块链层&#xff1a;L1 和 L2 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AivxuuH0-1664858847219)(htTPS://tva1.sinaimg.cn/large/e6c9d24ely1h4r0auxvmxg20tr04ojug.gif)] L2解决方案是为了解决网络吞吐量问题而创建的。然而&#xff0c…

【LWE问题简介】

文章目录 解线性方程组问题LWE问题搜索LWE问题判定LWE问题两个LWE问题之间的规约LWE问题的复杂性结论平均情况下的复杂性结论其他版本的LWE问题其他信息论文索引 容错学习(learning with errors, LWE)问题就是求解带噪声的线性方程组问题, 由Oded Regev在[Reg05] 中提出, 他也因…

ensp 中的链路聚合Eth-trunk

链路聚合简介 链路聚合技术(Link Aggregation) 是在实际应用中非常实用的技术。它可以在不进行硬件升级的条件下&#xff0c;通过将多个物理接口捆绑为一个逻辑接口&#xff0c;来达到增加链路带宽的目的。在增大带宽目的的同时。链路聚合采用备份链路的机制&#xff0c;可以有…