目录具体实现功能设计介绍51单片机简介资料内容原理图和PCBAD19仿真实现protues8.7程序Keil5全部资料资料获取具体实现功能由51单片机AD0832模块按键模块LCD1602显示屏报警模块等构成具体功能:1能够切换测量电压值、电流值以及电阻值并用四位数码显示短路时会报警2电压测量范围0-20V电流测量范围0-200mA电阻测量范围0-1000欧3测短路将待测两点用导线相接蜂鸣器发出声音则为短路。仿真/实物演示视频51单片机数字万用表设计设计介绍51单片机简介51单片是一种低功耗、高性能CMOS-8位微控制器拥有灵巧的8位CPU和可编程Flash使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。本设计所使用的芯片可兼容以下所有的51系列单片机包括AT系列和STC系列。资料内容原理图和PCBAD19本系统原理图和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 i0;; while (1) //主循环 { if(Key_V0) //电压按键按下 { Key_V1; //清除按下标记 if((Key_R0)||(Key_I0))//电阻电流按键也有按下 { Key_I1; Key_R1; Key_V1; Mode4; //标记为错误模式 } else //电阻电流键都没有按下 Mode1; //标记为电压模式 } if(Key_R0) //同电压键 { Key_R1; if((Key_V0)||(Key_I0)) { Key_I1; Key_R1; Key_V1; Mode4; } else Mode2; } if(Key_I0) //同电压键 { Key_I1; if((Key_V0)||(Key_R0)) { Key_I1; Key_R1; Key_V1; Mode4; } else Mode3; } if((Key_V1)(Key_R1)(Key_I1))//都没有按下 { Mode0; //标记为空闲模式 } if(i0) { Read_ADAdc0832(0); //读取AD值 } i; if(i300) i0; 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: //电压模式 VINRead_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: //电阻模式 RINRead_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(RIN1000) //超过或等于1000; { dis_smg[1]DisplayOther[2]; //显示- dis_smg[2]DisplayOther[2]; //显示- dis_smg[3]DisplayOther[2]; //显示- } break; case 3: //电流模式 IIN4*Read_AD;//单位mA //换算出电流值 dis_smg[0]DisplayNum[0xc]; //显示电流标志 if(IIN200) //没有超过范围 { 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
51单片机数字万用表设计
目录具体实现功能设计介绍51单片机简介资料内容原理图和PCBAD19仿真实现protues8.7程序Keil5全部资料资料获取具体实现功能由51单片机AD0832模块按键模块LCD1602显示屏报警模块等构成具体功能:1能够切换测量电压值、电流值以及电阻值并用四位数码显示短路时会报警2电压测量范围0-20V电流测量范围0-200mA电阻测量范围0-1000欧3测短路将待测两点用导线相接蜂鸣器发出声音则为短路。仿真/实物演示视频51单片机数字万用表设计设计介绍51单片机简介51单片是一种低功耗、高性能CMOS-8位微控制器拥有灵巧的8位CPU和可编程Flash使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。本设计所使用的芯片可兼容以下所有的51系列单片机包括AT系列和STC系列。资料内容原理图和PCBAD19本系统原理图和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 i0;; while (1) //主循环 { if(Key_V0) //电压按键按下 { Key_V1; //清除按下标记 if((Key_R0)||(Key_I0))//电阻电流按键也有按下 { Key_I1; Key_R1; Key_V1; Mode4; //标记为错误模式 } else //电阻电流键都没有按下 Mode1; //标记为电压模式 } if(Key_R0) //同电压键 { Key_R1; if((Key_V0)||(Key_I0)) { Key_I1; Key_R1; Key_V1; Mode4; } else Mode2; } if(Key_I0) //同电压键 { Key_I1; if((Key_V0)||(Key_R0)) { Key_I1; Key_R1; Key_V1; Mode4; } else Mode3; } if((Key_V1)(Key_R1)(Key_I1))//都没有按下 { Mode0; //标记为空闲模式 } if(i0) { Read_ADAdc0832(0); //读取AD值 } i; if(i300) i0; 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: //电压模式 VINRead_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: //电阻模式 RINRead_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(RIN1000) //超过或等于1000; { dis_smg[1]DisplayOther[2]; //显示- dis_smg[2]DisplayOther[2]; //显示- dis_smg[3]DisplayOther[2]; //显示- } break; case 3: //电流模式 IIN4*Read_AD;//单位mA //换算出电流值 dis_smg[0]DisplayNum[0xc]; //显示电流标志 if(IIN200) //没有超过范围 { 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