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

📄 mainproject.c

📁 dsp经典代码 dsp经典代码 dsp经典代码
💻 C
📖 第 1 页 / 共 2 页
字号:
//   frequency();

//aaa: 
//电压最大值
     
     i=(int)(Vmax);
     ShowHZ168(8,20,i);
     j=(int)((Vmax-(float)i)*10);
     ShowHZ168(10,20,j);
     k=(int)((Vmax-(float)i-(float)j/10)*100);
     ShowHZ168(11,20,k);
     l=(int)((Vmax-(float)i-(float)j/10-(float)k/100)*1000);
     ShowHZ168(12,20,l);

/*
   ShowHZ1616(1,37,27);   //有
   ShowHZ1616(3,37,28);   //效
   ShowHZ1616(5,37,26);   //值
   ShowHZ168(7,37,14);    //:
   ShowHZ168(10,37,15);    //.   
*/
     i=(int)(VITUREu);
     ShowHZ168(8,37,i);
     j=(int)((VITUREu-(float)i)*10);
     ShowHZ168(10,37,j);
     k=(int)((VITUREu-(float)i-(float)j/10)*100);
     ShowHZ168(11,37,k);
     l=(int)((VITUREu-(float)i-(float)j/10-(float)k/100)*1000);
     ShowHZ168(12,37,l);
     
//----------以下为液晶屏右边,显示电流数据-----------     
     
/*     
   ShowHZ1616(20,1,4);   //电
   ShowHZ1616(22,1,6);   //流
   ShowHZ168(24,1,x+3);    //1,2,3  
   
   ShowHZ1616(16,20,24);   //最
   ShowHZ1616(18,20,25);   //大
   ShowHZ1616(20,20,26);   //值
   ShowHZ168(22,20,14);    //:
   ShowHZ168(25,20,15);    //.   
*/
     i=(int)(Imax);
     ShowHZ168(23,20,i);
     j=(int)((Imax-(float)i)*10);
     ShowHZ168(25,20,j);
     k=(int)((Imax-(float)i-(float)j/10)*100);
     ShowHZ168(26,20,k);
     l=(int)((Imax-(float)i-(float)j/10-(float)k/100)*1000);
     ShowHZ168(27,20,l);
     
     
/*   
   ShowHZ1616(16,37,27);   //有
   ShowHZ1616(18,37,28);   //效
   ShowHZ1616(20,37,26);   //值
   ShowHZ168(22,37,14);    //:
   ShowHZ168(25,37,15);    //.   
*/
     i=(int)(VITUREi);
     ShowHZ168(23,37,i);
     j=(int)((VITUREi-(float)i)*10);
     ShowHZ168(25,37,j);
     k=(int)((VITUREi-(float)i-(float)j/10)*100);
     ShowHZ168(26,37,k);
     l=(int)((VITUREi-(float)i-(float)j/10-(float)k/100)*1000);
     ShowHZ168(27,37,l);
       


//----------以下为液晶屏下面,显示有功功率、无功功率、功率因数、频率----------- 
/*   
   ShowHZ1616(1,54,27);   //有
   ShowHZ1616(3,54,31);   //功
   ShowHZ1616(5,54,31);   //功
   ShowHZ1616(7,54,8);   //率
   ShowHZ168(9,54,14);    //:
   ShowHZ168(12,54,15);    //.   
*/
 
//     i=(int)(powe/100);
//     ShowHZ168(10,54,i);
     j=(int)(Ppower);
     ShowHZ168(10,54,j);
     k=(int)((Ppower-(float)j)*10);
     ShowHZ168(12,54,k);
     l=(int)((Ppower-(float)j-(float)k/10)*100);
     ShowHZ168(13,54,l); 
     o=(int)((Ppower-(float)j-(float)k/10-(float)l/100)*1000);
     ShowHZ168(14,54,o); 
     
/*                     
   ShowHZ1616(16,54,30);   //无
   ShowHZ1616(18,54,31);   //功
   ShowHZ1616(20,54,31);   //功
   ShowHZ1616(22,54,8);   //率
   ShowHZ168(24,54,14);    //:
   ShowHZ168(27,54,15);    //.   
*/
 
//     i=(int)(qpowe/100);
//     ShowHZ168(25,54,i);
     j=(int)(Qpower);
     ShowHZ168(25,54,j);
     k=(int)((Qpower-(float)j)*10);
     ShowHZ168(27,54,k);
     l=(int)((Qpower-(float)j-(float)k/10)*100);
     ShowHZ168(28,54,l); 
     o=(int)((Qpower-(float)j-(float)k/10-(float)l/100)*1000);
     ShowHZ168(29,54,o);                   


/*
   ShowHZ1616(1,71,31);   //功
   ShowHZ1616(3,71,8);   //率
   ShowHZ1616(5,71,32);   //因
   ShowHZ1616(7,71,10);   //数
   ShowHZ168(9,71,14);    //:
   ShowHZ168(13,71,15);    //.   
 */
     i=(int)Qz;
     ShowHZ168(10,71,i);
     j=(int)((Qz-(float)i)*10);
     ShowHZ168(12,71,j);
     k=(int)((Qz-(float)i-(float)j/10)*100);
     ShowHZ168(13,71,k);
     l=(int)((Qz-(float)i-(float)j/10-(float)k/100)*1000);
     ShowHZ168(14,71,l); 
     

/*
    ShowHZ1616(16,71,7);   //频
    ShowHZ1616(18,71,8);   //率
    ShowHZ168(20,71,14);    //:
    ShowHZ168(24,71,15);    //.
*/     
     i=(int)(fre/100);
     ShowHZ168(21,71,i);
     j=(int)((fre-(float)i*100)/10);
     ShowHZ168(22,71,j);
     k=(int)(fre-(float)i*100-(float)j*10);
     ShowHZ168(23,71,k);
     l=(int)((fre-(float)i*100-(float)j*10-(float)k)*10);
     ShowHZ168(25,71,l);
     o=(int)((fre-(float)i*100-(float)j*10-(float)k-(float)l/10)*100);
     ShowHZ168(26,71,o);         


   show(boxing1,clear1);
     show(boxing2,clear2);

 //   delay_ms(250);
 //   delay_ms(250); 

//    goto aaa;
}


//-------------以下为液晶屏选择界面------------------
void xuanze(void)
{
   ClearScreen();
   
   ShowHZ1616(5,20,4);   //电
   ShowHZ1616(7,20,5);   //压
   ShowHZ1616(9,20,4);   //电
   ShowHZ1616(11,20,6);   //流
   ShowHZ168(13,20,1);   //1
   
   
   ShowHZ1616(20,20,4);   //电
   ShowHZ1616(22,20,5);   //压
   ShowHZ1616(24,20,4);   //电
   ShowHZ1616(26,20,6);   //流
   ShowHZ168(28,20,2);   //2
   
   
   ShowHZ1616(5,50,4);   //电
   ShowHZ1616(7,50,5);   //压
   ShowHZ1616(9,50,4);   //电
   ShowHZ1616(11,50,6);   //流
   ShowHZ168(13,50,3);   //3
   
   
   ShowHZ1616(20,50,7);   //频
   ShowHZ1616(22,50,33);   //谱
   ShowHZ1616(24,50,34);   //分
   ShowHZ1616(26,50,35);   //析

}


//----------以下为按键控制---------------
void cursor(void)
{
    xuanze();
    
  	switch(cursor_reg)
	{
		case 0:  
				 ReverseShowHZ(5,20,16,16);   //电
                 ReverseShowHZ(7,20,16,16);   //压
                 ReverseShowHZ(9,20,16,16);   //电
                 ReverseShowHZ(11,20,16,16);   //流
                 ReverseShowChar(13,20,16);   //1
				break; 
		case 1: 		
		         ReverseShowHZ(20,20,16,16);   //电
                 ReverseShowHZ(22,20,16,16);   //压
                 ReverseShowHZ(24,20,16,16);   //电
                 ReverseShowHZ(26,20,16,16);   //流
                 ReverseShowChar(28,20,16);   //2		   
				break;
		case 2:
		
		        ReverseShowHZ(5,50,16,16);   //电
                ReverseShowHZ(7,50,16,16);   //压
                ReverseShowHZ(9,50,16,16);   //电
                ReverseShowHZ(11,50,16,16);   //流
                ReverseShowChar(13,50,16);   //3  
			   break;	
		case 3:  
				ReverseShowHZ(20,50,16,16);   //频
                ReverseShowHZ(22,50,16,16);   //谱
                ReverseShowHZ(24,50,16,16);   //分
                ReverseShowHZ(26,50,16,16);   //析
				break;
									
		 default:break;		
	}
}



void key_left(void)  
{

		if(cursor_reg==0)   cursor_reg=3;
		else  cursor_reg--;
		
		
		cursor(); 					
			
	    while((PCDATDIR&0xf0)==0x60)
			{;}
		delay_ms(250); 
		while((PCDATDIR&0xf0)==0x60)
			{;}
		delay_ms(10); 

}

void key_right(void)  
{

		if(cursor_reg==3) cursor_reg=0;
		else  cursor_reg++;
		
		
		cursor(); 
				
		while((PCDATDIR&0xf0)==0x50)
			{;}
		delay_ms(250); 
		while((PCDATDIR&0xf0)==0x50)
			{;}
		delay_ms(10);

} 


void key_down(void)  
{  

		switch(cursor_reg)
		{
			case 0x0:      
					show_voltage(1);
					break; 
			case 0x1:      
					show_voltage(2);
					break;
			case 0x2:      
					show_voltage(3);
					break;
			case 0x3:      
					showfft();
					break;
			
			default:break;	
			
		}
		
		
		while((PCDATDIR&0xf0)==0x30)
			{
				delay_ms(250);
				if((PCDATDIR&0xf0)==0x30)
                delay_ms(10); 
			}

}     


void key_back(void)
{
       flag_show =0;
         
   	   InitLCD();
       xuanze(); 
       cursor(); 
       
       while((PCDATDIR&0xf0)==0x40)
			{;}
		delay_ms(250); 
		while((PCDATDIR&0xf0)==0x40)
			{;}
		delay_ms(10);

}  


void key_scane(void)
{   int i;

    if((PCDATDIR&0x80) == 0)
    {
    	delay_ms(10);
    	if((PCDATDIR&0x80) == 0)
    	{   i= PCDATDIR&0xf0;
    		switch(i)
    		{
    			case 0x60:   
    				key_left();    				
    				break;
    			case 0x50:
    				key_right();
    				break;
    			case 0x30: 
    			    key_down();     				
    				break;	
    			case 0x40:
    				key_back();
    				break;

    			default:break;					
    		}		 
    	}
    }
    
    flag_set=0;
}        



/* 采样来的数据放在dataR[ ]数组中,运算前dataI[ ]数组初始化为0 */

void FFT(float dddd[256])
{
     int x0,x1,x2,x3,x4,x5,x6,x7,i,xx;
     int L,j,k,b,p;
     double TR,TI,temp;               //,dddd[256]
     
 /*    for(i=0;i<256;i++)
        {
           dddd[i]=0.25+cos((float)(2*pi*i/256))+0.25*cos((float)(4*pi*i/256))+2*cos((float)(6*pi*i/256));
           w[i]=0;
        }

   */
/********** following code invert sequence ************/
     for(i=0;i<256;i++)
        {
         dataR[i]=dddd[i];
        }

     for(i=0;i<256;i++)
        {
         x0=x1=x2=x3=x4=x5=x6=x7=0;
         x0=i&0x01;
         x1=((int)(i/2))&0x01; 
         x2=((int)(i/4))&0x01; 
         x3=((int)(i/8))&0x01;
         x4=((int)(i/16))&0x01; 
         x5=((int)(i/32))&0x01; 
         x6=((int)(i/64))&0x01;
         x7=((int)(i/128))&0x01;
         xx=x0*128+x1*64+x2*32+x3*16+x4*8+x5*4+x6*2+x7;
//         xx=x0*32+x1*16+x2*8+x3*4+x4*2+x5;
         dataI[xx]=dataR[i];
        }
     for(i=0;i<256;i++)
        {
         dataR[i]=dataI[i]; 
         dataI[i]=0; 
        }
/************** following code FFT *******************/
     for(L=1;L<=8;L++)                /* for(1) l=1 to m  */
       {                      
         b=1; 
         i=L-1;
         while(i>0)                   /* b= 2^(L-1) */
            {
              b=b*2;
              i--;
            }          
         for(j=0;j<=b-1;j++)              /* for (2) j=0 to 2^(l-1)-1   */
           {
             p=1; 
             i=8-L;
             while(i>0)                 /* p=pow(2,7-L)*j; */
                {
                   p=p*2; 
                   i--;
                }
             p=p*j;
             for(k=j;k<256;k=k+2*b)    /* for (3) k=j to 2^m-1 step 2^l   */
               { 
                  TR=dataR[k]; 
                  TI=dataI[k]; 
                  temp=dataR[k+b];
                  dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
                  dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
                  dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
                  dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];
                }                                   /* END for (3) */
            }                                     /* END for (2) */
        }                                      /* END for (1) */
        
        
      for(i=0;i<4;i++)                 /* 只需要32次以下的谐波进行分析 */
       { 
            w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
//            w[i]=w[i]/64;
        }
//       w[0]=w[0]/2;

}              /* END FFT */ 

showfft(void)
{
    int j,i;
    flag_show=2;    
        
    sin_cos();     

    ClearScreen();
     
      
     for(i=5;i<=14;i++)    //显示横坐标
        {
          for(j=0;j<8;j++)
             {
                boxing_show(i,100,j);
              }                 
        }
        ShowHZ168(5,103,0);
        ShowHZ168(7,103,1);
        ShowHZ168(9,103,2);
        ShowHZ168(11,103,3);
        
      for(i=16;i<=25;i++)    //显示横坐标
        {
          for(j=0;j<8;j++)
             {
                boxing_show(i,100,j);
              }                 
        }
        ShowHZ168(16,103,0);
        ShowHZ168(18,103,1);
        ShowHZ168(20,103,2);
        ShowHZ168(22,103,3);
        
        
     for(i=30;i<=110;i++)    //显示纵坐标
         {
             boxing_show(5,i,7);     
         }
          

     for(i=30;i<=110;i++)    //显示纵坐标
         {
             boxing_show(16,i,7);     
         }
         show1();
         
}


show1(void)
{   
    int a,j,i;
    FFT(adcin1);
     
    for(i=0;i<4;i++)
    {
       a=(int)(w[i]);
       if(a!=clear3[i])
         {       
       for(j=0;j<clear3[i];j++)
          {
             Clear_boxing(5+i*2,100-j,1);
          
          }
         } 
          
       for(j=0;j<a;j++)
          {

             boxing_show(5+i*2,100-j,1);
          
          }
         clear3[i]=a;  
   
    }
    
    FFT(adcin2); 
    for(i=0;i<4;i++)
    {
       a=(int)(w[i]);
       if(a!=clear4[i])
         {       
       for(j=0;j<clear3[i];j++)
          {
             Clear_boxing(16+i*2,100-j,1);
           
          }
        } 
          
       for(j=0;j<a;j++)
          {

             boxing_show(16+i*2,100-j,1);
          
          }
         clear4[i]=a;  
   
    }    
       


}






void main(void)
{     	
    int i,j,k,l,o,p,r,z,x;    
    disable();    
	initial(); 	
   	InitLCD();
   	enable();   	
    inixint2(); 
    xuanze(); 
    cursor(); 
    for(i=0;i<64;i++)
       {
         clear1[i]=109;
         clear2[i]=109;
         clear3[i]=0;
       
       }
    
loop: 
    inicap4();
/*        ShowHZ1616(1,1,7);   //频
    ShowHZ1616(3,1,8);   //率
    ShowHZ168(5,1,14);    //:
    ShowHZ168(10,1,15);    //.        */


    while(1)            //等待捕获两个计算器值计算频率
    {
       if(m==2) 
        {
             CAPCONB &=0X05FFF; 
             break; 
        }
       
    
    }     
	 
     frequency(); 
//     show_frequency(); 


    iniadc();        //开始采样
   while(1)          //等待采样结果
     {
     
        
        if(adcount<256)   
        adc();     
        else           //采样数达到256后停止采样
         {  
            adcount=0;   
//            T1CON |=0x0040;           //T1停止工作
            T1CON &=0xFFBF;
//            ADCCTRL1 |=0x4000;        
            break;         
         }
          
     }
     
  
//    xuanze(); 
//    cursor(); 
//    inixint2(); 
    
                
//     while(1)
//    {
     if(flag_set==1)  
      key_scane();
  
//    }

     if(flag_show==1)  shuju(1);
     if(flag_show==2)  show1();


     goto loop;  
}

⌨️ 快捷键说明

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