【毕业设计】70-基于单片机的智能配电仪_电压_电流监控器的设计(原理图+仿真工程+源代码+答辩论文)


typora-root-url: ./

【毕业设计】70-基于单片机的智能配电仪_电压_电流监控器的设计(原理图+仿真工程+源代码+答辩论文)

资料链接

资料包含:毕业设计全套资料(精品)
原理图工程文件
仿真模型工程文件
仿真截图
答辩论文,低重复率文档,19047字
物料清单

设计说明书

摘要

智能配电仪在设计上是由硬件电路以及软件控制代码组成。配电仪系统在硬件部分主要由单片机最小系统以及相关外围电路(模数转换器电路、放大器电路、显示器电路)设计实现。在研究系统前充分掌握当前系统的研究背景,了解高效的充放电管理系统。根据对系统方案分析、元器件选择、确认所选择的元器件、主控制器等。使用EDA软件绘制硬件原理图,将功能按照模块化分配实现电路子系统设计,方便后期调试。在对系统的设计与开发上使用Keil软件编写系统工程代码,根据系统开发流程绘制流程图确认代码工程逻辑,编写代码。使用EDA仿真软件工具Proteus实现系统的硬件调试与功能测试。

设计框架架构

第一章 绪论… 1

第一节 概述… 1

第二节 研究背景及意义… 1

第三节 本文的主要研究内容… 2

第四节 本章小节… 3

第二章 方案设计… 4

第一节 总方案功能框架设计… 4

第二节 主要元器件方案选择… 4

一、显示单元方案选择… 4

二、温度检测方案选择… 5

第三节 本章小节… 5

第三章 智能配电仪系统电路设计… 7

第一节 单片机最小系统电路设计… 7

一、单片机介绍… 7

二、单片机最小系统… 9

第二节 电流、电压检测电路设计… 10

第三节 人机交互电路设计… 11

第四节 温度检测电路设计… 12

第五节 电源电路设计… 13

第六节 显示器电路设计… 14

第七节 系统总电路设计… 15

第八节 本章小结… 15

第四章 智能配电仪系统软件设计… 16

第一节 开发工具介绍… 16

第一节 系统软件总流程设计… 16

第二节 电流、电压检测程序设计… 18

第三节 温度检测程序设计… 18

第四节 液晶显示程序设计… 19

第五节 按键程序流程设计… 21

第六节 本章小结… 22

第五章 智能配电仪系统仿真实现… 23

第一节 仿真软件介绍… 23

第二节 仿真电路搭建… 23

第三节 仿真测试… 24

一、系统功能测试… 25

二、阈值调节… 27

第四节 本章小结… 31

结 论… 32

致 谢… 33

参考文献… 35

设计说明书及设计文件

​ 答辩论文,低重复率文档,19047字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码展示

#include "stdio.h"
#include "intrins.h"
#define     u8  			unsigned char
#define     u16   		unsigned int
#define     uchar  			unsigned char
#define     uint   		unsigned int
	uchar yushe_wendu=50;				//温度预设值
uchar wenduchar=0;
uint wendu; 								//温度值全局变量
#define const_dpy_time_half  200  //数码管闪烁时间的半值
#define const_dpy_time_all   400  //数码管闪烁时间的全值 一定要比const_dpy_time_half 大
sbit K1 = P3^5;//设置键
sbit K2 = P3^6;//加键
sbit K3 = P3^7;//减键
unsigned char pre_key = 0x0f;//记录按键状态
unsigned char key_value = 20;//获取到的按键值
#define DB P0//液晶并行数据接口
sbit  RS = P1^2;//液晶指令数据信号
sbit  RW = P1^3;//液晶读写信号
sbit  E  = P1^4;//液晶使能信号
unsigned char   curr_menu = 0;//设置参数

unsigned char ucWd=1;  //本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
unsigned char ucWd1Update=0; //窗口1更新显示标志
unsigned char ucWd2Update=0; //窗口2更新显示标志
unsigned char ucPart=0;//本程序的核心变量,局部显示变量。类似于二级菜单的变量。代表显示不同的局部。
unsigned char ucWd1Part1Update=0; //在窗口1中,局部1的更新显示标志
unsigned char ucWd1Part2Update=0; //在窗口1中,局部2的更新显示标志
unsigned char ucWd2Part1Update=0; //在窗口2中,局部1的更新显示标志
unsigned char ucWd2Part2Update=0; //在窗口2中,局部2的更新显示标志
unsigned char ucDpyTimeLock=0; //原子锁
unsigned int  uiDpyTimeCnt=0;  //数码管的闪烁计时器,放在定时中断里不断累加
unsigned char   i;//循环变量
unsigned char   cnt_100ms = 0,cnt_500ms =0;//100ms计数
unsigned char   time_100ms_flag = 0;//100ms标志
unsigned char   blank_flg;//闪烁标志
unsigned char   blank_tim_cnt;//闪烁计数
sbit  CS=P1^5;
sbit  CLK=P1^6;
sbit  DIO=P1^7;
unsigned int   ad_val_a;
unsigned int   ad_val_b;
unsigned int  v_alarm_tl=80;// 欠压报警器值
unsigned int  i_alarm_th=130;// 过流报警值
sbit  v_alm=P2^0;//欠压显示灯
sbit  i_alm=P2^1;//过流显示灯
void delay_ms(unsigned int cnt)//软件延时1MS
{
	unsigned int x;
	for( ; cnt>0; cnt--)//通过for循环执行空指令延时
	{
		for(x=110; x>0; x--);
	}
}
void delay_us(unsigned int cnt)//软件延时1us
{
	while(--cnt);
}
void time_init(void)//定时器初始化
{
	  TMOD |= 0x11;//time0 工作方式为1
	  TH0 = 0xf8;//装载初值
	  TL0 = 0x2f;//装载初值,为2ms(65535-63535)
      TR0 = 1;//开启定时器
	  ET0 = 1;//打开中断
	  EA=1;//打开总中断
}
/
/***********************************************************************************************************
DS18B20相关函数
***********************************************************************************************************/

sbit DQ = P1^0;				 //ds18b20的数据引脚
/*****延时子程序:该延时主要用于ds18b20延时*****/
void Delay_DS18B20(int num)
{
  while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
  unsigned char x=0;
  DQ = 1;         //DQ复位
  Delay_DS18B20(8);    //稍做延时
  DQ = 0;         //单片机将DQ拉低
  Delay_DS18B20(80);   //精确延时,大于480us
  DQ = 1;         //拉高总线
  Delay_DS18B20(14);
  x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
  Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{
  unsigned char i=0;
  unsigned char dat = 0;
  for (i=8;i>0;i--)
  {
    DQ = 0;     // 给脉冲信号
    dat>>=1;
    DQ = 1;     // 给脉冲信号
    if(DQ)
    dat|=0x80;
    Delay_DS18B20(4);
  }
  return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
  unsigned char i=0;
  for (i=8; i>0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
    Delay_DS18B20(5);
    DQ = 1;
    dat>>=1;
  }
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
  unsigned char a=0;
  unsigned char b=0;
  unsigned int t=0;
  float tt=0;
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0x44);  //启动温度转换
  Init_DS18B20();
  WriteOneChar(0xCC);  //跳过读序号列号的操作
  WriteOneChar(0xBE);  //读取温度寄存器
  a=ReadOneChar();     //读低8位
  b=ReadOneChar();    //读高8位
  t=b;
  t<<=8;
  t=t|a;
  tt=t*0.0625;
  t= tt*10+0.5;     //放大10倍输出并四舍五入
  return(t);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值