📄 lg.cpp
字号:
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <alloc.h>
#include <math.h>
#include <time.h>
#define MMM 5 /*N the dot's num to be paint once */
#define PI 3.14159265
#define Fs 100
#define SIZE 2
#define SIZEE 4
#define N 4500
#define KG 2.184
#define NN 0.0833
#define INTEVAL 5
#define INITVALU 80
long position=0;
float degree[700]; /*times:time data degree:degree data*/
double times[700];
int bian=1,ndig=1,dec,sign;
float sr[N],si[N],xi,yi;
unsigned int far *buf=(unsigned int *)0xd0000000;
unsigned int far *buff=(unsigned int *)0xd0000000;
//unsigned int *buf;
//unsigned int *buff;
//unsigned int offset1,seg1;
//*************************************
void painter1(void)
{
int i;
float degree1;
/*----Next to ping hua chu li---*/
degree1=degree[bian];
// degree1=(69.0*degree[bian]+4.0*degree[bian+1]-6.0*degree[bian+2]+4.0*degree[bian+3]-degree[bian+4])/70.0;
// degree1[1]=(2.0*degree[bian]+27.0*degree[bian+1]+12.0*degree[bian+2]-8.0*degree[bian+3]+2.0*degree[bian+4])/35.0;
// degree1[2]=((-3.0)*degree[bian]+12.0*degree[bian+1]+17.0*degree[bian+2]+12.0*degree[bian+3]-3.0*degree[bian+4])/35.0;
// degree1[3]=(2.0*degree[bian]-8.0*degree[bian+1]+12.0*degree[bian+2]+27.0*degree[bian+3]+2.0*degree[bian+4])/35.0;
// degree1[4]=((-1.0)*degree[bian]+4.0*degree[bian+1]-6.0*degree[bian+2]+4.0*degree[bian+3]+69.0*degree[bian+4])/70.0;
// printf(" time=%f Second, T2=%f degree\n ",degree1[0],degree1[1]);
// for(i=0;i<5;i++)
lineto(80+(times[bian]/60.0)*20.0,440.0-(degree1-1000.0)*0.32);
bian=bian+1;
}
/*------PAINT THE FIRST 12 MINUTES'GRAPH-------*/
int painter0()
{
int gdriver=DETECT,gmode,c,flag1=0,flag2=0;
int errorcode;
char *name,*time1;
float x;
time_t ftime,stime;
double t;
struct viewporttype far *view1,*view2;
//******************************************
/* buff=(unsigned int *)malloc(40*1024);
if(buff==NULL)
{ printf("not enough memory to allocate buf\n");
return 0; }
buf=buff;
seg1=FP_SEG(buff); //get buf's segment to segment
offset1=FP_OFF(buff); //get buf's offset to offset
*/
// printf("seg=%x,offset1=%x\n",seg1,offset1);
// printf("after allote memory to buf,the rest available memory is:%lu bytes\n",(unsigned long) coreleft());
// getch();
// if(registerfarbgidriver(EGAVGA_driver_far)<0) exit(1);
// if(registerfarbgifont(triplex_font_far)<0) exit(1);
initgraph(&gdriver, &gmode, "c:\\bc31\\bgi");
// read result of initialization
errorcode = graphresult();
if (errorcode != grOk) // an error occurred
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
// getch();
// exit(1);
return 0; // return with error code
}
setviewport(0,0,getmaxx(),getmaxy(),1);
setfillstyle(SOLID_FILL,LIGHTBLUE);
bar3d(0,0,getmaxx(),getmaxy(),getmaxx()/4,1);
getviewsettings(view1); //save the first viewportsettings
setcolor(YELLOW);
outtextxy(200,10,"DYMATIC GRAPH DISPLAY");
line(0,25,640,25);
line(0,75,640,75);
// setviewport(view1->left,view1->top,view1->right,view1->bottom,1);
//---------------------------------------------------
outtextxy(10,450,"1000");
putpixel(80,440,GREEN);
outtextxy(10,280,"1500");
putpixel(80,280,GREEN);
outtextxy(10,110,"2000");
putpixel(80,110,GREEN);
outtextxy(60,100,"degree(c)");
outtextxy(510,35,"DATE:");
// outtextxy(556,35,date1);
outtextxy(30,35,"YAND:");
outtextxy(470,55,"NUMBER_LU:");
// outtextxy(560,55,luhao);
outtextxy(30,55, "TIME:");
outtextxy(275,35,"COST_YANG:");
outtextxy(250,55,"STEEL_DEGREE:");
outtextxy(80,460,"0");
putpixel(80,440,GREEN);
outtextxy(140,460,"3");
putpixel(140,440,GREEN);
outtextxy(200,460,"6");
putpixel(200,440,GREEN);
outtextxy(260,460,"9");
putpixel(260,440,GREEN);
outtextxy(320,460,"12");
putpixel(320,440,GREEN);
outtextxy(380,460,"15");
putpixel(380,440,GREEN);
outtextxy(440,460,"18");
putpixel(440,440,GREEN);
outtextxy(500,460,"21");
putpixel(500,440,GREEN);
outtextxy(550,430,"TIME(min)");
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,34,150,48,0,1); //display YAND
bar3d(355,34,435,48,0,1); //DISPLAY COST_YANG
bar3d(355,54,435,68,0,1); //display steel_degree
bar3d(50,110,550,450,0,1);
moveto(80,440);
line(80,440,550,440);
line(80,440,80,120);
moveto(80,440-(1340+INITVALU-1000)*0.32);
ftime=time(NULL);
t=difftime(time(NULL),ftime);
time1=ecvt(t,ndig,&dec,&sign);
bar3d(70,51,150,65,0,1);
outtextxy(75,55,time1);
moveto(80,440-(1340+INITVALU-1000)*0.32);
x=0.0;xi=80.0;yi=440.0-(1340+INITVALU-1000)*0.32;
/* if(t<=12*60.0)
{
do
{sleep(INTEVAL);
x+=NN;
yi=440-(1340+INITVALU+18.4*x-1000)*0.32;
xi=80+20*x;
lineto(xi,yi);
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,51,150,65,0,1);
outtextxy(75,55,ecvt(difftime(time(NULL),ftime),ndig,&dec,&sign));
if(difftime(time(NULL),ftime)>=9.0 && flag1==0)
{ndig+=1;flag1=1;}
if(difftime(time(NULL),ftime)>=95.0 && flag2==0)
{ndig+=1;flag2=1;}
moveto(xi,yi);
}
while(difftime(time(NULL),ftime)<(6*60));
// while(difftime(time(NULL),ftime)<=3*60.0);
do
{sleep(INTEVAL);
x+=NN;
yi=440-(1420.4+INITVALU+5*x-1000)*0.32;
xi=80+20*x;
lineto(xi,yi);
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,51,150,65,0,1);
outtextxy(75,55,ecvt(difftime(time(NULL),ftime),ndig,&dec,&sign));
moveto(xi,yi);
}
while(difftime(time(NULL),ftime)<=(9*60));
// while(difftime(time(NULL),ftime)<=4.5*60.0);
do
{sleep(INTEVAL);
x+=NN;
yi=440-(1330.4+INITVALU+15*x-1000)*0.32;
xi=80+20*x;
lineto(xi,yi);
if(difftime(time(NULL),ftime)>=9.0 && flag1==0)
{ndig+=1;flag1=1;}
if(difftime(time(NULL),ftime)>=95.0 && flag2==0)
{ndig+=1;flag2=1;}
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,51,150,65,0,1);
outtextxy(75,55,ecvt(difftime(time(NULL),ftime),ndig,&dec,&sign));
moveto(xi,yi);
}
while(difftime(time(NULL),ftime)<=(12*60));
// while(difftime(time(NULL),ftime)<=6*60.0);
}
return 0; */
}
void fft(float xr[],float xi[], int M,int inv)
{
int m,nv2,nm1,j,i,k,l,le,le1,ip;
float ur,ui,wr,wi,tr,ti,ur1,ui1;
/*----------------- FFT ---------------------*/
m=(int)(log(M)/log(2));
nv2=M/2;
nm1=M-1 ;
j=1;
for(i=1;i<=nm1;i++)
{
if(i>=j) goto loop1;
else
{tr=xr[j];ti=xi[i];xr[j]=xr[i];xi[j]=xi[i];xr[i]=tr;xi[i]=ti;}
loop1:k=nv2;
loop2:if(k>=j) goto loop3;
else {j=j-k;k=k/2;goto loop2;}
loop3:j=j+k;
}
for(l=1;l<=m;l++)
{le=pow(2,l);le1=le/2;ur=1.0;ui=0.0;
wr=cos(PI/(float)(le1)); wi=-sin(PI/(float)(le1));
if(inv!=0) wi=sin(PI/(float)(le1));
for(j=1;j<=le1;j++)
{for(i=j;i<=M;i=i+le)
{ip=i+le1;tr=xr[ip]*ur-xi[ip]*ui;ti=xr[ip]*ui+xi[ip]*ur;
xr[ip]=xr[i]-tr;xi[ip]=xi[i]-ti;
xr[i]=xr[i]+tr;xi[i]=xi[i]+ti;
}
ur1=ur*wr-ui*wi;ui1=ur*wi+ui*wr;ur=ur1;ui=ui1;
}
}
if(inv==0)
{for(i=1;i<=M;i++) {xr[i]=xr[i]/M;xi[i]=xi[i]/M;} goto ed;}
else
{for(i=1;i<=M;i++) {xr[i]=xr[i]/(float)(M);xi[i]=xi[i]/(float)(M);}}
ed:;
}
float countT2(float f,float G_real)
{
float a,a1,d,d1,k,k1,t,rr,r1,m,p,p1;
float ss,m1,p2,nn,l,x,t1,l1,l10,t2;
a=3.0;d=0.026;d1=0.0334;k=1.4;t=300;k1=1.3;
rr=297;r1=259.8;m=2;p=1.428;a1=0.684;p1=7.825;
if(G_real>8400.0) {l10=0.048;goto ttt;}
if(G_real>8300.0) {l10=0.0485;goto ttt;}
if(G_real>8200.0) {l10=0.049; goto ttt;}
if(G_real>8100.0) {l10=0.0495;goto ttt;}
if(G_real>8000.0) {l10=0.050;goto ttt;}
if(G_real>7900.0) {l10=0.0505;goto ttt;}
if(G_real>7800.0) {l10=0.051;goto ttt;}
if(G_real>7700.0) {l10=0.0515;goto ttt;}
if(G_real>7600.0) {l10=0.051;goto ttt;}
if(G_real>7500.0) {l10=0.0515;goto ttt;}
if(G_real>7400.0) {l10=0.052;goto ttt;}
if(G_real>7300.0) {l10=0.0525;goto ttt;}
if(G_real>7200.0) {l10=0.053;goto ttt;}
if(G_real>7100.0) {l10=0.054;goto ttt;}
if(G_real>7000.0) {l10=0.0545;goto ttt;}
if(G_real>6900.0) {l10=0.055;goto ttt;}
if(G_real>6800.0) {l10=0.0555;goto ttt;}
if(G_real>6700.0) {l10=0.056;goto ttt;}
if(G_real>6600.0) {l10=0.0565;goto ttt;}
if(G_real>6500.0) {l10=0.057;goto ttt;}
if(G_real>6400.0) {l10=0.0575;goto ttt;}
l10=0.058;
ttt:l10=l10+0.0015;
G_real=G_real/60.0;
ss=PI*pow(d,2)/4.0;
m1=G_real*p/(a*60.0);
p2=(m1*sqrt(r1*t)*0.00001)/(a1*ss);
nn=p2/p1;
l=2*(1.05*sqrt(nn)-0.1)*d1*sqrt(k*m*m-1);
x=0.00004067*exp(m*exp(m*log(nn)));
t1=t/(x+0.09739);
l1=l10/exp(2*log(t/t1))+0.94;
t2=pow(f*l*l1,2)/(k1*rr)-273.0+43.0;
return t2;
}
float countF(int ss[N])
{ float f0;
int M,i,j;
float x,aver;
M=4096;
for(i=0;i<M+1;i++){
sr[i]=(float)(ss[i]);si[i]=0.0;
}
fft(sr,si,M,0);
for(i=1;i<=M/2;i++)
{
x=pow(sr[i],2)+pow(si[i],2);
x=sqrt(x);
sr[i]=x;
}
/* for(i=1;i<=M/2;i++)
{si[i]=pow(i*4000.0/4096.0,3)/(pow(i*4000.0/4096.0,3)+pow(800.0,3));
}
for(i=1;i<=M/2;i++)
{sr[i]=sr[i]*si[i];si[i]=0.0;}
for(i=1;i<=M/2;i++)
{si[i]=pow(1000.0,3)/(pow(1000.0,3)+pow(i*4000.0/4096.0,3));
}
for(i=1;i<=M/2;i++)
{sr[i]=sr[i]*si[i];si[i]=0.0;}
*/
sr[0]=0.0;
for(i=920;i<=1130;i++){
if(sr[i]>sr[0]) {
sr[0]=sr[i];
si[0]=(float)(i-1);
}
}
f0=(float)(si[0]*4000.0/4096.0);
if(f0>1020) f0=f0-100.0;
return f0;
}
float countG(int gg[])
{ FILE *fp;
float G;
int i,j;
G=0.0;
for(i=0;i<500;i++){
G=G+(float)(gg[i])/500.0;
}
G=G/KG;
// printf("G=%f,gg[]=%d\n",G,gg[2]);
return G;
}
void sample1()
{
long far *aa5;
long aa1;
unsigned int far *adc2;
int f1,sa,b,b1,b2,wc,i,j,k,adc1;
char h;
double diff_t;
time_t first_t,second_t;
FILE *fp1;
unsigned int size1=2;
unsigned long count1=0x07fff;
f1=0x3f;
sa=4;
wc=0x90;
/**** 8254-2 INITIALIZATION ****/
b=(5000/sa);
b2=b/256;
b1=b-b2*256;
outp(0x34c,f1); /* PASS FILTERS program */
outp(0x34d,0x0); /* SAMPLING CLOCK INITIALIZATION */
outp(0x34b,0x34); /* COUNTER 0 MODE 2 * WRITE CONTROL WORD */
outp(0x348,b1);
outp(0x348,b2);
outp(0x34b,0x74); /* COUNTER 1 MODE 2 * WRITE CONTROL WORD */
outp(0x349,b1);
outp(0x349,b2);
outp(0x34b,0xb0); /* COUNTER 2 MODE 0 * WRITE CONTROL WORD */
outp(0x34a,b1);
outp(0x34a,b2);
outp(0x34f,0x1); /* FROM 1 WAY BEGIN ( COUNTER Clear 0 ) */
/* SECOND INITIALIZATION WAY COUNTROL */
outp(0x360,0x8); /* dual port */
for(j=0;j<=119;j++)
{ *(buff+j)=0; /* pc & c30 address 4000h Clear 0 */
}
adc2=buff+0x200; /* pc address 400h c30 address 800200h */
*adc2=0;
outp(0x360,0x0); /* k, return pc */
/* h_loadbin("xad4W.bin"); */
outp(0x360,0x80); /* I, return c30 */
outp(0x360,0x98); /* J, c30 operation */
loop1: adc1=*adc2;
if(adc1==0)
goto loop1;
else
{
outp(0x34d,wc); /* SAMPLING CLOCK START */
// printf(" stroke any key return Plot ");
sleep(2);
}
}
int main()
{
FILE *fp1;
float f0,G,GG[700];
float T2[5],Taverage,Tmax,Tmin,degree14,G0=7500.0,sumG=0;
double diff_t,samtime;
int i,j,m,m1,flag3=0,ndig1=4,flag1=0,flag2=0;
int K,aa[N],bb[500];
time_t first_t,second_t;
char fname[15];
char *luhao,*date1;
//------------------------------------------------------------
outp(0x351,0x3f);
outp(0x352,0x3f);
outp(0x353,0x3f);
outp(0x354,0x3f);
clrscr();
gotoxy(20,5);
printf("Please input filename to save(sgXX_XXA.123):");
scanf("%s",fname);
gotoxy(20,10);
printf("Please input lu hao(INT):");
scanf("%s",luhao);
gotoxy(20,13);
printf("Please input date(XX.XX):");
scanf("%s",date1);
first_t=time(NULL);
painter0();
i=0;
m1=0;
samtime=difftime(time(NULL),first_t);
GG[0]=7500.0;
times[0]=samtime;
// degree[0]=1590.3;
// degree[1]=1590.3;
degree[0]=1300.0;
degree[1]=1300.0;
while(difftime(time(NULL),first_t)<24*60.0) //whole time
{
i=i+1;
xi=(float)getx();
yi=(float)gety();
sample1();
outp(0x360,0x1);
buf=buff+0x4000;
for(m=0;m<500;m++){
buf++;
buf++;
bb[m]=(int)(*buf);
buf++;
buf++;
}
GG[i]=countG(bb);
// while(diff_t<3.0){
// m1=i-1;
// goto mm;
// }
times[i]=difftime(time(NULL),first_t);
// sumG=sumG+(times[i]-times[i-1])*GG[i];
// G=sumG/(float)(times[i]-samtime);
if(GG[i]>9000.0) G=G0;
else {G=GG[i];G0=G;}
if(GG[i]<6000.0) goto mm;
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,34,150,48,0,1); //display YAND
outtextxy(75,38,ecvt((double)G,ndig1,&dec,&sign));
K=0;
for(j=0;j<5;j++){
buf=buff+100+K;
for(m=0;m<N;m++){
aa[m]=(int)(*buf);
buf++;
buf++;
buf++;
buf++;
}
f0=countF(aa);
T2[j]=countT2(f0,G);
// printf("f0=%f,G=%f,T2=%f\n",f0,G,T2[j]);
K=K+100*2;
}
Taverage=0.0;
Tmax=T2[0];Tmin=T2[0];
for(j=0;j<5;j++){
Taverage=Taverage+T2[j];
if(T2[j]>Tmax) Tmax=T2[j];
if(T2[j]<Tmin) Tmin=T2[j];
}
Taverage=(Taverage-Tmax-Tmin)/3.0;
if(Taverage-degree[i-1]>10.0) degree[i]=degree[i-1]+10.0;
else if(Taverage-degree[i-1]<-5.0) degree[i]=degree[i-1]-5.0;
else degree[i]=Taverage;
moveto(xi,yi);
painter1();
setfillstyle(SOLID_FILL,BLACK);
bar3d(355,54,435,68,0,1); //display steel_degree
if(difftime(time(NULL),first_t)<=800.0)
{
outtextxy(360,58,ecvt((double)degree[i],ndig1,&dec,&sign));
degree14=degree[i];
}
else
{
if(degree[i]-degree14>=0.0)
{
outtextxy(360,58,ecvt((double)degree[i],ndig1,&dec,&sign));
degree14=degree[i];
}
if(degree[i]-degree14<0.0)
outtextxy(360,58,ecvt((double)degree14,ndig1,&dec,&sign));
}
if(difftime(time(NULL),first_t)>=6.0 && flag3==0)
{ndig+=1;flag3=1;}
if(difftime(time(NULL),first_t)>=96.0 && flag2==0)
{ndig+=1;flag2=1;}
if(difftime(time(NULL),first_t)>=996.0 && flag1==0)
{ndig+=1;flag1=1;}
setfillstyle(SOLID_FILL,BLACK);
bar3d(70,51,150,65,0,1);
outtextxy(75,55,ecvt(difftime(time(NULL),first_t),ndig,&dec,&sign));
// printf("during computing,available memory is:%lu bytes\n",(unsigned long) coreleft());
}
mm:getch();
getch();
getch();
closegraph();
farfree(buff);
// printf("after free(buf),available memory is:%lu bytes\n",(unsigned long) coreleft());
if ((fp1=fopen(fname,"wb"))==NULL){
printf("Cannot open the save_file in main()\n");
return 0;
}
for(j=0;j<i;j++){
fwrite(×[j],sizeof(double),1,fp1);
fwrite(°ree[j],sizeof(float),1,fp1);
fwrite(&GG[j],sizeof(float),1,fp1);
}
fclose(fp1);
// printf("\nEND.");
// restorecrtmode();
// printf("after exit graph,available memory is:%lu bytes\n",(unsigned long) coreleft());
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -