3880|7

3

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51单片机求功率因数疑问 [复制链接]

刚学 单片机,为什么不同的相位电压和电流出来的功率因数都是0.109?(测得功率因数是交流电压超前交流电流)


分为两部分 : 数码管的输出,和定时器的时间(自己写的数码管输出程序测试没有问题,就是output函数里的,用小于10的数测试)


定时器的时间
1.打开INT1中断,在下降沿的时候 打开T0定时器
2.INT0在下降沿的时候,T0定时器中断 求出中间的时间差
外接u给INT1,i给INT0

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit W=P2^7;
sbit D=P2^6;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
uchar code table1[]=//数码管显示字符
{0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef};
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
uchar i,b,c1,d1,e1;
uchar tt;
uint tx;
int  tl,th;
void delay(int);//延时函数
void output(float);//输出功率因数函数
void main()
{
float f,number;
double ty;
TMOD=0x01;
TH0=255;
TL0=255;
EX1=1;// Int1 中断
IT1=1;

ET0=0;//打开定时器0
TR0=0;
TF0=0;
EX0=1;
IT0=1;

EA=1;//int0中断
D1=1;
D3=1;
while(1){
if(tt==1)//如果定时器未溢出,计算时间
{
tx=th*256+tl;
ty=tx*0.01;//微妙换成毫秒应该*0.001的 但是数码管就第一个一直闪0 疑问,*0.01是可以出现正常数字的
}
D1=1;
D3=1;
f=50;
f=(1/f)*1000;//输入电压和电流频率转换为周期
number=(2*3.1415926*ty)/f;
number=cos(number);//求出功率因数
output(number);//输出功率因数
}
}
void timer2() interrupt 2
{
D1=0;
TH0=255;
TL0=255;
th=TH0;
tl=TL0;

tt=1;
}
void timer1() interrupt 1//T0定时器
{

D2=0;
TH0=255;
TL0=255;
tt=0;
}


void timer0() interrupt 0//INT0中断求间隔时间
{


th=th-TH0;
tl=tl-TL0;
ET0=0;
TR0=0;
tt=1;
D3=0;
}//我总觉得是这上面有问题

void output(float num)//输出函数
{
float a=num,c,d,e;//定义浮点型变量
W=1;//开启数码管位选择器
P0=0xfe;
W=0;
D=1;//分别在数码管上显示功率因数的每个位数
b=a/1;
for(i=0;i<10;i++)//通过相除与i比较,相同的将个位数从数组中选择表达出来
{
  if(b==i)
  {
   P0=table1;
   delay(200);
  }
}
D=0;
//以下小数点后三位数显示同理,先乘以10在减去原来的个位数,除以一分别显示
W=1;
P0=0xfd;
W=0;
D=1;
c=a-b;
c=c*10;
c1=c/1;
for(i=0;i<10;i++)
{
  if(c1==i)
  {
   P0=table;
   delay(200);
  }
}
D=0;
W=1;
P0=0xfb;
W=0;
D=1;
d=c-c1;
d=d*10;
d1=d/1;
for(i=0;i<10;i++)
{
  if(d1==i)
  {
   P0=table;
   delay(200);
  }
}
D=0;
W=1;
P0=0xf7;
W=0;

  D=1;
e=d-d1;
e=e*10;
e1=e/1;
for(i=0;i<10;i++)
{
  if(e1==i)
  {P0=table;
   delay(200);}
}
D=0;
}
void delay(uint detime)//延时函数
{
uint x,y;
for(x=detime;x>0;x--)
  for(y=detime;y>0;y--);
}

下面的是图片

P70328-203946.jpg (1.62 MB, 下载次数: 12)

P70328-203946.jpg

P70328-204020.jpg (2.27 MB, 下载次数: 13)

P70328-204020.jpg

P70328-204119.jpg (1.78 MB, 下载次数: 12)

P70328-204119.jpg
此帖出自51单片机论坛

最新回复

  详情 回复 发表于 2017-6-12 21:52
点赞 关注
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
求帮忙
此帖出自51单片机论坛
 
 
 

回复

767

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
功率因数一直都是常数的话 代码有问题
具体的一个节点一个节点的打断点仿真
然后根据公式计算 看哪里出了问题。
一下这么大一段代码贴出来别人很难帮你找问题所在
此帖出自51单片机论坛
 
个人签名物致DIY 欢迎你的加入~
QQ群:646461928 公众号:智物知心致成
小店
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 
皈依 发表于 2017-3-29 16:47
功率因数一直都是常数的话 代码有问题
具体的一个节点一个节点的打断点仿真
然后根据公式计算 看哪里出了 ...

好的
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

5
 
试问楼主程序调试好了吗,求指导
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

6
 
顶一下
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

7
 
楼主程序 周期为什么乘1000 呢  不解
中断求时间间隔那边有问题
此帖出自51单片机论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

8
 
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表