news 2026/5/28 16:38:59

基于单片机交流电压表系统Proteus仿真(含全部资料)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机交流电压表系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件+keil C语言源程序+AD原理图+流程图+元器件清单+说明书等

资料下载:

通过网盘分享的文件:资料分享
链接:百度网盘 请输入提取码提取码: tgnu


目录

资料下载:

Proteus仿真功能

项目文件资料:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、Keil c语言程序源代码


项目功能:

交流电压表
1、测量范围分成2个档位:1mV-100mV和100mV-10V
2、自动切换档位
3、多次测量取平均值
4、上位机控制启动和停止

【说明:测量过程比较慢,测量一次大概要花3~5秒,因为51单片机跑滤波算法比较花时间】


项目文件:

一、Proteus仿真源文件

二、AD原理图文件

二、报告说明书

三、系统流程图

四、器件清单

元件型号数量
单片机AT89C511
电容30pf2
电容10uf1
电阻10k2
按钮1
晶振12MHZ1
集成运放LM3241
显示器LCD16021
电阻21k1
电阻1k1
稳压管3.3V1
排阻10k1
模数芯片TLC15431

五、Keil c语言程序源代码(部分)

#include "reg51.h" #include "lcd1602.h" #include"TLC1543.h" #define uchar unsigned char #define uint unsigned int sbit test=P1^7; uchar disp1[]="000mV "; uchar disp2[]="00.00V"; uchar dang=1;//档位 uchar time=0,times=0; uint volt1=0,volt2=0,sum=0,volt=0;//电压 uchar start=1; //延时 void delay(uint i) { while(i--); } void send(uchar *p)//发送 { while(*p!='\0') { SBUF=*p; while(!TI); TI=0; p++; } } //主函数 void main() { init_1602(); write_string(1,0,"1:1mV-100mV"); SCON=0X50; //设置为工作方式1 TMOD=0X21; //设置计数器工作方式2 TH1=0XFD; TL1=0XFD; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 TH0=0X3C; TR0=1;//打开定时器 while(1) { if(start==1) { delay(100); //测量 if(dang==0)//1mV-100mV { volt1=TLC1543_read(0); if(volt1>volt2) volt2=volt1; } else//100mV-10V { test=0; volt1=TLC1543_read(1); if(volt1>volt2) volt2=volt1; } } } } //定时器0中断 void Timer0() interrupt 1 { if(start==1) { if(time<10)//定时采集 time++; else { time=0; sum+=volt2;//累加 volt2=0; if(times<5)//平均值 times++; else { times=0; volt=sum; sum=0;volt2=0; volt=volt/5; if(dang==0)//1挡 { volt=volt*69/72; disp1[0]=volt/100+0x30; disp1[1]=volt%100/10+0x30; write_string(2,5,disp1); if(volt>105)//档位切换 dang=1; send(disp1); SBUF=0x0d;while(!TI);TI=0; } else//2挡 { if(volt<105)//档位切换 dang=0; write_string(1,0,"2:100mV-10V"); volt=volt*2; if(volt<1000)//100-1000mV { disp1[0]=volt/100+0x30; disp1[1]=volt%100/10+0x30; disp1[2]=volt%10+0x30; write_string(2,5,disp1); send(disp1); SBUF=0x0d;while(!TI);TI=0; } else //1-10V { disp2[0]=volt/10000+0x30; disp2[1]=volt%10000/1000+0x30; disp2[3]=volt%1000/100+0x30; disp2[4]=volt%100/10+0x30; write_string(2,5,disp2); send(disp2); SBUF=0x0d;while(!TI);TI=0; } } } } } TL0=0XB0; } //串口中断 void Usart() interrupt 4 { start=SBUF-0x30;//出去接收到的数据 RI = 0;//清除接收中断标志位 if(start==0) { write_string(1,0," welcom!"); write_string(2,4," "); } }

六、全套资料包含

七:项目资源获取

需要完整的资料可以点击下面的名片关注,回复“资料”!

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 6:40:21

Packet Tracer中交换机远程管理配置指南

从零开始掌握交换机远程管理&#xff1a;Packet Tracer实战全解析你有没有遇到过这样的场景&#xff1f;机房里几十台交换机层层堆叠&#xff0c;每次配置都要插线、开终端、敲命令……一旦设备分布在不同楼层或园区&#xff0c;运维效率直接“断崖式”下滑。这就是为什么远程管…

作者头像 李华
网站建设 2026/5/20 14:52:52

彻底解决Multisim主数据库路径错误的系统级配置流程

彻底解决Multisim主数据库路径错误的系统级修复实战你有没有遇到过这样的情况&#xff1a;刚重装完系统&#xff0c;兴冲冲打开Multisim准备做仿真&#xff0c;结果软件卡在启动界面&#xff0c;弹出一个冷冰冰的提示——“Database not found”&#xff1f;或者更糟&#xff0…

作者头像 李华
网站建设 2026/5/21 17:00:09

别再乱买电竞耳机了!职业选手都在用的“隐藏参数”曝光

花几百上千块买的电竞耳机&#xff0c;却总在决赛圈被敌人绕后偷袭&#xff1f;明明开着7.1环绕声&#xff0c;却连脚步声从左还是右来都分不清&#xff1f;团战沟通时&#xff0c;队友只听见你这边的键盘杂音&#xff0c;关键指令全错过&#xff1f;别再怪自己反应慢&#xff…

作者头像 李华
网站建设 2026/5/26 0:13:17

ModbusTCP报文格式说明:调试过程中典型问题汇总

深入理解 Modbus TCP 报文结构&#xff1a;从协议解析到调试实战在工业自动化现场&#xff0c;你是否遇到过这样的场景&#xff1f;PLC 和上位机明明连上了网&#xff0c;Ping 得通&#xff0c;端口也能 Telnet 通&#xff0c;但数据就是读不出来——要么返回异常码&#xff0c…

作者头像 李华
网站建设 2026/5/21 11:22:11

从零实现基于UDS诊断协议的诊断请求响应处理

手把手教你实现一个轻量级UDS诊断引擎 你有没有遇到过这样的场景&#xff1a;手握CAN分析仪&#xff0c;连上OBD接口&#xff0c;发了一串 22 F1 90 &#xff0c;却迟迟等不来VIN码的回应&#xff1f;或者在刷写ECU时卡在“进入编程会话”这一步&#xff0c;看着诊断仪反复超…

作者头像 李华