长汀无线电厂交流论坛

 找回密码
 注册

电表电路ADE7755+2051做功率表

查看数: 2746 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-7-11 15:09

正文摘要:

本帖最后由 gongyuancun 于 2011-9-8 17:53 编辑 ADE7755的电表电路板,12脚接负13脚14脚接正极可输出高频脉冲,我这个电表光耦输出毎瓦0.57Hz的脉冲,我改了电压取样电阻,使100瓦就输出100Hz频率信号,用2051频 ...

回复

大漠游民 发表于 2013-9-17 16:28:16
不错,我也有个ADE7755的电表电路板,不知道好坏,改天也做个试试
ksd 发表于 2013-9-4 13:58:06
这个东西好,多功能表啊
社建电子 发表于 2013-6-29 16:56:29
老师,原来单片机也挺牛的啊。
gongyuancun 发表于 2011-7-11 15:14:01
本帖最后由 gongyuancun 于 2011-9-8 18:16 编辑

频率计程序                        
#include<reg2051.h>
#define ON 0
#define OFF 1
/****************定义显示*****************/
sbit led1=P3^5; //指示灯
sbit led2=P3^7;
sbit L1=P3^0; //扫描位
sbit L2=P3^1;
sbit L3=P3^2;
sbit L4=P3^3;
char code disp_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //段码
char disp_buffer[4]; //显存
char disp_count;  //显示指针
/**************定义计时,计数**************/
unsigned char count;
unsigned char time;
bit timer_flag;
/***************************************************
延时1S
***************************************************/
void delay(void)
{
unsigned char ys1,ys2,ys3;
for(ys1=167;ys1;ys1--)  //设
  for(ys2=39;ys2;ys2--)
   for(ys3=76;ys3;ys3--);
}
/***************************************************
定时器1中断
功能: 计数溢出中断,用于计数扩展
***************************************************/
void count_timer0(void) interrupt 1
{
count++;
}
/***************************************************
定时器0中断
功能: 1S计时和显示
***************************************************/
void timer1(void) interrupt 3 using 0
{
TL1|=0x60;  //4MS 12M晶振
TH1=0xF0;
led2=OFF;
//1S计时
if(++time==250)
{
  TR0=0;
  TR1=0;
  time=0x00;
  timer_flag=1;
}

//显示
P3 |= 0x0F;
P1=disp_buffer[disp_count];
switch(disp_count)
{
  case 0:
   L1=0;
   break;
  case 1:
   L2=0;
   break;
  case 2:
   L3=0;
   break;
  case 3:
   L4=0;
   break;   
}
if(++disp_count==4) disp_count=0x00;
}
/********************************
1. 定时器0作为外部输入计数器
2. 定时器1作为定时器,用于1S计时和显示
******************
void main(void)
{
unsigned long x;
unsigned char i,j,temp;

delay();
led1=ON;
led2=ON;
TMOD=0x15;
EA=1;
ET0=1;
ET1=1;
PT1=1;
// TH1=0xF0;
// TL1=0x60+0x12;
TR1=1;
// TR0=1;
while(1)
{
  PCON |= 0x01;
  //1S计时时间到的处理
  if(timer_flag)
  {
   //计算计数值
   ((char*)&x)[3]=TL0;
   ((char*)&x)[2]=TH0;
   ((char*)&x)[1]=count;
   //开始第二次测量
   led2=ON;
   timer_flag=0;
   count=0x00;
   TH1=0xF0;
   TL1=0x60+0x12;
   TH0=0x00;
   TL0=0x00;
   TR1=1;
   TR0=1;

   //确定小数点位置和显示的数
   if(x<1000)
   {
    led1=OFF;  //KHZ单位小数点灭
    j=4;   //小数点不显示
   }
   else if(x<10000)
   {
    led1=ON;  //KHZ单位小数点亮
    j=3;   //小数点位置
   }
   else if(x<100000)
   {
    led1=ON;
    j=2;
    x/=10;   //只要显示高四位
   }
   else if(x<1000000)
   {
    led1=ON;
    j=1;
    x/=100;
   }

   //将要显示的内容存放到显示缓存
   for(i=0;i<4;i++)
   {
    temp=x%10;
    disp_buffer=disp_data[temp];
    if(i==j) disp_buffer &= 0xFB; //小数点
    x/=10;
   }
   for(i=3;i;i--)
     if(disp_buffer==0xc0)
     disp_buffer=0xff;
    else
     break;
  }
}
}

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-5-18 23:31 , Processed in 0.402595 second(s), 24 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表