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

📄 说明.txt

📁 在arm上模拟数字示波器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
         {
          if(i<(x*320/num+320/(num*2))) wave[i] = (a*num/320)*(i-x*320/num);
          else wave[i] = a-(a*num/320)*(i-x*320/num);
         }
      }
  }
/**********generate sawtooth wave**********/
void Sawtoothwave(int *wave,int a,int num)     //锯齿波发生器
  { //create the sawtooth wave
    int x,i;
    ClearnWaveBuff(wave);
    for (x=0;x<num;x++) 
      {
       for(i=x*320/num;i<(x+1)*320/num;i++)
         {
          wave[i] = a-(a*num/285)*(i-x*320/num);
         }
      }
  }
/**********draw wave**********/
void DrawWave(int x0,int y0,int a,int *wave,int colour)    //在液晶屏上绘制波形
  {//x0,y0是坐标的原点,a波形的幅值,用于确定波形的位置
   //U32 p[320];
   int shift,x,i=0;
   shift = (y0-a)/2;
   while(i<10)
    { 
     i++;
     Set_Color(colour);
     for (x=x0+6;x<318;x++)
     Draw_Line (x,wave[x-x0-6]+shift,x+1,wave[x+1-x0-6]+shift);
     Delay(300);
     Set_Color   (GUI_BLUE);
     for (x=x0+6;x<318;x++)
     Draw_Line (x,wave[x-x0-6]+shift,x+1,wave[x+1-x0-6]+shift);
     Delay(200);
     //new wave
     /*
     for (x=1;x<5;x++)
       p[x]=wave[x];
     for (x=1;x<315;x++)
       wave[x]=wave[x+4];
     for (x=315;x<319;x++)
       wave[x]=p[x-314];
    */   
    } 
  }

 /**********display number****************/
void dispNum(int x,int y,int colour,int number)    //在液晶屏上显示数字
  { 
    switch (number)
      {
       case 0:
         DisplayCharacter(x,y,colour,ASCII_0);
         break;
       case 1:
         DisplayCharacter(x,y,colour,ASCII_1);
         break;
       case 2:
         DisplayCharacter(x,y,colour,ASCII_2);
         break;
       case 3:
         DisplayCharacter(x,y,colour,ASCII_3);
         break; 
       case 4:
         DisplayCharacter(x,y,colour,ASCII_4);
         break;
       case 5:
         DisplayCharacter(x,y,colour,ASCII_5);
         break;
       case 6:
         DisplayCharacter(x,y,colour,ASCII_6);
         break;
       case 7:
         DisplayCharacter(x,y,colour,ASCII_7);
         break; 
       case 8:
         DisplayCharacter(x,y,colour,ASCII_8);
         break;
       case 9:
         DisplayCharacter(x,y,colour,ASCII_9);
         break;
       default:
         break;        
      }      
  }
 
 /**********display amp****************/
void DispRange(int x,int y,int row)         //波形幅度(纵轴)调整函数
 { 
  DisplayCharacter(x,y,GUI_YELLOW,Character1); 
  DisplayCharacter(x+20,y,GUI_YELLOW,Character3); 
  DisplayCharacter(x+40,y,GUI_YELLOW,Character8);
  dispNum(x+50,y,GUI_GREEN,row/1000);
  dispNum(x+65,y,GUI_GREEN,(row%1000)/100);
  dispNum(x+80,y,GUI_GREEN,((row%1000)%100)/10);
  dispNum(x+95,y,GUI_GREEN,((row%1000)%100)%10);
  DisplayCharacter(x+110,y,GUI_YELLOW,ASCII_m);
  DisplayCharacter(x+125,y,GUI_YELLOW,ASCII_v);  
 }
 /**********display time****************/
void DispTime(int x,int y,int clolumn)        //时间(横轴)调整函数
 { 
  DisplayCharacter(x,y,GUI_YELLOW,Character2); 
  DisplayCharacter(x+20,y,GUI_YELLOW,Character3); 
  DisplayCharacter(x+40,y,GUI_YELLOW,Character8); 
  dispNum(x+50,y,GUI_GREEN,clolumn/1000);
  dispNum(x+65,y,GUI_GREEN,(clolumn%1000)/100);
  dispNum(x+80,y,GUI_GREEN,((clolumn%1000)%100)/10);
  dispNum(x+95,y,GUI_GREEN,((clolumn%1000)%100)%10); 
  DisplayCharacter(x+110,y,GUI_YELLOW,ASCII_m);
  DisplayCharacter(x+125,y,GUI_YELLOW,ASCII_s); 
 }
  /**********display time****************/
void DispAttrib(int x,int y,int attrib)         //图形属性切换函数
 { 
  DisplayCharacter(x,y,GUI_YELLOW,Character13); 
  DisplayCharacter(x+20,y,GUI_YELLOW,Character14); 
  DisplayCharacter(x+40,y,GUI_YELLOW,Character9); 
  DisplayCharacter(x+60,y,GUI_YELLOW,Character10); 
  DisplayCharacter(x+80,y,GUI_YELLOW,Character8); 
  switch (attrib)
    {
     case 0:
       DisplayCharacter(x+90,y,GUI_YELLOW,Character17);
       break;
     case 1:
       DisplayCharacter(x+90,y,GUI_YELLOW,Character18);
       break;
     default:
       break; 
    } 
  DisplayCharacter(x+110,y,GUI_YELLOW,Character19); 
 }
  /**********display time****************/
void DispStatus(int x,int y,int status)           //键盘状态显示函数
 { 
  DisplayCharacter(x,y,GUI_YELLOW,Character15); 
  DisplayCharacter(x+20,y,GUI_YELLOW,Character16); 
  DisplayCharacter(x+40,y,GUI_YELLOW,Character11); 
  DisplayCharacter(x+60,y,GUI_YELLOW,Character12); 
  DisplayCharacter(x+80,y,GUI_YELLOW,Character8);
  switch (status)
    {
     case 0:
       DisplayCharacter(x+90,y,GUI_YELLOW,Character1);
       DisplayCharacter(x+110,y,GUI_YELLOW,Character3);
       break;
     case 1:
       DisplayCharacter(x+90,y,GUI_YELLOW,Character2);
       DisplayCharacter(x+110,y,GUI_YELLOW,Character3);
       break;
     case 2:
       DisplayCharacter(x+90,y,GUI_YELLOW,Character13);
       DisplayCharacter(x+110,y,GUI_YELLOW,Character14);
       break;
     default:
       break;       
    } 
 }
//****************Main*********************//
void DispWave(void)      //图形显示过程函数
  {
   int wave[320],i=0,column=5,row=1,attrib=1,key =0,alt,demo=1;
   coordinate(10,180,5);
   key_number = 0xfe;
   while(1)
     {
 	   if(key_number !=0xff)
 	       {
	 	     switch (key_number)  //判断键盘是否有键按下
	 	     {
	 	      case 15:     //按下的功能切换键
	 	        key++;
	 	        if(key>2) key = 0;
	 	        break;
	 	      case 6:     //按下的是上升键
	 	        switch (key)
	 	          {
	 	           case 0:
	 	             row++;
	 	             if(row>10) row =10;
	 	             break;
	 	           case 1:
	 	             column++;
	 	             if(column>10) column =10;
	 	             break;
	 	           case 2:
	 	             attrib++;
	 	             if(attrib>1) attrib =0;
	 	             break;
	 	           default:
	 	             break;  
	 	          }
	 	        break;
	 	      case 4:     //按下的是下降键
	 	        switch (key)
	 	          {
	 	           case 0:
	 	             row--;
	 	             if(row<1) row =1;
	 	             break;
	 	           case 1:
	 	             column--;
	 	             if(column<1) column =1;
	 	             break;
	 	           case 2:
	 	             attrib--;
	 	             if(attrib<0) attrib =1;
	 	             break;
	 	           default:
	 	             break;
	 	          }      
	 	        break;
	 	      case 0:
	 	        demo++;
	 	        if(demo>1) demo = 0; 
	 	        break; 
	 	      default:
	 	        break;     
	 	     }
	 	    key_number = 0xff;
	 	    DispRange(15,210,row*100);
		    DispTime(170,210,column*100);
		    DispAttrib(15,230,attrib);
		    DispStatus(170,230,key);
 	       }
 	   if(demo)
	     {
	      i++;
	      if (i==4) i=0;
	      switch (i)
	        {
	         case 0:
	           Squarewave(wave,170/row,2*column);
	           break;
	         case 1:
	           Sawtoothwave(wave,170/row,2*column);
	           break;
	         case 2:
	           Trianglewave(wave,340/row,2*column);
	           break;
	         case 3:
	           Sinwave(wave,170/row,2*column);
	           break;      
	         default:
	           break;   
	        }
	      }
	   else
	     {
	      ClearnWaveBuff(wave); 
	      WriteAdToBuff(wave,320); //将AD转换结果保存
	     }          
	   if(!attrib)
	        {
	         kfft(wave,8,0,1);
	         for(alt=106;alt<320;alt++) wave[alt] = wave[106];
	         for(alt=106;alt>0;alt--)
	           {
	            wave[2*alt] = wave[alt];
	            wave[2*alt+1] = wave[alt];
	            wave[3*alt+2] = wave[alt];
	           }
	        }
	   DrawWave(10,180,170/row,wave,GUI_YELLOW);
	 } 
  }
void Main(void)      //主函数
{	
 Target_Init();       //CPU板初始化函数 
 GUI_Init();          //GUI图形接口初始化 
 DispWave();          //绘制图形
}

⌨️ 快捷键说明

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