基于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; //南北数码管1
void 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 5
u8 ChangeFor(u8 dat)
{
u8 temp=0;
if(dat&0x01) //判断数据的第一位是否为1
temp|=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端,形成下降沿3
ADDI=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电路图、参考论文、流程图、任务书、元件清单、仿真视频等。具体内容如下,全网最全!
资料获取请观看前面演示视频!
点赞分享一起学习成长。