📄 df5.c
字号:
#include <At89x55.h>
//#include <reg52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
#define VOD 2000
#define ZVD 1 /*自检交流电压值下限*/
#define SETD_PI (uint xdata *)0x1e00 //led enable
#define JDQ XBYTE[0xa000] //377 address
#define WC_8255 XBYTE[0xef7f]
#define WD_8255 XBYTE[0xef7c]
extern void dog(void);
extern void lcd_int(void);
extern void wrfx(void); //lcd
extern void lcd_zl(void); //display
extern void lcd_zs(void); //load int
uchar nnt;
uchar zzm; //q
uchar guagzu;
uchar bdata statel;
sbit s0=statel^0; /*频率 1:ok*/
sbit s1=statel^1; /*波动 1:ok*/
sbit s2=statel^2; /*电压 1:ok*/
sbit s3=statel^3; /*燃烧 1: 着火;0:灭火*/
sbit s4=statel^4; /*送煤 1:开启;0:关闭*/
sbit s5=statel^5; /*观察 1:偷看;0:不偷看*/
sbit s6=statel^6; /*强度 1:ok*/
sbit s7=statel^7; /*状态 1: 正常 0:不正常*/
sbit P3_2=P3^2; //Input 送煤
sbit P3_5=P3^5; //
bit b_fsb;
bit b_xj;
bit b_timer1;
uchar data timer1;
extern uchar data zj;
uchar time_zh,time_xh;
uchar jsq1,jsq2;
uchar plus;
uchar da;
uint fr_up,fr_do,fr_sa;
uint fr_te,fr_qz;
uint ss_up,ss_do,ss_sa;
uint ss_te,ss_qz;
uint ss5;
uchar wa_up,wa_do,wa_sa;
uint vo_up,vo_do,vo_sa;
uint zv_sa;
uchar dss;
uint xdata ss[10];
/////////////////////////////////////////////
int_temer1() interrupt 3 using 1
{
ET1=0;
TR1=0;
timer1++;
if(timer1>=47)
{
TR0=0;
fr_te=(TH0*256)+TL0;
fr_te=fr_te*2;
TH0=0;
TL0=0;
TR0=1;
b_timer1=0;
timer1=0;
}
TH1=-(10000/256);
TL1=-(10000%256);
TR1=1;
ET1=1;
}
delay_y(uint i)
{
uint k;
uchar j;
for(k=0;k<i;k++)
{
dog();
for(j=0;j<100;j++);
}
}
init()
{
dog();
TMOD=0x15;
T2CON=0x34;
TH2=0xff;
TL2=0xdc;
RCAP2H=0xff;
RCAP2L=0xdc;
TR2=1;
SCON=0x50;
TH1=-(10000/256);
TL1=-(10000%256);
TR1=1;
ET1=1;
EA=1;
P3_5=0;
statel=0xcf;
b_fsb=1;
JDQ=(JDQ&0xfc)|0x01;
dss=0;
jsq1=0;
jsq2=0;
da=0;
}
uchar wa(uint *array,uchar n)
{
uchar num;
uint max,min;
uint *p,*array_end;
array_end=array+n;
max=min=*array;
for (p=array+1;p<array_end;p++)
{
if (*p>max) max=*p;
else if (*p<min) min=*p;
}
if(min>0) num=max/min;
return (num);
}
tz()
{
long tt1,tt2;
uint i;
dog();
i=ss_te-500;
if(i>ss_te) ss_sa=1;
else ss_sa=i;
tt1=ss_qz;
tt1*=60;
tt1/=100;
tt2=ss_sa;
tt2*=40;
tt2/=100;
tt1+=tt2;
ss_sa=tt1;
ss_qz=ss_sa;
ss[dss]=ss_sa;
dss++;
if(dss>9) dss=0;
if(ss_sa<200) wa_sa=0;
else if(ss_sa<300) wa_sa=1;
else if(ss_sa<400) wa_sa=2;
else wa_sa=wa(ss,10);
/*
i=ss5-500;
if(i>ss5) ss5=0;
else ss5=i;
ss5=ss5/2;
if((ss_sa!=0)&&(ss5!=0))
wa_sa=ss_sa/ss5;
*/
tt1=fr_qz;
tt1*=50;
tt1/=100;
tt2=fr_sa;
tt2*=50;
tt2/=100;
tt1+=tt2;
fr_sa=tt1;
fr_qz=fr_sa;
}
input()
{
uchar i;
uchar d[8];
uint *pi;
do
{
dog();
SBUF=0xaa;
while(TI==0);
TI=0;
while(RI==0);
RI=0;
}while((SBUF^0xbb)!=0);
for(i=0;i<8;i++)
{
while(RI==0);
RI=0;
d[i]=SBUF;
}
SBUF=da;
while(TI==0);
TI=0;
pi=(uint *)d;
ss_te=*pi;
pi++;
ss5=*pi;
pi++;
zv_sa=*pi;
pi++;
vo_sa=*pi;
fr_sa=fr_te;
tz();
if(P3_2==0) s4=0;
else s4=1;
if(zj==0x55)
{
ss_sa=6000;
ss5=400;
vo_sa=6000;
s4=1;
fr_sa=100;
}
}
uchar zhm()
{
long lcc;
uint av,cc,dd;
uchar fb,ssb;
av=(fr_up-fr_do)/2;
cc=av-fr_do;
if(cc==0) cc=1;
if(fr_sa<=fr_do) fb=0;
else if(fr_sa<fr_up)
{
if(fr_sa<av)
{
dd=(av-fr_sa)*100/cc;
fb=100-dd;
}
else if(fr_sa==av) fb=100;
else
{
dd=(fr_sa-av)*100/cc;
fb=dd;
}
}
else fb=0;
if(ss_sa<=ss_do) ssb=0;
else if(ss_sa<6000)
{
av=6000-ss_do;
if(av==0) av=1;
lcc=(ss_sa-ss_do);
lcc*=100;
dd=lcc/av;
ssb=dd;
}
else ssb=100;
cc=fb;
dd=ssb;
av=cc*40/100+dd*60/100;
return av;
}
comp()
{
static uchar nn;
dog();
if(s3==1)
{
if(ss_sa>ss_do) s6=1;
else s6=0;
}
else
{
if(ss_sa>ss_up) s6=1;
else s6=0;
}
if(vo_sa>VOD)
{
s2=1;
nn=0;
}
else
{
nn++;
if(nn>3)
{
nn--;
s2=0;
}
}
if((fr_sa>fr_do)&&(fr_sa<fr_up)) s0=1;
else s0=0;
//if((wa_sa>=wa_do)&&(wa_sa<wa_up)) s1=1;
if(wa_sa>=wa_do) s1=1;
else s1=0;
if((s0==1)&(s1==1)&(s6==1)) b_fsb=1;
else b_fsb=0;
if(s2==1)
{
if(s4==1)
{
if(b_fsb==1)
{
jsq1++;
if(jsq1>(time_zh*2))
{
jsq1=0;
s3=1;
s5=0;
s7=1;
}
}
else
{
jsq2++;
if(jsq2>(time_xh*4))
{
jsq2=0;
s3=0;
s5=0;
s7=1;
guagzu=5;
}
}
}
else
{
if(b_fsb==1)
{
s3=0;
s5=1;
s7=1;
guagzu=10;
}
else
{
s3=0;
s5=0;
s7=1;
guagzu=5;
}
}
}
else
{
s3=0;
s5=0;
s7=0;
guagzu=0;
}
zzm=zhm();
}
output()
{
uchar i;
if(zj==0x55)
{
JDQ=0x01;
da=31;
}
else
{
if(s3==1) i=0x01;
else i=0x03;
JDQ=i;
if(s3==1)
{
if(ss_sa<500) da=5;
else if(ss_sa<1000) da=10;
else if(ss_sa<3000) da=15;
else if(ss_sa<5000) da=25;
else da=31;
}
else da=0;
}
}
/*
diss(long ii)
{
uchar *pi;
uchar *pd;
uchar i;
uchar d[3];
dog();
pi=d;
i=ii/100000;
*pi=i;
*pi=*pi<<4;
i=ii/10000%10;
*pi=*pi+i;
pi++;
i=ii/1000%10;
*pi=i;
*pi=*pi<<4;
i=ii/100%10;
*pi=*pi+i;
pi++;
i=ii/10%10;
*pi=i;
*pi=*pi<<4;
i=ii%10;
*pi=*pi+i;
pi=&WD_8255;
pd=&d[2];
for(i=0;i<3;i++)
{
*pi=*pd;
pi++;
pd--;
}
}
*/
/*
zc()
{
diss(ss_sa);
delay_y(2000);
diss(ss_up);
delay_y(2000);
diss(fr_sa);
delay_y(2000);
diss(wa_sa);
delay_y(2000);
diss(statel);
delay_y(2000);
diss(vo_sa);
delay_y(2000);
diss(da);
delay_y(2000);
}
*/
s485()
{
delay_y(500);
}
void main()
{
uchar ww;
lcd_zs();/*读上下限值*/
init();
lcd_int();
wrfx();
WC_8255=0x80;
while(1)
{
s485();
input();
comp();
output();
nnt++;
if(nnt>2)
{
ww=wa_sa;
wa_sa=zzm;
lcd_zl();
wa_sa=ww;
nnt=0;
}
/* zc(); */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -