基于51单片机的简易数字电压表proteus仿真原理图程序设计

article/2025/6/22 11:11:39

硬件电路设计

原理图:
在这里插入图片描述
仿真图:
在这里插入图片描述
单片机的时钟电路与复位电路设计
本系统采用STC系统列单片机,相比其他系列单片机具有很多优点。一般STC单片机资源比其他单片机要多,而且执行速度快;STC系列单片机使用串口对单片机进行烧写,下载程序较为方便;STC51单片机内部集成了看门狗电路;且具有很强抗干扰能力。
本系统采用内部方式的时钟电路和加电自复位的复位电路,如下图
3图4所示:
在这里插入图片描述

由于单片机P0口内部不含上拉电阻,为高阻态,不能正常地输出高/低电平,因而该组I/O口在使用时必须外接上拉电阻。

模数转换模块设计

3.3.1 ADC性能参数
目前的实时信号处理机要求ADC尽量靠近视频、中频甚至射频,以获取尽可能多的目标信息。因而,ADC的性能好坏直接影响整个系统指标的高低和性能好坏,从而使得ADC的性能测试变得十分重要,表征ADC性能的参数,由于尚无统一的标准,各主要器件生产厂家在其产品参数特性表中给出的也不完全一致。一般来说,可以分为静态特性和动态特性参数。
3.3.2 ADC静态特性
ADC的静态特性是指其与时间特性无关的特性,主要包括以下几类:

  1. 分辨率
    ADC的分辨率定位为二进制末位变化1所需的最小输入电压与参考电压的比值,即ADC能够分辨的最小的模拟量的变化。
  2. 量化误差
    量化电平定义为满量程电压(或满度信号值)UFSR与2的N次幂的比值,其中N位被数字化的数字信号的二进制位数。量化电平一般用Q表示。
  3. 全输入范围和动态范围
    全输入范围是指允许输入模拟信号的最大值与最小值之差;动态范围是指全输入范围与ADC最小可分辨的量值之比。
  4. 偏置误差和增益误差
    ADC的偏置误差定义为使最低位被置成“1”状态时ADC的输入电压与理论上使最低位被置成“1”状态时的输入电压之差。当偏置误差高速为零之后,输出为全1时对应的实际输入电压与理想输入电压之差。

3.3.3 ADC动态特性
高速ADC的动态特性是指输入为交变简谐信号时的性能技术指标,它是与ADC的操作速度有关的特性。其主要技术指标如下:

  1. 转换时间、采集时间
    转换时间是指从信号开始转换到可获得完整的信号输出所用的时间,它是高速ADC的一项重要指标。
    采集时间是指采样保持电路在采样模式下能够保证其在随之到来的保持模式输出在采样保持转换时,相对该时刻存在的输入电平之间的误差将会限制在一定的误差范围内所需的时间。
  2. 频率响应
    它是冲击响应的傅立叶变换,其最佳表达方式是幅频与相频曲线,从系统辨识的角度看这是在频域对ADC动态线性特性的非参数模型描述。
  3. 动态积分非线性误差和动态微分非线性误差
    动态积分非线性误差(INL)定义为在动态情况下(一般输入信号为正弦信号),ADC实际转换特性曲线之间的最大偏差。每个数码的偏差都是由那个数码的中心值来度量的。
    动态微分非线性误差(DNL)定义为在动态情况下(一般输入信号为正弦信号),ADC实际转换特性的码宽(1LSB)与理想代码宽度之间的最大偏差,单位为LSB。为了保证ADC不失码,通常规定在25oC时最大DNL为 1/2LSB。
  4. 信噪比、信噪失真比和有效位数
    信噪比(SNR)是信号电平的有效值与各种噪声(包括量化噪声、热噪声、白噪声等)有效值之比的分贝数。其中信号是指基波分量的有效值,噪声指奈奎斯特频率以下的全部非基波分量的有效值(除谐波分量和直流分量外)。
  5. 小信号带宽和全功率带宽
    ADC的模拟带宽是指输入扫描频率基波在ADC输出端用FFT分析得到的基波频谱下降到3dB处的带宽(不考虑谐波失真和噪声影响)。根据输入信号幅值不同,模拟带宽又可以分为小信号带宽(SSBW,一般指1/10满量程)和全功率带宽(FPBW,指满量程)。
    3.3.4 ADC性能测试
    ADC测试方法主要有两种:模拟方法和数字方法。前者是将A/D采集的数字信号经D/A转换位模拟信号再用传统的测试方法对其进行测试,优点是易于理解,缺点是许多A/D采集卡本身不带D/A,即或有,D/A的性能也将影响A/D指标的测试;
    3.3.5 常用ADC芯片概述
    A/D转换器是用来通过一定的电路将模拟量转变为数字量。模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。

在这里插入图片描述

程序

#include <reg52.h>
#define uchar unsigned char 
#define uint  unsigned int
#include <intrins.h>//数码管段选定义      0     1    2    3    4    5	 6	 7	  8	   9	
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};	 //断码
//数码管位选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8]  = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};	
uchar smg_i = 3;    //显示数码管的个位数sbit SCL=P2^0;		//SCL定义为P1口的第3位脚,连接ADC0832SCL脚
sbit DO=P2^1;		//DO定义为P1口的第4位脚,连接ADC0832DO脚
sbit CS=P2^2;		//CS定义为P1口的第4位脚,连接ADC0832CS脚sbit key1 = P2^3;
sbit key2 = P2^4;
uchar nw_can ; //  内外电压的选择 /***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{uint i,j;for(i=0;i<q;i++)for(j=0;j<120;j++);
}/***********************小延时函数*****************************/
void delay_uint(uint q)
{while(q--);
}/***********读数模转换数据********************************************************/	
//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的//  1  1  0 通道//  1  1  1 通道 
unsigned char ad0832read(bit SGL,bit ODD)
{unsigned char i=0,value=0,value1=0;		SCL=0;DO=1;CS=0;		//开始SCL=1;		//第一个上升沿	SCL=0;DO=SGL;SCL=1;  	//第二个上升沿SCL=0;DO=ODD;SCL=1;	   //第三个上升沿SCL=0;	   //第三个下降沿DO=1;for(i=0;i<8;i++){SCL=1;SCL=0; //开始从第四个下降沿接收数据value<<=1;if(DO)value++;						}for(i=0;i<8;i++){			//接收校验数据value1>>=1;if(DO)value1+=0x80;SCL=1;SCL=0;}CS=1;SCL=1;	if(value==value1)				//与校验数据比较,正确就返回数据,否则返回0	return value;return 0;
}/***********************数码显示函数*****************************/
void display()
{uchar i;for(i=0;i<smg_i;i++){	P1 = 0xff;			 //消隐 				          P3 = smg_we[i];	 		 //位选P1 = dis_smg[i];		 //段选	     delay_1ms(1);			 }	
}
/******************按键*********************/
void key()
{if(key1 == 0){if(key1 == 0){nw_can = 0; //板子上可调电阻电压	}}if(key2 == 0){if(key2 == 0){nw_can = 1; //板子上可调电阻电压	}}
}void main()
{uchar i;uint temp;while(1){key();            //按键程序display();		  //数码管显示函数if(i % 30 == 0)	  //循环30次{	if(nw_can == 0)	temp = ad0832read(1,0);	//循环255个周期读取一次0832,因CPU运行比较快,没必要每次循环都去读取,选择通过CH0输入		else temp = ad0832read(1,1);	//循环255个周期读取一次0832,因CPU运行比较快,没必要每次循环都去读取,选择通过CH0输入		temp = temp * 100 / 255 * 4.5;dis_smg[2]=smg_du[temp/100] & 0x7f;	//得到百位				dis_smg[1]=smg_du[temp/10%10];	//十位dis_smg[0]=smg_du[temp%10];	    //个位	ADC0832为8位ADC,数值为0~255,我们将其分开放入l_tmpdate数组中显示}i++;}
}

.
原文:http://www.jh-tec.cn/archives/6202

.


http://chatgpt.dhexx.cn/article/hDU3om4b.shtml

相关文章

课设-基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)

基于51单片机超声波模块的避障小车&#xff08;源码原理图Protel仿真&#xff09; 一、功能二、模块2.1、电机驱动模块2.2、超声波模块 三、程序代码四、PCB原理图 一、功能 设计一辆利用超声波传感器来实现避障功能的小车&#xff0c;使小车对其运动方向受到的阻碍作出各种躲…

基于51单片机的交通灯原理图加代码

花了一个星期制作的交通灯仿真程序原理图&#xff0c;通过数码管显示路口的时间&#xff0c;通过led显示红绿灯。[TOC] #include<reg51.H> // 对单片机的口进行了定义 #define uint unsigned int #define uchar unsigned char uchar code a[10]{0x40,0x79,0x24,0x30,0…

51单片机电路原理图_51单片机玩转物联网基础篇03-独立按键

前言 上一节,我们完成了51单片机控制LED灯,并实现流水灯效果,本节我们学习操作独立按键,并通过两个按键,分别打开和关闭所有LED灯,按键作为输入设备,在系统开发过程中十分常见,一般来说,按键可以设置系统参数、控制系统运行状态。 一、基础知识 1.按键简介 通常的按键…

单片机基础:MCS-51单片机的硬件结构(附硬件结构框图)

单片机硬件结构知识点非常琐碎&#xff0c;通过一次两次的学习是不太可能记住的。想要熟练掌握硬件结构&#xff0c;最好的方法是在实验中练习&#xff0c;通过编程多见多用才能牢固的掌握。 MCS-51单片机硬件结构 1.硬件系统框图2.单片机功能图3.单片机的主要部件4.CPU内部结…

基于51单片机的智能温控风扇(程序+仿真+原理图)

目录 基于51单片机的智能温控风扇1、主要功能2、实验结果3、仿真工程4、原理图5、程序源码6、资源获取 基于51单片机的智能温控风扇 1、主要功能 基于51单片机的智能温控风扇&#xff0c;通过DS180温度传感器采集温度&#xff0c;并通过数码管显示温度&#xff0c;当温度高于…

基于51单片机的温度监测控制系统仿真程序原理图设计

整体方案设计 3.1.1 系统概述 整个系统以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,传感器采用DS18B20,负责采集温度数据后发给单片机。显示设备采用4位共阴数码管,显示检测到的温度值。按键…

51单片机电路原理图_51单片机AD转换电路设计实现

51单片机AD转换电路设计实现 关于AD转换的原理,大家在《数字电子技术》中已经学过,这里做过多的介绍,本文介绍一款经典的8位AD转换芯片ADC0804,基于51单片机设计AD转换电路,并完成测量值的转换。 1 芯片引脚介绍 CS:片选信号,低电平有效,即CS=0时候芯片才能正常工作,单…

51单片机电路原理图_HX711的电子秤称重系统设计详解,51单片机,含Proteus仿真、C代码、原理图、论文等...

设计要求 1.系统可实现电子秤基本的称重功能(称重范围为0~10Kg,重量误差不大于0.005Kg); 2.系统应具备键盘输入单价,显示重量,计算总价的功能; 3.单价和总价金额的单位为元,最大金额数值为999.99元,金额误差不大于0.01元; 4.系统超出最大测量范围10Kg时,具有报警指…

51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)

本设计&#xff1a; 基于51单片机的简易计算器设计&#xff08;仿真程序原理图PCB设计报告&#xff09; 仿真&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 编号S0001 芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯…

51单片机计算机加原理图,MCS-51单片机最小系统的组成部分及电路图介绍

MCS-51单片机概述 MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到…

手把手教你看懂51单片机原理图

最近当了单片机课设的助教,又再次接触了51单片机。发现初学者还看不太原理图&#xff0c;不能理解单片机 led灯&#xff0c;蜂鸣器&#xff0c;数码管是怎么操作的。现在结合原理图讲解一下怎么操作这些外设模块&#xff01;我们就以一些初始化代码进行讲解。 注&#xff1a;这…

51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统

当我们了解了什么是单片机,以及单片机有什么用之后,是否要考虑我们怎么去学习单片机呢?学习单片机其实很简单,需要的起步知识并不需要多少,接下来跟随我的步伐,一步一步的去了解单片机。本文将讲解单片机最小系统和仿真软件以及编程软件的选择。 0. 51单片机最小系统 先来…

理解51单片机最小系统的工作原理

51单片机最小应用系统 概述 要想使用单片机&#xff0c;第一个要搭建的电路就是单片机的最小系统&#xff0c;有了这个最小系统单片机就可以去正常的工作&#xff0c;即使没有其他的外围电路&#xff08;显示器啥的&#xff09;&#xff0c;也可以对单片机进行程序的编写&…

51单片机原理与设计方案(包含原理图与PCB)

一、单片机简介 单片机&#xff1a;在一片集成电路芯片上集成微处理器&#xff08;CPU&#xff09;、存储器&#xff08;ROM和RAM&#xff09;、I/O接口电路&#xff0c;从而构成了单芯片微型计算机&#xff0c;即单片机&#xff08;single chip Microcomputer&#xff09;也叫…

如何获得海量的RoboCode代码

原文地址&#xff1a;如何获得海量的RoboCode代码 作者&#xff1a;胡泊1982 很多对人工智能感兴趣的朋友受限于资金和场地的限制&#xff0c;只能转向虚拟平台发展。我们机器人天空网站也曾经做过专门的专题介绍了几种常见的虚拟机器人竞赛平台&#xff08;http://www.robotsk…

Robocode 参数大揭密

Robocode 参数大揭密 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 &#xff0d; 下载免费软件&#xff0c;快速启动开发 级别: 初级 天翼.李Skyala.Li, 2002 年 12 月 02 日 下面天翼.李(Skyala.Li)就和大家一起来看看Robocode中重要的参数并分析分析…

在IDEA上部署Robocode

Robocode的下载和安装 下载网址&#xff1a;https://robocode.sourceforge.io/ 下载Robocode 解压&#xff0c;点击运行压缩包中的jar包完成安装&#xff0c;安装完成后得到肉搏code的文件夹 在Idea上部署robocode 打开IDEA&#xff0c;新建Java项目&#xff0c;注意项目的…

教你玩Robocode(4)——规则系统

理解Robocode的规则系统&#xff0c;你才能写出更好的坦克。许多规则在Robotcode的Roles类中进行了描述。为了便于大家理解&#xff0c;本文对各种规则参数进行详细叙述。 时间 robocode的时间单位为”轮”(turn)。因此&#xff0c;在描述移动速度时&#xff0c;单位为”像素每…

RoboCode的Intellij环境搭建

2019独角兽企业重金招聘Python工程师标准>>> RoboCode自带的源码编辑器十分不便&#xff0c;本次参考youtube上的教程搭建Intellij的roboCode开发环境&#xff0c;最终实现能够编写、编译、运行、调试机器人。 创建项目 首先&#xff0c;用Intellij IDEA新建一个pro…