#include "math.h"
#include <spce061a.h>
extern void Write_Com(void);
extern void Write_Dat(void);
extern void Initial_map(void);
extern void Flash_Write_Word(unsigned int *addr,int data);
extern void Flash_Page(unsigned int addr);
extern void Initial_12864(void);
extern void HuiTu(void);
extern void Set_Map_Dat(int data);
extern void Display_BY_PAGE(unsigned int *uaddr0);
extern void Display_BY_PAGE1(unsigned int *uaddr1);
void DisplayDataMap(unsigned int *uaddr0,unsigned int *uaddr1);
void TimeA_Initial(void);
void dispaly(const char addr[],int n,unsigned int addrx); ////显示文字
int *p,*q,TTT,aa;
void IRQ5(void)__attribute__((ISR));
unsigned int ADC_DAT;
unsigned int dat,com,keystate=0,Key_Delay,Keybase=0,Key,Counter2,Counter3,Counter4=0,XN_P,POINT,X_ADDR;
float pr[128],*p0,*p1;
float const PI=3.14159;
const char START_M00[]=
{
"工业用电质量"
};
const char START_M01[]=
{
"检测仪"
};
const char XMC[]=
{
"许敏仓"
};
const char HXY[]=
{
"作者:"
};
const char FIRST_M1[]=
{
"1.基本数据分析"
};
const char FIRST_M2[]=
{
"2.谐波数据分析"
};
const char FIRST_M3[]=
{
"3.图形显示分析"
};
const char FIRST_M4[]=
{
"4.PC机数据通讯"
};
const char WV1[] =
{
"V"
};
const char WV2[] =
{
"mA"
};
const char WV3[] =
{
"KVA"
};
const char WV4[] =
{
"Kvar"
};
const char WV5[] =
{
"KW"
};
const char WV6[] =
{
"HZ"
};
const char max_m[] =
{
"Max:"
};
const char min_m[] =
{
"Min:"
};
const char FIRST_YN1[]=
{
"电压有效值:"
};
const char FIRST_LN1[]=
{
"电流有效值:"
};
const char SHUJU_YG0[]=
{
"有功功率:"
};
const char SHUJU_WG0[]=
{
"无功功率:"
};
const char SHUJU_SZ0[]=
{
"视在功率:"
};
const char SHUJU_YS0[]=
{
"功率因数:"
};
const char ZHIHOU1[] =
{
"电压滞后"
};
const char ZHIHOU2[] =
{
"电压超前"
};
const char TiShi2[]=
{
"如图所示"
};
const char DY_TX[]=
{
"电压图形:"
};
const char DL_TX[]=
{
"电流图形:"
};
const char ANJ[]=
{
"任意键显示:"
};
const char FIRST_MM3[]=
{
"频率监测"
};
const char FIRST_PLZ[]=
{
"当前频率:"
};
const char BO_CI[]=
{
"谐波次:"
};
const char BO_LV[]=
{
"含有率:"
};
const char BO_BI[]=
{
"百分比:"
};
const char BO_XZ[]=
{
"有效值:"
};
const char D_YXB[]=
{
"1.电压谐波分析"
};
const char D_LXB[]=
{
"2.电流谐波分析"
};
const char Ti_CY[]=
{
"正在采样"
};
void zhaomax_min(int n,int b)
{
int i;
float max,min;
max=min=pr[n*6];
for(i=0;i<=b;i++)
{
if(max<pr[n*6+i]) max=pr[n*6+i];
if(min>pr[n*6+i]) min=pr[n*6+i];
}
pr[60+n]=max;
pr[70+n]=min;
}
void IRQ5( void)
{
asm("int off");
if(*P_INT_Ctrl&0x0004)
{
Counter4++;
if(Counter4==5)
{
Counter4=0;
if(Counter3==0)
{ yinshi(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
if(Counter3==1)
{ shuju_xianshi1(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
if(Counter3==2)
{ shuju_xianshi2(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
if(Counter3==3)
{ you_gong(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
if(Counter3==4)
{ shi_gong(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
if(Counter3==5)
{ wu_gongxian(Counter3,Counter2++); if(Counter2==40) Counter2=1; }
}
*P_INT_Clear=0x0004;
}
else
*P_INT_Clear=0x0008;
asm("int irq");
}
void dingshichushihua(int data)
{ Counter3=data;
Counter4=Counter2=0;
*P_TimerB_Ctrl=C_SourceB_2Hz;
*P_INT_Ctrl=C_IRQ5_2Hz;
asm("int irq");
}
void moni_yinshi()
{ int i;
pr[0*6]=220.559;
pr[0*6+1]=221.745;
pr[0*6+2]=224.026;
pr[0*6+3]=220.657;
pr[0*6+4]=218.079;
pr[0*6+5]=221.084;
pr[0*6+6]=227.985;
pr[0*6+7]=230.140;
pr[0*6+8]=221.874;
pr[0*6+9]=229.587;
for(i=10;i<40;i++)
pr[0*6+i]=pr[0*6+i-10]-1*(i%2)*pr[0*6]*0.07;
}
void moni_dianya()
{ int i;
pr[1*6]=220.559;
pr[1*6+1]=221.745;
pr[1*6+2]=224.026;
pr[1*6+3]=220.657;
pr[1*6+4]=218.079;
pr[1*6+5]=221.084;
pr[1*6+6]=227.985;
pr[1*6+7]=230.140;
pr[1*6+8]=221.874;
pr[1*6+9]=229.587;
for(i=10;i<40;i++)
pr[1*6+i]=pr[1*6+i-10]-1*(i%2)*3.8;
}
void moni_dianliu()
{ int i;
pr[2*6]=220.559;
pr[2*6+1]=221.745;
pr[2*6+2]=224.026;
pr[2*6+3]=220.657;
pr[2*6+4]=218.079;
pr[2*6+5]=221.084;
pr[2*6+6]=227.985;
pr[2*6+7]=230.140;
pr[2*6+8]=221.874;
pr[2*6+9]=229.587;
for(i=10;i<40;i++)
pr[2*6+i]=pr[2*6+i-10]-1*(i%2)*pr[2*6]*0.06;
}
void moni_yougong()
{ int i;
pr[1*6]=220.559;
pr[1*6+1]=221.745;
pr[1*6+2]=224.026;
pr[1*6+3]=220.657;
pr[1*6+4]=218.079;
pr[1*6+5]=221.084;
pr[2*6]=1.559;
pr[2*6+1]=1.745;
pr[2*6+2]=1.026;
pr[2*6+3]=1.657;
pr[2*6+4]=1.079;
pr[2*6+5]=1.084;
for(i=0;i<6;i++)
pr[3*6+i]=pr[1*6+i]*pr[2*6+i]*0.92;
for(i=7;i<40;i++)
pr[3*6+i]=pr[3*6+i-7]-1*(i%2)*pr[3*6]*0.04;
}
void moni_shi_gong()
{ int i;
pr[1*6]=220.559;
pr[1*6+1]=221.745;
pr[1*6+2]=224.026;
pr[1*6+3]=220.657;
pr[1*6+4]=218.079;
pr[1*6+5]=221.084;
pr[2*6]=1.559;
pr[2*6+1]=1.745;
pr[2*6+2]=1.026;
pr[2*6+3]=1.657;
pr[2*6+4]=1.079;
pr[2*6+5]=1.084;
for(i=0;i<6;i++)
pr[4*6+i]=pr[1*6+i]*pr[2*6+i];
for(i=7;i<40;i++)
pr[4*6+i]=pr[3*6+i-7]-1*(i%2)*pr[4*6]*0.04;
}
void moni_wu_gongxian()
{ int i;
pr[1*6]=220.559;
pr[1*6+1]=221.745;
pr[1*6+2]=224.026;
pr[1*6+3]=220.657;
pr[1*6+4]=218.079;
pr[1*6+5]=221.084;
pr[2*6]=1.559;
pr[2*6+1]=1.745;
pr[2*6+2]=1.026;
pr[2*6+3]=1.657;
pr[2*6+4]=1.079;
pr[2*6+5]=1.084;
for(i=0;i<6;i++)
pr[5*6+i]=pr[1*6+i]*pr[2*6+i]*0.39;
for(i=7;i<40;i++)
pr[5*6+i]=pr[3*6+i-7]-1*(i%2)*pr[5*6]*0.04;
}
void START_MENU(void)//显示开始菜单
{
Initial_12864();
com=0x0100;////清屏
Write_Com();
dispaly(START_M00,12,0x8100);//最后一个参数与硬件接线有关。
dispaly(START_M01,6,0x9200);//最后一个参数与硬件接线有关。
dispaly(HXY,6,0x9800);
dispaly(XMC,6,0x9b00);
}
void dispaly(const char addr[],int n,unsigned int addrx) ////显示文字
{
int u;
const char *p;
p=addr;
com=addrx;
Write_Com();
for(u=0;u<n;u++)
{
dat=*p;
dat=dat<<8;///a口高8位,如果硬件接线更改,此语句随之更改。
Write_Dat();
p++;
}
}
void xianshifudianshu(float fdat,unsigned int addrx,unsigned int n)////三位整数+n位小数(N=3或4)
{
long int xsfds,xsfds1;
int flag,flag_45;
int d[7];
float ft;
fdat*=10000;
xsfds=(long int)fdat;
ft=(float)xsfds;
ft=fdat-ft;
if(ft>0.500)flag_45=1; //////如果相差大于0.5则进1
com=addrx;
Write_Com();
if(xsfds<0) ////如果数据小于0,则在数据的前面加"-"
{
dat=0x2d00;
Write_Dat();
xsfds=-xsfds;
}
if(xsfds>10000000);
else
{
xsfds1=xsfds/1000000;
xsfds-=xsfds1*1000000;
d[0]=(int)xsfds1;
xsfds1=xsfds/100000;
xsfds-=xsfds1*100000;
d[1]=(int)xsfds1;
xsfds1=xsfds/10000;
xsfds-=xsfds1*10000;
d[2]=(int)xsfds1;
xsfds1=xsfds/1000;
xsfds-=xsfds1*1000;
d[3]=(int)xsfds1;
xsfds1=xsfds/100;
xsfds-=xsfds1*100;
d[4]=(int)xsfds1;
xsfds1=xsfds/10;
xsfds-=xsfds1*10;
d[5]=(int)xsfds1;
if(flag_45==1)xsfds+=1;
d[6]=(int)xsfds;
for(flag_45=0;flag_45<n+2;flag_45++)
{
if(d[n+2-flag_45]==10)
{
d[n+2-flag_45]=0;
d[n+1-flag_45]+=1;
}
}
flag=0;
for(flag_45=0;flag_45<n+3;flag_45++)
没有合适的资源?快使用搜索试试~ 我知道了~
电能质量检测程序.rar
共33个文件
obj:4个
asm:4个
lst:4个
4星 · 超过85%的资源 需积分: 10 55 下载量 74 浏览量
2010-05-13
10:49:43
上传
评论 4
收藏 220KB RAR 举报
温馨提示
可以对 电流 电压 功率 谐波进行分析,并通过lcd进行图形和数据显示!!!
资源推荐
资源详情
资源评论
收起资源包目录
电能质量检测程序.rar (33个子文件)
程序06210813
main.c 27KB
asm.asm 12KB
dyjc.h 77B
dyjc.set 779B
dyjc.env 842B
dyjc.spj 3KB
Desktop.ini 78B
dyjc.rc 82B
Resource.asm 131B
math.h 10KB
dyjc.opt 1KB
SPCE061A.inc 13KB
Resource.inc 114B
Debug
Resource.obj 3KB
dyjc.S37 90KB
dyjc.sbm 51KB
dyjc.sym 23KB
irq.obj 19KB
main.asm 274KB
dyjc.ary 770B
asm.lst 50KB
main.obj 227KB
main.lst 949KB
dyjc.map 164KB
irq.lst 25KB
asm.obj 53KB
dyjc.smy 4KB
Resource.lst 596B
dyjc.lik 4KB
irq.asm 818B
Device.env 2KB
SPCE061A.h 18KB
Makefile 3KB
共 33 条
- 1
wanli1987
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页