基于51单片机的电流电压功率负载测试仿真

仿真图:

在这里插入图片描述

功能简介:

采用51单片机作为控制器,最小系统由晶振和复位电路组成
液晶显示采用LCD1602用于显示该项目的参数信息
采用运算放大器LM358搭建差分放大20倍左右
采用ADC0809作为ADC转换芯片,将模拟信号转换为数字信号

芯片/模块的特点:

LM358特点:
双通道放大器:LM358包含两个独立的运算放大器,可单独使用或同时使用。每个通道都具有输入、输出和电源引脚,可以方便地处理两个信号源或执行不同的放大功能。

宽工作电压范围:LM358可以在广泛的电源电压范围内工作,通常为单一供电电压范围(3V至32V)。这使得它适用于不同电源供电系统的应用。

低功耗:LM358采用低功耗设计,在工作时功耗较低。这使得它适用于对功耗要求较高的电池供电应用。

高输入阻抗:LM358具有高输入阻抗,可以减少对信号源的负载影响,提供更准确和稳定的信号放大。

外部补偿:LM358具有用于外

ADC0809特点:
8位分辨率:ADC0809能够将模拟输入信号转换为8位的数字输出,提供256个离散的输出级别。这使得它适用于对较低分辨率要求的应用,可以进行精确的信号采集和转换。

并行输出:ADC0809的输出数据以并行方式进行传输,直接提供8位的数字输出。这种并行输出使得数据传输更加快速和高效。

内部参考电压:ADC0809集成了内部参考电压源,可以提供稳定且精确的参考电压。这样可以简化系统设计,并提高转换的准确性。

8个模拟输入通道:ADC0809具有8个模拟输入通道,可以分别转换8个不同的模拟输入信号。这使得它适用于多通道信号监测和数据采集的应用。

可编程时钟频率:ADC0809的转换速率可以通过外部时钟信号进行编程,可根据需要调整转换速度,以满足不同应用的需求。

外部控制引脚:ADC0809具有多个外部控制引脚,如转换启动引脚、自动触发引脚和片选引脚等,可以通过这些引脚对转换过程进行控制和选择。

多种封装形式:ADC0809可以提供不同的封装形式,如多引脚直插式封装(PDIP)和表面贴装技术(SMT)封装。这使得它适应不同应用的安装需求。

主程序:

#include"includes.h"
#define TIME0H 0x3C
#define TIME0L 0xB0
sbit ch=P3^5;
sbit bh=P3^1;
uchar uc_Clock=0;		//定时器0中断计数
bit b_DATransform=0;
unsigned int  dat,u,i,p;
uchar n=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把电压显示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void vShowVoltage(uint uiNumber)
{
	uchar ucaNumber[3],ucCount;
	if(uiNumber>999)					
		 uiNumber=999;
	ucaNumber[0]=uiNumber/100;								//把计算数字的每个位存入数组。
	ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;							
	ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
	for(ucCount=0;ucCount<3;ucCount++)
	{
		vShowOneChar(ucaNumber[ucCount]+48);				//从首位到末位逐一输出。
		if(ucCount==0)
			vShowOneChar('.');
	}
}
//*************************************************************************************************
//*																								  *
//*			  ********************************主函数******************************				  *
//*																								  *
//*************************************************************************************************
void main()
{
	TMOD=0x01;			//定时器0,模式1。
	TH0=TIME0H;
	TL0=TIME0L;
	TR0=1;				//启动定时器。
	ET0=1;				//开定时器中断。
	EA=1;				//开总中断
	vdInitialize();
	vWriteCMD(0x80);	   //写入显示起始地址
	vShowChar("  U");
	vWriteCMD(0xC4);     
	vShowChar("V");
	vWriteCMD(0x85);	   //写入显示起始地址
	vShowChar("  I");
	vWriteCMD(0xCA);     
	vShowChar("A");
	vWriteCMD(0x8B);	   //写入显示起始地址
	vShowChar("  P");
	vWriteCMD(0xCF);     
	vShowChar("W");
	ch=0;
	bh=1;//关闭继电器
	while(1)
	{
		if(b_DATransform==1)
		{
			
			if(ch==1)
			{
			b_DATransform=0;
			vWriteCMD(0xC0);
			dat=uiADTransform();
			u=dat;
		    vShowVoltage(dat);
		
			vWriteCMD(0xcb);
			p=u*i;
			p=p/100;
		    vShowVoltage(p);
			n++;
			}
			if(ch==0)
			{
			dat=uiADTransform();
			u=dat;
			b_DATransform=0;
			vWriteCMD(0xC6);
			dat=uiADTransform();
			dat=dat/1.225;
			i=dat;
			if(i>500)
			bh=0;
			else
			bh=1;//电流大于500mA,启动继电器
		    vShowVoltage(dat);
		    
			n++;
			}
			if(n==3)
			{
			 n=0;
			 ch=!ch;
			}


		//vShowVoltage(123);
		}
	}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0中断函数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void t0() interrupt 1
{
	if(uc_Clock==0)
	{
		uc_Clock=5;
		b_DATransform=1;
	}
	else
		uc_Clock--;
	TH0=TIME0H;		   //恢复定时器0。
	TL0=TIME0L;
}



设计文件:

链接:https://pan.baidu.com/s/1j2fQNb9bpd5l2gJeFTiamg?pwd=hg10

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值