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

📄 page3.c

📁 在采样的基础上实现数码管显示和利用TI公司的FFT算法进行运算
💻 C
字号:
#include "zimo.h"
#include "data.h"
#include "dataChange.h"
#include "AD.h"
#include "System.h"

#define  Wave_Num    3               //
#define  MaxY        90     
#define  MaxX        256    
#define  HalfY       45     
#define  HalfX       128    
#define  CenterY     100          
#define  VoltageChangeK  32767    //显示所乘系数,为显示最大值与输入电压最大值比
#define  CurChangeK    32767       //Q15
#define  MaxDispVol      500  
#define  MaxDispCur      100  

int    Save_DataY[Wave_Num][N]={0} ;  //保存已经显示数据,便于清除
int    ShowFlagPage3=1;                //Page3显示页面

                                     //Cursor表示显示页面3的第几个子页面
int PAGE_THREE(int Cursor) {
	int i,num;
	num = 3;
	LCDDELAY;	
	LCDPORTCMD = LCD_CSRFORM;	
/*	for(i=0;i<2;i++){	//设置块状光标
		LCDDELAY;	
		LCDPORTDATA = PCsrBlock[i];
	}*/	
	
	LCDDELAY;	
	LCDPORTCMD = LCD_OVLAY;	
	LCDDELAY;	
//	LCDPORTDATA = 9;	//设置一、为文本属性,三区为图形属性
	LCDPORTDATA = 9;
	LCDDELAY;	
	LCDPORTCMD = LCD_DISPON;	
	LCDDELAY;	
	LCDPORTDATA = 0x14;	//设置一~四区开显示,三关闭,关标显示关
//*******************************	
	DisplyCh(32,220,char6,0);
	DisplyCh(48,220,char15,0);
	DisplyCh(64,220,char2,0);
	DisplyCh(80,220,char55,0);                    //电压波形
//*******************************	
	DisplyCh(128,220,char1,0);
	DisplyCh(144,220,char2,0);
	DisplyCh(160,220,char6,0);
	DisplyCh(176,220,char16,0);                 //谐波电流
//*******************************	             
	DisplyCh(224,220,char10,0);
	DisplyCh(240,220,char71,0);
	DisplyCh(256,220,char70,0);
//*******************************                //频谱图
    DisplyCh(272,16,char3,0);
	DisplyCh(288,16,char68,0);
	DisplyCh(304,16,char69,0);
//	writechar(39,5,':',0);
//*******************************               //有效值
    DisplyCh(272,56,char23,0);
	DisplyCh(288,56,char25,0);
	DisplyCh(304,56,char12,0);
//	writechar(39,9,':',0);                    //畸变率
//****************************
	line(28,218,100,218,LCD_SET);
	line(28,238,100,238,LCD_SET);
	line(28,218,28,238,LCD_SET);
	line(100,218,100,238,LCD_SET);
//******************************
	line(124,218,196,218,LCD_SET);
	line(124,238,196,238,LCD_SET);
	line(124,218,124,238,LCD_SET);
	line(196,218,196,238,LCD_SET);
//*****************************
	line(220,218,292,218,LCD_SET);
	line(220,238,292,238,LCD_SET);
	line(220,218,220,238,LCD_SET);
	line(292,218,292,238,LCD_SET);	
//***************************
 //   DrawAxis(3);
  //  DrawWave(1);
 //   CsrFlagPage3=1 ;                    //默认选中电压波形
  //  DrawBand();
  
  //  Page3_Flash(CsrFlagPage0);
  
    if(Cursor==3)
   {
    DrawAxis(Cursor);
    DrawBand();                     //畸变率
  //  DrawAxis(Cursr);
   }
   else
   {
    DrawAxis(Cursor);
    DrawWave(Cursor); 
    
   }
	return(num);
}

int Clear_Now_Wave() // 清除目前波形
{
  int i,j,*PDataY;
  int tempx,nowY,NextY;
  for(i=0;i<Wave_Num;i++)
  {
     PDataY=Save_DataY[i];
     nowY=(long)*PDataY*MaxY>>15;
     nowY=CenterY-nowY;
     for(j=0;j<N-1;j++)
     {
       tempx=j*2; 
       tempx+=10;
       NextY=(long)*(PDataY+1)*MaxY>>15;
       NextY=CenterY-NextY;     
       DrawLine(tempx,nowY,tempx+2,NextY,LCD_CLR);
       nowY=NextY;
       PDataY++;
     }
  }  
  return 0;
}

int DrawAxis(int AxisType)  //画坐标轴
{
  int i;
  if(AxisType==3)           //频谱图
  {
     line(10,CenterY+MaxY,10+MaxX,CenterY+MaxY,LCD_SET)  ;    //画横轴
     line(10,CenterY-MaxY,10,CenterY+MaxY,LCD_SET);  //画纵轴
      
     for(i=0;i<10;i+=2) 
        writechar(i*2+3,24,0x30+i+1,LCD_SET);
     
     writechar(i*2+3,24,0x30+1,LCD_SET);
     writechar(i*2+4,24,0x30+1,LCD_SET);  // '11'
     
     i+=2;
     writechar(i*2+3,24,0x30+1,LCD_SET);
     writechar(i*2+4,24,0x30+3,LCD_SET); //  '13'
  } 
  else
  {
     line(10,CenterY,10+MaxX,CenterY,LCD_SET)  ;    //画横轴
     line(10,CenterY-MaxY,10,CenterY+MaxY,LCD_SET);  //画纵轴
     
     line(10+HalfX,CenterY,10+HalfX,CenterY-5,LCD_SET)  ;
     writechar(16,13,'1',LCD_SET);
     writechar(17,13,'0',LCD_SET);
     line(10+MaxX,CenterY,10+MaxX,CenterY-5,LCD_SET)  ;    //横轴
     writechar(32,13,'2',LCD_SET);
     writechar(33,13,'0',LCD_SET);
     DrawLine(7+MaxX,CenterY+3,10+MaxX,CenterY,LCD_SET);   //箭头
     DrawLine(7+MaxX,CenterY-3,10+MaxX,CenterY,LCD_SET);
     writechar(34,12,'m',LCD_SET);
     writechar(35,12,'s',LCD_SET);
     
     line(10,CenterY+HalfY,15,CenterY+HalfY,LCD_SET)  ;  //纵轴
     line(10,CenterY+MaxY,15,CenterY+MaxY,LCD_SET)  ;
     DrawLine(7,CenterY-MaxY+3,10,CenterY-MaxY,LCD_SET);   //箭头
     DrawLine(13,CenterY-MaxY+3,10,CenterY-MaxY,LCD_SET);
     
     line(10,CenterY-HalfY,15,CenterY-HalfY,LCD_SET)  ;
     line(10,CenterY-MaxY,15,CenterY+MaxY,LCD_SET)  ;
     
  }
}

int DrawWave(int WaveType)
{
  int i,j,*PDataY;
  int Chanel[Wave_Num];
  int tempx,nowY,NextY;
  if (WaveType==1)
  {
      Chanel[0]=0;
      Chanel[1]=0;
      Chanel[2]=0;
   }
   else
   {
      Chanel[0]=0;
      Chanel[1]=1;
      Chanel[2]=2;
   }
  for(i=0;i<Wave_Num;i++)
  {
     PDataY=AD_DATA_Y;  //bug
     
     nowY=(long)*PDataY*MaxY>>15;
     nowY=CenterY-nowY;
     for(j=0;j<N-1;j++)
     {
       tempx=j*2; 
       tempx+=10;      
       NextY=(long)*(PDataY+1)*MaxY>>15;
      // NextY+=CenterY;
       NextY=CenterY-NextY;     
       DrawLine(tempx,nowY,tempx+2,NextY,LCD_SET);
       nowY=NextY;
       Save_DataY[i][j]=*PDataY;
       PDataY++;
     }
     Save_DataY[i][j]=*PDataY;
  }  
  return 0;
}

int  DrawBand()                    //画频谱图
{
  int i,*Hight,Temp;
  int Left;
  Hight=MagAndPhase[0];
  Hight+=2;
  for(i=0;i<14;i+=2) 
  {    
       Temp=(long)(*Hight*MaxY)>>14;
       Left=(i<<4)+18; 
       FillRect(Left,CenterY+MaxY-Temp,Left+16,CenterY+MaxY,LCD_SET);
       FillRect(Left,CenterY-MaxY,Left+16,CenterY+MaxY-Temp-1,LCD_CLR);
       Hight+=4;
   }
            
  return  0;
}

int Clear_Band()
{
  int i,Left;
  for(i=0;i<14;i+=2) 
  {    
       Left=(i<<4)+18; 
       FillRect(Left,CenterY-MaxY,Left+16,CenterY+MaxY,LCD_CLR);
       
   }
  return 0;
}

int Page3_Flash(int Cursr)             //页面3切换刷新
{
 // Clear_Now_Wave();
 // Clear_Band();
//  DrawAxis(Cursr);
  if(Cursr==3)
  {
    DrawAxis(Cursr);
    DrawBand();                     //畸变率
  //  DrawAxis(Cursr);
   }
  else
  {
    Clear_Now_Wave();
    DrawAxis(Cursr);
    DrawWave(Cursr); 
    
   }
   
}

⌨️ 快捷键说明

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