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

📄 main.c

📁 在LPC2368上实现的FFT程序
💻 C
📖 第 1 页 / 共 2 页
字号:
		Print_Str(0,0,(unsigned char *)combuf);
		Print_Str(8,0,"    ");
		CmdWrite(0x10,0x6e); 
		Dnop(10); 
		
		delayms(100);		 	
		key_Scan();
		if(key_Status==KEY_ENTER)
		{
			key_Status=KEY_WAIT;
			Clr_Screen();
			Dnop(10);
			Menu();
			break;
		} 
		if(key_Status==KEY_HOLD)
		{
			CmdWrite(0x10,0x4e); 
			Dnop(10);
			Print_Str(0,0,"Hold On!");
			key_Status=KEY_WAIT;
			Stop_Time0();
			while (1)	      
			{
				key_Scan();
				if (key_Status==KEY_HOLD)
					break;
			}
			key_Status=KEY_WAIT;
			CmdWrite(0x10,0x6e); 
			Start_Time0();	  
		}
		if(key_Status==KEY_RECALL)
		{		
			Stop_Time0();
			key_Status=KEY_WAIT;
			Wait_Recall();

			Clr_Screen();
			delayms(50);
			Print_Str(0,16,"Pt=");	
			Print_Str(0,32,"F1=");
			Print_Str(0,48,"P1=");	
			Print_Str(0,64,"F2=");
			Print_Str(0,80,"P2=");
			Print_Str(0,96,"F3=");
			Print_Str(0,112,"P3=");
		
			Print_Str(12,0,"F4=");
			Print_Str(12,16,"P4=");
			Print_Str(12,32,"F5=");
			Print_Str(12,48,"P5=");
			Print_Str(12,64,"F6=");
			Print_Str(12,80,"P6=");
			Print_Str(12,96,"F7=");
			Print_Str(12,112,"P7=");

			Start_Time0();				
		}
	 }
}

void Wait_Recall (void) 
{

	unsigned char i=0,j=0,flag=0;
	unsigned short count=0;
	unsigned char temp=0;
	char combuf[8];

	Clr_Screen();
	delayms(50);
	
	Print_Str(0,0,"记录号:");
	Print_Str(0,24,"记录号:");
	Print_Str(14,0,"存储");
	Print_Str(14,24,"回放");
	Print_Str(14,48,"返回");
	wr_Num(10,0,i);
	wr_Num(10,24,j);
	
	
	curse_x=15;
	curse_y=23;
	CmdWrite(0x00,0xC5);
	CmdWrite(0x60,curse_x);
   	CmdWrite(0x70,curse_y);	
		
	while(!flag){
		key_Scan();
		switch(key_Status)
		{
			case KEY_RIGHT:
				curse_x-=5;				
				if(curse_x<=5) curse_x=15;				
				CmdWrite(0x00,0xC5);
				CmdWrite(0x60,curse_x);
			   	CmdWrite(0x70,curse_y);
				key_Status=KEY_WAIT;
				break;
			case KEY_DOWN:
				curse_y+=24;
				curse_x=15;
				CmdWrite(0x00,0xC5);
				if(curse_y>=95) curse_y=23;
				CmdWrite(0x60,curse_x);
			   	CmdWrite(0x70,curse_y);
				key_Status=KEY_WAIT;
			 	break;
			case KEY_ENTER:			
				key_Status=KEY_WAIT;
				CmdWrite(0x00,0xC5);
				switch (curse_y) 
				{
					case 23:
							if(curse_x==10){
								i++;
								if(i==8) 
								{
									i=0;
								}
								wr_Num(10,0,i);
								
								CmdWrite(0x00,0xC5);
								CmdWrite(0x60,curse_x);
							   	CmdWrite(0x70,curse_y);
							}
							if(curse_x==15){
								Clr_Screen();
								delayms(10);
								
								//调用存储数据的函数
								if(i<10)
								{
									F_Char.p_val=Time_Power();
									F_Char.p_val*=1000;
								   	Param[i*Record_Length]=F_Char.p_char[0];
									Param[i*Record_Length+1]=F_Char.p_char[1];
									Param[i*Record_Length+2]=F_Char.p_char[2];
									Param[i*Record_Length+3]=F_Char.p_char[3];

									temp=0;
									for(count=4;count<53;count+=8)
									{
										
										F_Char.p_val=pos[temp]/2048.0*FS;
										Param[i*Record_Length+count]=F_Char.p_char[0];
										Param[i*Record_Length+count+1]=F_Char.p_char[1];
										Param[i*Record_Length+count+2]=F_Char.p_char[2];
										Param[i*Record_Length+count+3]=F_Char.p_char[3];

										F_Char.p_val=2*((fftm[pos[temp]]/N)*(fftm[pos[temp]]/N))/status_R;
										F_Char.p_val*=1000;
										Param[i*Record_Length+count+4]=F_Char.p_char[0];
										Param[i*Record_Length+count+5]=F_Char.p_char[1];
										Param[i*Record_Length+count+6]=F_Char.p_char[2];
										Param[i*Record_Length+count+7]=F_Char.p_char[3];

										temp++;

									}	
								}
								temp=Flash();
								Print_Str(0,0,"数据已被存储");
								while(1){
									key_Scan();
									if(key_Status==KEY_ENTER)
									{
										flag=1;
									 	key_Status=KEY_WAIT;
										break;	
									}
								}
							}
							break;
					case 47:
							if(curse_x==10)
							{
								//key_Scan();
								//if(key_Status==KEY_DOWN) j++;
								j++;
								if(j==8) j=0;
								wr_Num(10,24,j);								
								CmdWrite(0x00,0xC5);
								CmdWrite(0x60,curse_x);
							   	CmdWrite(0x70,curse_y);
							}
							if(curse_x==15)
							{
								Clr_Screen();
								delayms(10);							
								wr_Num(0,0,j);

								Print_Str(1,0,"组数据");  //调用显示数据函数
								if(j<10)
								{
									for(count=0;count<512;count++)
									{
										Param[count]=(*(volatile unsigned char *)(DestAddr11+count));
									}
									Print_Str(0,16,"Pt=");	
									Print_Str(0,32,"F1=");
									Print_Str(0,48,"P1=");	
									Print_Str(0,64,"F2=");
									Print_Str(0,80,"P2=");
									Print_Str(0,96,"F3=");
									Print_Str(0,112,"P3=");
								
									Print_Str(12,0,"F4=");
									Print_Str(12,16,"P4=");
									Print_Str(12,32,"F5=");
									Print_Str(12,48,"P5=");
									Print_Str(12,64,"F6=");
									Print_Str(12,80,"P6=");
									Print_Str(12,96,"F7=");
									Print_Str(12,112,"P7=");

								   	//显示直流功率
								   	F_Char.p_char[0]=Param[j*Record_Length];
									F_Char.p_char[1]=Param[j*Record_Length+1];
									F_Char.p_char[2]=Param[j*Record_Length+2];
									F_Char.p_char[3]=Param[j*Record_Length+3];

									sprintf(combuf,"%07f",F_Char.p_val);
									combuf[7]='\0';
									Print_Str(3,16,(unsigned char *)combuf);

									temp=0;
									for(count=4;count<53;count+=8)
									{

										F_Char.p_char[0]=Param[j*Record_Length+count];
										F_Char.p_char[1]=Param[j*Record_Length+count+1];
										F_Char.p_char[2]=Param[j*Record_Length+count+2];
										F_Char.p_char[3]=Param[j*Record_Length+count+3];

										sprintf(combuf,"%07f",F_Char.p_val);
										combuf[7]='\0';
										if(temp<3)
										{
											Print_Str(3,(temp+1)*32,(unsigned char *)combuf);	
										}
										else
											Print_Str(15,(temp-3)*32,(unsigned char *)combuf);
									

										F_Char.p_char[0]=Param[j*Record_Length+count+4];
										F_Char.p_char[1]=Param[j*Record_Length+count+5];
										F_Char.p_char[2]=Param[j*Record_Length+count+6];
										F_Char.p_char[3]=Param[j*Record_Length+count+7];

										sprintf(combuf,"%07f",F_Char.p_val);
										combuf[7]='\0';
										if(temp<3)
										{
											Print_Str(3,(temp+1)*32+16,(unsigned char *)combuf);	
										}
										else
											Print_Str(15,(temp-3)*32+16,(unsigned char *)combuf);
										temp++;
									}	
								}
								while(1)
								{	
									key_Status=KEY_WAIT;
									key_Scan();
									if(key_Status==KEY_ENTER) 
									{
										flag=1;
										key_Status=KEY_WAIT;
										break;
									}
								}
							}
							break;
					case 71:
							flag=1;						
							break;
					default:
							break; 	
				}
				CmdWrite(0x00,0xC5);
				CmdWrite(0x60,curse_x);
			   	CmdWrite(0x70,curse_y);				
				break;
			default:
				break;
		}
	}

}
void display_graph(void)
{
	float time_power=0.0;
	double fft_power=0;
	char combuf[10];
	float max;

	unsigned short position=0,y=0;
	unsigned short i=0,j=0;
	unsigned char n;

	double fft_freq = 0, cali_val = 1.0;
	unsigned char p_val;
	int i_val;


	Print_Str(0,16,"Pt=");	
	Print_Str(0,32,"F1=");
	Print_Str(0,48,"P1=");	
	Print_Str(0,64,"F2=");
	Print_Str(0,80,"P2=");
	Print_Str(0,96,"F3=");
	Print_Str(0,112,"P3=");

	while(1)
	{	
		Start_Time0();
		ADC0IntDone=0;		
		while(!ADC0IntDone);
		ADC0IntDone=0;
		Stop_Time0();

		if(sec_ctn>=5)
		{
			sec_ctn=0;

			time_power=Time_Power();
			
					
			Fft();
			Sort(N/2); 
		
			sprintf(combuf,"%05f",time_power*1000);
			combuf[5]='\0';
			Print_Str(3,16,(unsigned char *)combuf);
			//显示时域波形 
			for(i=0;i<1024;i++) lcd_data[i]=0x00;	 //清零 
			//for(i=0;i<64;i++) lcd_data[i*16]=0x80;  //y轴 
		   	for(i=496;i<512;i++) lcd_data[i]=0xff;   //x轴 
			for(i=0;i<128;i++)
			{
			 	position=(95-(x_Input[i]/32));
				position<<=4;
				position=(position+(i>>3));
				n=i%8;
				position&=0x07ff;
				lcd_data[position]|=(0x80>>n);
			}
			CmdWrite(0x00,0xC5);
			for(i=0;i<1024;i++)
			{
			 	CmdWrite(0x60,i%16+8);   // set cursor X location 
		    	CmdWrite(0x70,i/16);   // set cursor Y location 
				SdData(lcd_data[i]);
			}
	  	   //显示频域波形 
			max=fftm[pos[0]];
			for(i=0;i<10;i++)
			{
				y=fftm[pos[i]]/max*64;
				for(j=64;j<128-y;j++)
				{
				 	CmdWrite(0x00,0xC5);
				 	CmdWrite(0x60,i*2+10);   // set cursor X location 
		    	 	CmdWrite(0x70,j);   // set cursor Y location 
					SdData(0x00);
				}
				for(j=128-y;j<128;j++)
				{
					CmdWrite(0x00,0xC5);
				 	CmdWrite(0x60,i*2+10);   // set cursor X location 
		    	 	CmdWrite(0x70,j);   // set cursor Y location 
					SdData(0x80);						
				}					
			
			}
			for(i=8;i<24;i++){
				CmdWrite(0x00,0xC5);
				CmdWrite(0x60,i);   // set cursor X location 
		    	CmdWrite(0x70,127);   // set cursor Y location 
				SdData(0xff);
			}
			//显示文本区域 

			for(i=0;i<3;i++)
			{
				fft_freq=pos[i]/2048.0*FS;
				sprintf(combuf,"%05f",fft_freq);
				combuf[5]='\0';
				Print_Str(3,(i+1)*32,(unsigned char *)combuf);

				fft_power=2*((fftm[pos[i]]/N)*(fftm[pos[i]]/N))/status_R;
				
			   	i_val = (int)fft_freq;
				if (i_val>=0 && i_val<10000)
				{
					p_val = i_val/1000;
					cali_val = (coef[p_val+1]-coef[p_val])*(fft_freq/1000.0 - p_val) + coef[p_val];
					fft_power *= cali_val;
				}

				fft_power=(fft_power*1000);
				sprintf(combuf,"%05f",fft_power);
				combuf[5]='\0';
				Print_Str(3,(i+1)*32+16,(unsigned char *)combuf);
			}	
			
	   	}	 	
		current_time = RTCGetTime();
		sprintf(combuf,"%02d:%02d:%02d",current_time.RTC_Hour,current_time.RTC_Min, current_time.RTC_Sec);
		Print_Str(0,0,(unsigned char *)combuf);
		delayms(100);
		
		key_Scan();
		if(key_Status==KEY_ENTER)
		{
			key_Status=KEY_WAIT;
			Clr_Screen();
			Dnop(10);
			Menu();
			break;
		} 
		if(key_Status==KEY_HOLD)
		{
			CmdWrite(0x10,0x4e); 
			Dnop(10);
			Print_Str(0,0,"Hold On!");
			key_Status=KEY_WAIT;
			Stop_Time0();
			while (1)	      
			{
				key_Scan();
				if (key_Status==KEY_HOLD)
					break;
			}
			key_Status=KEY_WAIT;
			CmdWrite(0x10,0x6e); 
			Start_Time0();	  
		}
		if(key_Status==KEY_RECALL)
		{		
			Stop_Time0();
			delayms(100);
			key_Status=KEY_WAIT;
			Wait_Recall();

			Clr_Screen();
			delayms(100);
			Print_Str(0,16,"Pt=");	
			Print_Str(0,32,"F1=");
			Print_Str(0,48,"P1=");	
			Print_Str(0,64,"F2=");
			Print_Str(0,80,"P2=");
			Print_Str(0,96,"F3=");
			Print_Str(0,112,"P3=");

			Start_Time0();				
		}
	 }

		
}

void display_graph_1(void)
{
	float time_power=0.0;
	double fft_power=0;
	char combuf[10];
	float max;

	unsigned short position=0,y=0;
	unsigned short i=0,j=0;
	unsigned char n;

	double fft_freq = 0, cali_val = 1.0;
	unsigned char p_val;
	int i_val;


	Print_Str(0,16,"Pt=");	
	Print_Str(0,32,"F1=");
	Print_Str(0,48,"P1=");	
	Print_Str(0,64,"F2=");
	Print_Str(0,80,"P2=");
	Print_Str(0,96,"F3=");
	Print_Str(0,112,"P3=");

	Start_Time0();
	while(1)
	{			
		Start_Time0();
		ADC0IntDone=0;		
		while(!ADC0IntDone);
		ADC0IntDone=0;
		Stop_Time0();

		time_power=Time_Power();
		
			
		Fft();
		Sort(N/2); 
		
		time_power=(time_power*1000);
		sprintf(combuf,"%05f",time_power);
		combuf[5]='\0';
		Print_Str(3,16,(unsigned char *)combuf);					
			
		//显示时域波形 
		for(i=0;i<1024;i++) lcd_data[i]=0x00;	 //清零 
		//for(i=0;i<64;i++) lcd_data[i*16]=0x80;  //y轴 
	   	for(i=496;i<512;i++) lcd_data[i]=0xff;   //x轴 
		for(i=0;i<128;i++)
		{
		 	position=(95-(x_Input[i]/32));
			position<<=4;
			position=(position+(i>>3));
			n=i%8;
			position&=0x07ff;
			lcd_data[position]|=(0x80>>n);
		}
		CmdWrite(0x00,0xC5);
		for(i=0;i<1024;i++)
		{
		 	CmdWrite(0x60,i%16+8);   // set cursor X location 
	    	CmdWrite(0x70,i/16);   // set cursor Y location 
			SdData(lcd_data[i]);
		}
  	   //显示频域波形 
		max=fftm[pos[0]];
		for(i=0;i<10;i++)
		{
			y=fftm[pos[i]]/max*64;
			for(j=64;j<128-y;j++)
			{
			 	CmdWrite(0x00,0xC5);
			 	CmdWrite(0x60,i*2+10);   // set cursor X location 
	    	 	CmdWrite(0x70,j);   // set cursor Y location 
				SdData(0x00);
			}
			for(j=128-y;j<128;j++)
			{
				CmdWrite(0x00,0xC5);
			 	CmdWrite(0x60,i*2+10);   // set cursor X location 
	    	 	CmdWrite(0x70,j);   // set cursor Y location 
				SdData(0x80);						
			}					
		
		}
		for(i=8;i<24;i++){
			CmdWrite(0x00,0xC5);
			CmdWrite(0x60,i);   // set cursor X location 
	    	CmdWrite(0x70,127);   // set cursor Y location 
			SdData(0xff);
		}
		//显示文本区域 

		for(i=0;i<3;i++)
		{
			fft_freq=pos[i]/2048.0*FS;
			sprintf(combuf,"%05f",fft_freq);
			combuf[5]='\0';
			Print_Str(3,(i+1)*32,(unsigned char *)combuf);

			fft_power=2*((fftm[pos[i]]/N)*(fftm[pos[i]]/N))/status_R;
				
			i_val = (int)fft_freq;
			if (i_val>=0 && i_val<10000)
			{
				p_val = i_val/1000;
				cali_val = (coef[p_val+1]-coef[p_val])*(fft_freq/1000.0 - p_val) + coef[p_val];
				fft_power *= cali_val;
			}

			fft_power=(fft_power*1000);
			sprintf(combuf,"%05f",fft_power);
			combuf[5]='\0';
			Print_Str(3,(i+1)*32+16,(unsigned char *)combuf);
		}
		current_time = RTCGetTime();
		sprintf(combuf,"%02d:%02d:%02d",current_time.RTC_Hour,current_time.RTC_Min, current_time.RTC_Sec);
		Print_Str(0,0,(unsigned char *)combuf);
		delayms(100);
			 	
		key_Scan();
		if(key_Status==KEY_ENTER)
		{
			key_Status=KEY_WAIT;
			Clr_Screen();
			Dnop(10);
			Menu();
			break;
		} 
		if(key_Status==KEY_HOLD)
		{
			CmdWrite(0x10,0x4e); 
			Dnop(10);
			Print_Str(0,0,"Hold On!");
			key_Status=KEY_WAIT;
			Stop_Time0();
			while (1)	      
			{
				key_Scan();
				if (key_Status==KEY_HOLD)
					break;
			}
			key_Status=KEY_WAIT;
			CmdWrite(0x10,0x6e); 
			Start_Time0();	  
		}
		if(key_Status==KEY_RECALL)
		{		
			Stop_Time0();
			delayms(100);
			key_Status=KEY_WAIT;
			Wait_Recall();

			Clr_Screen();
			delayms(100);
			Print_Str(0,16,"Pt=");	
			Print_Str(0,32,"F1=");
			Print_Str(0,48,"P1=");	
			Print_Str(0,64,"F2=");
			Print_Str(0,80,"P2=");
			Print_Str(0,96,"F3=");
			Print_Str(0,112,"P3=");

			Start_Time0();				
		}
	 }

		
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -