⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lg.cpp

📁 声音采集源程序
💻 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(&times[j],sizeof(double),1,fp1);
	 fwrite(&degree[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 + -