基于51单片机的数字万用表设计

基于51单片机的数字万用表设计

(仿真+程序+原理图+PCB+设计报告)

功能介绍

具体功能:

1.能够切换测量电压、电流、电阻;

2.数码管实时显示测量值;

3.短路报警;

4.测量范围:电压0-20v(误差0.05),电流0-200mA(误差0.5),电阻0-1000欧(误差2);

​演示视频:

基于51单片机的数字万用表设计 

/*
功能:数字万用表#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include "intrins.h"											   #define     u8  			unsigned char
#define     u16   		unsigned int
#define     uchar  			unsigned char
#define     uint   		unsigned int//按键                 
sbit Key_V=P3^0;				 //电压模式键
sbit Key_R=P1^4;				 //电阻模式键
sbit Key_I=P3^5;				 //电流模式键#define KEY_V 		1		//电压模式
#define KEY_R			2		//电阻模式
#define KEY_I			3		//电流模式/***********************************************************************************************************
数码管显示相关函数
***********************************************************************************************************/#define   SMG_NUM   4
u8 code DisplayNum[16]={
0xc0,		//0
0xf9,		//1
0xa4,		//2
0xb0,		//3
0x99,		//4
0x92,		//5
0x82,		//6
0xf8,		//7
0x80,		//8
0x90,		//9
0x88,		//A
0x83,		//b
0xc6,		//C
0xa1,		//d
0x86,		//E
0x8e		//F
};
//
u8 code DisplayOther[]={
0xff, 		//0		空
0x7f, 		//1		"."
0xbf,			//2		"-"
0xa7			//3		c
};
/*void delay_ms(uint q)
{uint i,j;for(i=0;i<q;i++)for(j=0;j<110;j++);
}
*/
//数码管位选定义
sbit smg_we1 = P2^0;	    //东西数码管2
sbit smg_we2 = P2^1;			//东西数码管1
sbit smg_we3 = P2^2;			//南北数码管2
sbit smg_we4 = P2^3;			//南北数码管1void smg_we_switch(uchar i)
{switch(i){case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;}	
}/*
void delay_1ms(uint q)
{uint i,j;for(i=0;i<q;i++)for(j=0;j<110;j++);
}
*/
#define LED_a		0	//数码管段选的a段接在段选IO口的第0位
#define LED_b		2
#define LED_c		6
#define LED_d		4
#define LED_e		3
#define LED_f		1
#define LED_g		7
#define LED_dp	5u8 ChangeFor(u8 dat)
{u8 temp=0;if(dat&0x01)		//判断数据的第一位是否为1temp|=0x01<<LED_a;//如果为1,放到控制数码管a段的位置if(dat&0x02)temp|=0x01<<LED_b;if(dat&0x04)temp|=0x01<<LED_c;if(dat&0x08)temp|=0x01<<LED_d;if(dat&0x10)temp|=0x01<<LED_e;if(dat&0x20)temp|=0x01<<LED_f;if(dat&0x40)temp|=0x01<<LED_g;if(dat&0x80)temp|=0x01<<LED_dp;return temp;
}
uchar dis_smg[SMG_NUM];						//显示缓存数组void DisplayScan()
{static uchar i;P0 = 0xff;	          //消隐 smg_we_switch(i);  	  			//位选P0 =	ChangeFor(dis_smg[i]);		  //段选	  i++;if(i>=SMG_NUM)i=0;
}/***********************************************************************************************************
ADC0832相关函数
***********************************************************************************************************/
sbit ADCS 	=P1^2; //ADC0832 片选
sbit ADCLK  =P1^0; //ADC0832 时钟
sbit ADDI 	=P1^1; //ADC0832 数据输入		/*因为单片机的管脚是双向的,且ADC0832的数据输入输出不同时进行,
sbit ADDO 	=P1^1; //ADC0832 数据输出		/*为节省单片机引脚,简化电路所以输入输出连接在同一个引脚上unsigned int Adc0832(unsigned char channel)
{uchar i=0;uchar j;uint dat=0;uchar ndat=0;uchar  Vot=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=1;//控制命令结束_nop_();_nop_();dat=0;for(i=0;i<8;i++){dat|=ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();dat<<=1;if(i==7)dat|=ADDO;}for(i=0;i<8;i++){j=0;j=j|ADDO;//收数据ADCLK=1;_nop_();_nop_();ADCLK=0;//形成一次时钟脉冲_nop_();_nop_();j=j<<7;ndat=ndat|j;if(i<7)ndat>>=1;}ADCS=1;//拉低CS端ADCLK=0;//拉低CLK端ADDO=1;//拉高数据端,回到初始状态dat<<=8;dat|=ndat;return(dat);            //return ad data
}/***********************************************************************************************************

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

ADC0832;11.0592M晶振;

共阳数码管;30pF普通电容;

10uF电解电容;4.7k电阻;

18Ω电阻;2.2k电阻;

10k电阻;30k电阻;

18Ω电阻;100Ω电阻;

5Ω电阻;三极管S9012;

四孔排针;按键开关;

蜂鸣器;自锁开关;

导线:若干;

流程图:

设计资料

01 仿真图

注意:本仿真用的是lcd1602显示,有对应的仿真程序;设计使用proteus8.9版本设计,资料里有安装教程,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!

04 设计报告

一万字设计报告,具体如下!

05 设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、PCB电路图、参考论文、流程图、任务书、元件清单、仿真视频等。具体内容如下,全网最全!

资料获取请观看前面演示视频!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/1092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue.extend()和我的两米大砍刀

Vue.extends是什么&#xff1f; 一个全局API,用于注册并挂载组件。 传统的引用组件的方式是使用import直接引入&#xff0c;但是使用Vue.extends()也可以实现。 使用规则 <div id"mount-point"></div>// 创建构造器 var Profile Vue.extend({templat…

Spring 声明式事务控制

1. 编程式事务控制相关对象 1.1 PlatformTransactionManager PlatformTransactionManager 接口是 spring 的事务管理器&#xff0c;它提供了我们常用的操作事务的方法。 PlatformTransactionManager 是接口类型&#xff0c;不同的 Dao 层技术则有不同的实现类。例如:Dao层技…

Kibana启动报错:Kibana server is not ready yet

Kibana启动后&#xff0c;访问http://ip:5601后报错&#xff1a;Kibana server is not ready yet 原因1&#xff1a;Kibana和Elasticsearch的版本不兼容 解决方案&#xff1a;保持版本一致 原因2&#xff1a;Elasticsearch的服务地址和Kibana中配置的elasticsearch.hosts不同…

【数据结构】插值排序

插值排序&#xff08;Interpolation Search&#xff09;是一种用于在有序数组中查找特定元素的搜索算法。它是二分查找算法的改进版本&#xff0c;通过使用当前查找值与数组中值的比例来估计下一次查找的位置&#xff0c;而不是简单地取中点。 算法步骤 在开始搜索之前&#…

3分钟看懂Microchip 32位MCU CAN模块的配置

文章目录 CAN模块系统框图Microchip MCC Harmony下CAN模块配置选项CAN模块工作模式CAN模块中断模式CAN工作速率Bit Timing Calculation配置CAN 接收的配置CAN 发送的配置CAN 过滤器工作流程说明CAN 过滤器的配置 CAN模块系统框图 CAN的英文全称&#xff1a;Control Area Networ…

连续时间折线图的前后端实现

技术栈 vue3VChartegg.jsMySQL 需求 根据已有任务数据&#xff0c;获取连续天的任务完成的数量&#xff0c;并且通过接口返回后做成图表。预期数据如下&#xff1a; [{"x": "2024-01-01","y": 0},{"x": "2024-01-02",&q…

Python实现KDJ工具判断信号:股票技术分析的工具系列(8)

Python实现KDJ工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;8&#xff09; 介绍算法公式 代码rolling函数介绍完整代码data代码KDJ.py 介绍 KDJ是一种技术指标&#xff0c;用于衡量价格动量&#xff0c;帮助交易者识别趋势的强度和转折点。 先看看官方介绍&am…

Vue入门篇:概念,快速入门,插值表达式,核心特性,基本Vue指令

目录 1.Vue是什么2.快速入门3.插值表达式{{}}1.作用:2.语法:3.插值表达式的注意点: 4.Vue响应式核心特性5.Vue指令 1.Vue是什么 Vue是一个流行的JavaScript框架&#xff0c;用于构建用户界面。它是一种用于构建单页面应用程序&#xff08;SPA&#xff09;的渐进式框架&#xff…

机器学习系统的设计

1.混淆矩阵 混淆矩阵作用就是看一看在测试集样本集中&#xff1a; 真实值是 正例 的样本中&#xff0c;被分类为 正例 的样本数量有多少&#xff0c;这部分样本叫做真正例&#xff08;TP&#xff0c;True Positive&#xff09;&#xff0c;预测为真&#xff0c;实际为真真实值…

【PHP快速上手(十三)】

目录 PHP快速上手&#xff08;十三&#xff09;PHP 预处理语句和读取数据PHP 预处理语句使用 MySQLi 中的预处理语句使用 PDO 中的预处理语句示例&#xff1a;插入多条数据 PHP 读取数据使用 MySQLi 面向过程读取数据使用 MySQLi 面向对象读取数据使用 PDO 读取数据 PHP快速上手…

NtripShare2024年第一季度主要技术进展

迷迷糊糊又是一个月没有写点什么&#xff0c;近期想清楚NtripShare在2024的要做什么事情&#xff0c;暂且将NtripShare要做的主要事情为搭建由软件与硬件之间的技术桥梁。 在过去的几年时间里NtripShare对硬件方面一直是规避的态度&#xff0c;今年开始要做一点软硬件搭界的技…

python | webassets,一个超强的 Python 库!

本文来源公众号“python”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;webassets&#xff0c;一个超强的 Python 库&#xff01; 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - webassets。 Github地址&#xff1a…

探索Java设计模式:模板方法模式

探索Java设计模式&#xff1a;深入理解与实践模板方法模式 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并允许子类在不改变算法整体结构的情况下重定义某些步骤。在Java编程中&#xff…

mmcv bug记录

图像分类任务要用到mmcv框架&#xff0c;记录遇到的问题 1. Can‘t import build_from_cfg from mmcv. 解决命令&#xff1a;pip install openmim && mim install mmcv-full 2. python分布式训练 解决方案&#xff1a; 租用多张A40卡&#xff0c;执行下述命令&…

跨站攻击CSRF实验

1.low等级 先利用Burp抓包 将get响应的url地址复制&#xff0c;发到网页上&#xff08;Low等级到这完成&#xff09; Medium&#xff1a; 再将抓到的包发到Repeater上,对请求中的Referer进行修改&#xff0c;修改成和url一样的地址&#xff0c;修改成功。 在这里修改后发送 然…

团队协作:如何利用 Gitee 实现多人合作项目的版本控制

文章目录 前言一、名词解释1、Git是什么&#xff1f;2、Gitee、GitHub和GitLab 二、操作步骤1.安装Git2.创建Gitee仓库3.用vscode连接仓库4. 克隆远程仓库 总结 前言 在软件开发中&#xff0c;有效地管理代码是至关重要的。Gitee 是一个功能强大的代码托管平台&#xff0c;提供…

使用clickhouse-backup迁移数据

作者&#xff1a;俊达 1 说明 上一篇文章中&#xff0c;我们介绍了clickhouse-backup工具。除了备份恢复&#xff0c;我们也可以使用该工具来迁移数据。 这篇文章中&#xff0c;我们提供一个使用clickhouse-backup做集群迁移的方案。 2 前置条件 1、源端和目标端网络联通&a…

LeetCode刷题实战5:最长回文子串

题目内容 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba"…

k8s 控制器StatefulSet原理解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s概述 2、有状态服务和无状态服务…

von Mises-Fisher Distribution (代码解析)

torch.distribution 中包含了很多概率分布的实现&#xff0c;本文首先通过均匀分布来说明 Distribution 的具体用法, 然后再解释 von Mises-Fisher 分布的实现, 其公式推导见 von Mises-Fisher Distribution. 1. torch.distribution.Distribution 以下是 Uniform 的源码: cl…