基于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电路图、参考论文、流程图、任务书、元件清单、仿真视频等。具体内容如下,全网最全!
资料获取请观看前面演示视频!
点赞分享一起学习成长。