📄 bdj_rm10.c
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LABA= P3^0;
sbit jp15= P1^5;
sbit jp14= P1^4;
sbit jp13= P1^3;
sbit jp12= P1^2;
///////////////////////////////
uchar code xszf[]={0x09,0xeb,0x91,0x83,0x63,0x07,0x05,0xab,0x01,0x03,0x21,0x45,0x1d,0xc1,0x15,0x35,0xff}; //0---f短码
uchar data gw,sw,bw,qw,ww,sww;// BCD码
//uchar xdata gw,sw,bw,qw,ww,sww;// BCD码
uchar data ls1,ls3,jswc,y;//jswc=计算计算误差
uint data ls2,ls4;
uint data cs_diany,cs_changs,cs_dianl; //U,I,C
//uint xdata cs_diany,cs_changs; //U,I,C
//unsigned long xdata fh;//w,fh
unsigned long data fh,glz,sdz,err;//w,fh
uchar data cs_zhuans,n,miao; //cs_zhuansn=n转数,//miao=0.5秒标记
//float xdata err,glz,cs_dianl;
//float data err;
bit bdata glbj;//功率标记
bit bdata csbj;//参数标记
bit bdata wcbj;//误差标记
bit bdata dnbj;//电能标记
bit bdata miao_1,ks,dl,fusbj;//1秒标记
////////////////////////////////
void gldisp(void);//功率显示
void cshdisp(void);//初始化显示
void csh8253(void);// 初始化8253
void ys(void);//延时
//void ys0(void);
uchar jp(void);//键盘扫描程序
extern float modf(float x,float *ip);
void csh8031(void);//初始化8031
void cshbl(void);//初始化全局变量
void gl(void);//功率服务程序
void cs(void);//参数输入程序
void wc(void);//误差计算程序
void wcbcd(void);
void wcdisp(void);
void jssdz(void);
void dn(void);//电能计算程序
void dnbcd(void);
void glbcd(void);//转换程序
void csbcd(void);
void csdisp(void);
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
void int0()interrupt 0 using 1
{ EX0=0;//禁止中断INT0
if(ks)
{ XBYTE[0xbfff]=0x40;
XBYTE[0xbfff]=0x80;
ls1=XBYTE[0xbffd];
ls2=XBYTE[0xbffd];
ls3=XBYTE[0xbffe];
ls4=XBYTE[0xbffe];
miao_1=1;
ks=0;
}
n--;
XBYTE[0xdffc]=xszf[n%10];
if(n==0)
{ LABA=0;
XBYTE[0xbfff]=0x40;
XBYTE[0xbfff]=0x80;
ls1=XBYTE[0xbffd];
ls2=XBYTE[0xbffd];
ls3=XBYTE[0xbffe];
ls4=XBYTE[0xbffe];
XBYTE[0xdffc]=xszf[n];
n=cs_zhuans;
jswc=1;
}
EX0=1;//允许中断INT0
}
//////////////////////////////////////////T0
void timerl()interrupt 1 using 1
{ ET0=0; //禁止中断T0
TL0=0xb1;TH0=0x3c;ET0=1;miao--;
if(miao==0)
{ XBYTE[0xbfff]=0x40;
XBYTE[0xbfff]=0x80;
ls1=XBYTE[0xbffd];
ls2=XBYTE[0xbffd];
ls3=XBYTE[0xbffe];
ls4=XBYTE[0xbffe];
miao=2;miao_1=!miao_1;
}
}
//INTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTINTIINTINTINTINTINTINTINTINTINTINTINT
//ENDEDNENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSSHCSHCSHCSSHCSSCHCSSHCSH
//CSHCSHCSHCSHCSHCCSHCSHCSSHCSHCSHCCSHCSHCHSCHSCSHCSHCCSHCHCSHCSHCSSHCSHCSHCSHCCSHCSHCSH
void cshdisp(void)
{ gw=0;sw=0;bw=0;qw=0;ww=0;sww=0;
gldisp();
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSSHCSHCSH
void csh8031(void)
{ TMOD=0x55; // 定时/计数器方式寄存器TMOD
IP=0x0a; //中断优先级控制寄存器IP
TCON=0x15; //定时/计数器控制寄存器TCON
TL0=0xb1; //////////0xffff-50000=0x3caf
TH0=0x3c;
IE=0x83; //中断允许控制计存器IE
}
//CSHCSHCSHCSHCSHCSHCSHCSHCHSCHSCHSCHSCHCSHCSHCSHCSH
void cshbl(void) //初始化全局变
{ glbj=1;dnbj=0;csbj=0;wcbj=0;
cs_diany=200;cs_dianl=50;
cs_changs=3600; cs_zhuans=1;
fh=0;y=0;
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSCHCSHCSHCSHCSHCSHCSH
void csh8253(void)
{ XBYTE[0xbfff]=0x36; //写控制通道0
XBYTE[0xbffc]=0xc3; //写CR0L,CR=0xc350(50000)
XBYTE[0xbffc]=0x50; //写CR0H
XBYTE[0xbfff]=0x74; //写控制通道1 //=76
XBYTE[0xbffd]=0x88; // 写CR1L,CR=0x1388 5000 )
XBYTE[0xbffd]=0x13; //写CR1H
XBYTE[0xbfff]=0xb4; //写控制通道2//=b6
XBYTE[0xbffe]=0xff; // 写CR2L,CR=0xFFFF(65535)
XBYTE[0xbffe]=0xff; //写CR2H
}
//CSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSHCSH
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
void ys(void)
{
uint a=0xff;
while (a)
{ uint b;b=0x20;
while(b){b--;}
a--;
}
}
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
uchar jp(void)
{uchar i;
////////////////////
XBYTE[0xdffe]=0x00;
P1=0xff;
if((P1|0xc3)==0xff)
{
i=0xff; //无键按下返回i=0xff
return(i);
}
///////////////////
XBYTE[0xdffe]=0xfb;//Q2=0
P1=0xff;
if(jp12==0)
{ ys();
if(jp12==0)
{
while(jp12==0){_nop_();}
i=1;LABA=0; ys();LABA=1;
return(i);
}
}//i=1
if(jp13==0)
{ys();
if(jp13==0)
{while(jp13==0){_nop_();}
i=2;LABA=0;ys();LABA=1;
return(i);
}
}//i=2
if(jp14==0)
{ ys();
if(jp14==0)
{while(jp14==0){_nop_();}
i=3;LABA=0;ys();LABA=1;
return(i);
}
}//i=3
if(jp15==0)
{ ys();
if(jp15==0)
{while(jp15==0){_nop_();}
i=11;LABA=0;ys();LABA=1;
return(i);
}
}//i=11*/
/////////////////////////
XBYTE[0xdffe]=0xfe;//Q0=0
if(jp15==0)
{ ys();
if(jp15==0)
{while(jp15==0){_nop_();}
i=12;LABA=0;ys();LABA=1;
return(i);
}
}//i=12
//////////////////////////////
XBYTE[0xdffe]=0x7f;//Q7=0
if(jp15==0)
{ ys();
if(jp15==0)
{while(jp15==0){_nop_();}
i=13;LABA=0;ys();LABA=1;
return(i);
}
}//i=13
////////////////////////////////
XBYTE[0xdffe]=0xef;//Q4=0
if(jp12==0)
{ ys();
if(jp12==0)
{
while(jp12==0){_nop_();}
i=4;LABA=0;ys();LABA=1;
return(i);
}
}//i=4
if(jp13==0)
{ys();
if(jp13==0)
{while(jp13==0){_nop_();}
i=5;LABA=0;ys();LABA=1;
return(i);
}
}//i=5
if(jp14==0)
{ ys();
if(jp14==0)
{while(jp14==0){_nop_();}
i=6;LABA=0;ys(); LABA=1;
return(i);
}
}//i=6
if(jp15==0)
{ ys();
if(jp15==0)
{while(jp15==0){_nop_();}
i=10;LABA=0;ys();LABA=1;
return(i);
}
}//i=10
//////////////////////////////
XBYTE[0xdffe]=0xbf;//Q6=0
if(jp12==0)
{ ys();
if(jp12==0)
{
while(jp12==0){_nop_();}
i=7;LABA=0;ys();LABA=1;
return(i);
}
}//i=7
if(jp13==0)
{ys();
if(jp13==0)
{while(jp13==0){_nop_();}
i=8;LABA=0;ys();LABA=1;
return(i);
}
}//i=8
if(jp14==0)
{ ys();
if(jp14==0)
{while(jp14==0){_nop_();}
i=9;LABA=0;ys();LABA=1;
return(i);
}
}//i=9
if(jp15==0)
{ ys();
if(jp15==0)
{ while(jp15==0){_nop_();}
i=0;LABA=0;ys();LABA=1;
return(i);
}
}//i=0
i=0xff;
return(i);
}
//()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGL
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGL
void gldisp(void)
{if(sww==0)
{sww=16;
if(ww==0)
{ww=16;
if(qw==0)
{qw=16;
if(bw==0)
{bw=16;}
}}}
XBYTE[0xdfff]=xszf[gw];
XBYTE[0xdff8]=(xszf[sw]&0xfe);
XBYTE[0xdff9]=xszf[bw];
XBYTE[0xdffa]=xszf[qw];
XBYTE[0xdffb]=xszf[ww];
XBYTE[0xdffc]=xszf[sww];
}
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLG
void glbcd(void)
{sww=((glz%1000000))/100000;
ww=((glz%100000))/10000;
qw=((glz%10000))/1000;
bw=((glz%1000))/100;
sw=((glz%100))/10;
gw=glz%10;
gldisp();
}
//GLGLGLGLGGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLG
void gl(void)
{ uchar x;
uint p8253_1,p8253_2,ls5=0,ls6=0;
unsigned long data p8253_22;
while(1)
{if(miao_1)
{ miao_1=!miao_1;
ls2=ls2<<8;
p8253_1=ls2|ls1;
p8253_1=5000-p8253_1;
ls4=ls4<<8;
p8253_2=ls4|ls3;
p8253_2=0xffff-p8253_2;
p8253_22=p8253_2-ls6;
p8253_22=(p8253_22*5000);
fh=p8253_1;
fh=(fh+p8253_22);
p8253_22=ls5;//-ls5
fh=fh-p8253_22;
ls5=p8253_1;
ls6=p8253_2;
//glz=((cs_diany*cs_dianl*fh)/10000);//电流应多除10
glz=fh*100/277;
glbcd();
}
x=jp();
if(x==0){glz=x;glbcd();}
if(x==1){glz=x;glbcd();}
if(x==2){glz=x;glbcd();}
if(x==3){glz=x;glbcd();}
if(x==4){glz=x;glbcd();}
if(x==5){glz=x;glbcd();}
if(x==6){glz=x;glbcd();}
if(x==7){glz=x;glbcd();}
if(x==8){glz=x;glbcd();}
if(x==9){glz=x;glbcd();}
if(x==10){ csbj=1;glbj=0;return;}
if(x==11){ wcbj=1;glbj=0;return;}
if(x==12){ dnbj=1;glbj=0;return;}
}
}
//GLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLGLLGLGLGLGLGLGLGLGLGLGLGL
//ENDEMDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDENDEND
//CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS
//CSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCSCS
void csbcd(void)
{sww=((ls2%1000000))/100000;
ww=((ls2%100000))/10000;
qw=((ls2%10000))/1000;
bw=((ls2%1000))/100;
sw=((ls2%100))/10;
gw=ls2%10;
}
///////////
void csdisp(void)
{if(sww==0)
{sww=16;
if(ww==0)
{ww=16;
if(qw==0)
{qw=16;
if(bw==0)
{bw=16;
if(dl)
{if(sw==0)
{sw=16;}
}}}}}
XBYTE[0xdfff]=xszf[gw];
XBYTE[0xdff8]=xszf[sw];
XBYTE[0xdff9]=xszf[bw];
XBYTE[0xdffa]=xszf[qw];
XBYTE[0xdffb]=xszf[ww];
}
///////////
void cs(void)
{ uchar x;
EX0=0;//关闭INT0禁止校验
ET0=0;//允许T0中断
while(1)
{ bit bdata bj=1;dl=1;
/*while(1)
{ ls2=cs_diany;//U
csbcd();csdisp();
XBYTE[0xdffc]=0x49;//U=0x49
x=jp();
while(bj)
{if(x==0){cs_diany=x;bj=0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -