标题:
单片机ADC0809模块测量负载电压电流功率的程序Proteus仿真
[打印本页]
作者:
梦不虚存
时间:
2022-4-10 15:26
标题:
单片机ADC0809模块测量负载电压电流功率的程序Proteus仿真
ADC0809模块测电压和由取样小电阻组成的放大器电路测电流设计,再由51单片机处理数据输出,显示在LCD1602上
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(52.2 KB, 下载次数: 52)
下载附件
2022-4-13 03:37 上传
单片机源程序如下:
//检测电压,精度为0.05V,范围是0~5V。 **
#include"includes.h"
#define TIME0H 0x3C
#define TIME0L 0xB0
sbit ch=P3^0;
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;
}
复制代码
Keil代码与Proteus仿真下载:
ADC08809电压电流功率显示.7z
(156.25 KB, 下载次数: 67)
2022-4-13 03:39 上传
点击文件名下载附件
测电压电流功率
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1