51单片机数字万用表设计
51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。
目录
具体实现功能
由51单片机+AD0832模块+按键模块+LCD1602显示屏+报警模块等构成
具体功能:
(1)能够切换测量电压值、电流值以及电阻值,并用四位数码显示,短路时会报警;
(2)电压测量范围0-20V,电流测量范围0-200mA,电阻测量范围0-1000欧;
(3)测短路:将待测两点用导线相接,蜂鸣器发出声音则为短路。

仿真/实物演示视频:
51单片机数字万用表设计
设计介绍

51单片机简介
51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。
本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。

资料内容
原理图和PCB(AD19)
本系统原理图和PCB设计采用Altium Designer19,具体如图。


注1:请使用Altium Designer19直接打开资料中的工程文件(资料中已说明打开方式)!
注2:此设计需按照原理图制作实物,不可直接烧录到任何开发板中运行(需要修改程序)!
仿真实现(protues8.7)
本设计利用protues8.7软件实现仿真设计,具体如图。

注1:请使用protues8.7直接打开资料中的工程文件(资料中已说明打开方式)!
注2:由于仿真软件限制,仿真设计和实物设计无法百分百对应!!
程序(Keil5)
本设计利用KEIL5软件实现程序设计。
主函数如下:
////////////////
/***********************************************************************************************************
主函数
***********************************************************************************************************/
void main (void)
{
u8 Mode;
uchar Read_AD; //用于读取ADC数据
uchar VIN; //电压值变量
u16 RIN; //电阻值变量
u16 IIN; //电流值变量
u16 i=0;;
while (1) //主循环
{
if(Key_V==0) //电压按键按下
{
Key_V=1; //清除按下标记
if((Key_R==0)||(Key_I==0))//电阻电流按键也有按下
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4; //标记为错误模式
}
else //电阻电流键都没有按下
Mode=1; //标记为电压模式
}
if(Key_R==0) //同电压键
{
Key_R=1;
if((Key_V==0)||(Key_I==0))
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4;
}
else
Mode=2;
}
if(Key_I==0) //同电压键
{
Key_I=1;
if((Key_V==0)||(Key_R==0))
{
Key_I=1;
Key_R=1;
Key_V=1;
Mode=4;
}
else
Mode=3;
}
if((Key_V==1)&&(Key_R==1)&&(Key_I==1))//都没有按下
{
Mode=0; //标记为空闲模式
}
if(i==0)
{
Read_AD=Adc0832(0); //读取AD值
}
i++;
if(i>300)
i=0;
switch(Mode)
{
case 0:
//空闲模式
dis_smg[0]=DisplayOther[2];//关闭数码管显示
dis_smg[1]=DisplayOther[2];
dis_smg[2]=DisplayOther[2];
dis_smg[3]=DisplayOther[2];
break;
case 1:
//电压模式
VIN=Read_AD*200/255; //换算出电压值
dis_smg[0]=DisplayNum[0xa]; //显示电压标志
dis_smg[1]=DisplayNum[VIN/100%10]; //电压十位
dis_smg[2]=DisplayNum[VIN/10%10]&0x7f; //电压个位
dis_smg[3]=DisplayNum[VIN%10]; //电压十分位
break;
case 2:
//电阻模式
RIN=Read_AD*100/(255-Read_AD); //换算出电阻值
dis_smg[0]=DisplayNum[0xb]; //显示电阻标志
dis_smg[1]=DisplayNum[RIN/100%10]; //电阻百位
dis_smg[2]=DisplayNum[RIN/10%10]; //电阻十位
dis_smg[3]=DisplayNum[RIN%10]; //电阻个位
if(RIN>=1000) //超过或等于1000;
{
dis_smg[1]=DisplayOther[2]; //显示"-"
dis_smg[2]=DisplayOther[2]; //显示"-"
dis_smg[3]=DisplayOther[2]; //显示"-"
}
break;
case 3:
//电流模式
IIN=4*Read_AD;//单位mA //换算出电流值
dis_smg[0]=DisplayNum[0xc]; //显示电流标志
if(IIN<=200) //没有超过范围
{
dis_smg[1]=DisplayNum[IIN/100%10]; //电流百位
dis_smg[2]=DisplayNum[IIN/10%10]; //电流十位
dis_smg[3]=DisplayNum[IIN%10]; //电流个位
}
else
{
dis_smg[1]=DisplayOther[2]; //显示"-"
dis_smg[2]=DisplayOther[2]; //显示"-"
dis_smg[3]=DisplayOther[2]; //显示"-"
}
break;
case 4:
//错误模式
dis_smg[0]=DisplayNum[0xe]; //显示"E"
dis_smg[1]=DisplayNum[0xe]; //显示"E"
dis_smg[2]=DisplayNum[0xe]; //显示"E"
dis_smg[3]=DisplayNum[0xe]; //显示"E"
break;
default :
break;
}
DisplayScan(); //数码管动态扫描
}
}
程序运行结果如图:

注:请使用KEIL C51直接打开资料中的工程文件(资料中已说明打开方式)!
全部资料
全部资料包括原理图和PCB源文件(AD19)、程序(Keil5)、protues仿真(protues8.7)、设计报告(仅供参考)、仿真视频、开发资料、仿真视频、单片机最小系统介绍等,全网最全!资料内容如下图所示!!

资料获取
https://docs.qq.com/doc/DT3Fnc2x6RnZKRWtm
更多推荐



所有评论(0)