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

📄 dispfunction.c

📁 本人是刚刚毕业的学生
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "config.h"
#include "Functions.h"
#include "ZIMO.h"
extern float Max;
extern float AutoRangeChange_K0;
extern char CHAR[8];
extern INT16U ADData0[PointNumber];
extern INT16U ADData1[PointNumber];
extern uint32 X0;
extern uint32 Y0;
extern uint32 X1;
extern uint32 Y1;
extern uint32 Auto_Flag;
extern uint32 LastSignalTypeFlag;
extern uint32 ThisSignalTypeFlag;
/****************************************************************************
* 名称:GUI_OutPutChar()
* 功能:显示ASCII码,显示值为20H-7FH(若为其它值,则显示' ')。
* 入口参数: x		指定显示位置,x坐标
*           y		指定显示位置,y坐标
*           ch		要显示的ASCII码值。
* 出口参数:返回值为J_Max时表示操作成功,为0时表示操作失败。
* 说明:操作失败原因是指定地址超出有效范围。(显示格式为7*13)
****************************************************************************/
uint8  GUI_OutPutChar(uint32 x, uint32 y, uint8 ch)
{  uint32   font_dat;
   uint32   i, j, I_Max = 13, J_Max = 7;
   TCOLOR  bakc;
   if ( x>(GUI_LCM_XMAX) ) 
   { return(0);
   }
   if ( y>(GUI_LCM_YMAX) ) 
   { return(0);
   }
   if ((ch>=0x30) && (ch<=0x39))        /* ch为0-9十个数字 */
   {ch -= 0x30;
   }
   else if ((ch == 0x20) ||             /* ch为' ' */
            (ch == 0x2D) ||             /* ch为'-' */
            (ch == 0x2E) ||             /* ch为'.' */ 
            (ch == 0x48) ||             /* ch为'H' */
            (ch == 0x4B) ||             /* ch为'K' */
            (ch == 0x4D) ||             /* ch为'M' */
            (ch == 0x53) ||             /* ch为'S' */
            (ch == 0x56) ||             /* ch为'V' */
            (ch == 0x6D) ||             /* ch为'm' */
            (ch == 0x75) ||             /* ch为'u' */
            (ch == 0x7A) ||             /* ch为'z' */
            (ch == 0x00)                /* ch为箭头 */
            )
   { switch (ch)
       {  case 0x20:ch = 20; I_Max = 13, J_Max = 8;break;      /* ch为' ' */
          case 0x2D:ch = 19; I_Max = 13, J_Max = 4;break;      /* ch为'-' */
          case 0x2E:ch = 18; I_Max = 13, J_Max = 5;break;      /* ch为'.' */
          case 0x48:ch = 12; I_Max = 13, J_Max = 7;break;      /* ch为'H' */
          case 0x4B:ch = 10; I_Max = 13, J_Max = 7;break;      /* ch为'K' */
          case 0x4D:ch = 11; I_Max = 13, J_Max = 7;break;      /* ch为'M' */
          case 0x53:ch = 17; I_Max = 13, J_Max = 7;break;      /* ch为'S' */
          case 0x56:ch = 16; I_Max = 13, J_Max = 7;break;      /* ch为'V' */
          case 0x6D:ch = 14; I_Max = 13, J_Max = 7;break;      /* ch为'm' */
          case 0x75:ch = 15; I_Max = 13, J_Max = 7;break;      /* ch为'u' */
          case 0x7A:ch = 13; I_Max = 13, J_Max = 6;break;      /* ch为'z' */
          case 0x00:ch = 21; I_Max = 7,  J_Max = 5;break;      /* ch为箭头 */
       }
       }
   else                                 /* ch为其他则显示空格 */
   {ch = 20;
   }
for(i=0; i < I_Max; i++)
   { font_dat = SelectedASCII[ch][i];
       for(j=0; j < J_Max; j++)
      { if ((font_dat & DCB2HEX_TAB[j]) == 0) 
         {GUI_CopyColor(&bakc, back_color);
         }
         else
         { GUI_CopyColor(&bakc, disp_color);
         }GUI_Point(x, y, bakc); 
               x++;
}
      y++;									// 指向下一行
      x -= J_Max;								// 恢复x值
   }
return(J_Max);
}
/****************************************************************************
* 名称:GUI_OutPutString()
* 功能:输出显示字符串(没有自动换行功能)。
* 入口参数: x		指定显示位置,x坐标
*           y		指定显示位置,y坐标
*           str		要显示的ASCII码字符串
* 出口参数:无
* 说明:操作失败原因是指定地址超出有效范围。
****************************************************************************/
 void  GUI_OutPutString(uint32 x, uint32 y, char *str)
{  uint32 J_Max;
    while(1)
    {  if ((*str) == '\0' ) 
        {break;
        }
      if ((J_Max = GUI_OutPutChar(x, y, *str++)) == 0 )
        {break;
        }
       x += J_Max;								// 下一个字符显示位置,y不变(即不换行)
    }
}
void GUI_DrawTable(void)
{   uint32 First_X = X0;
    uint32 First_Y = Y0;
    uint32 Last_X = X1;
    uint32 Last_Y = Y1;
    TCOLOR colour = WHITE;
    uint32 x, y;
    for (x = First_X; x <= Last_X; x += 24)                 /* 在整个波形显示区域内每隔5个点打一个白点 */
	{for (y = First_Y; y <= Last_Y; y += 6)
	    { GUI_Point(x,y,colour);
        }
	}
for (y = First_Y; y <= Last_Y; y += 24)                 /* 在整个波形显示区域内每隔5个点打一个白点 */
	{for (x = First_X; x <= Last_X; x += 6)
	    {GUI_Point(x,y,colour);
        }
	}	for (x = First_X + 6; x <= Last_X - 5; x += 6)                /* 绘制上边框和下边框刻度,以及中间刻度线 */
	{GUI_Point(x,First_Y+1,colour);             /*  绘制上边框刻度 */
		GUI_Point(x,First_Y+2,colour);
		GUI_Point(x,Last_Y-1,colour);            /*  绘制下边框刻度 */
		GUI_Point(x,Last_Y-2,colour);
	    GUI_Point(x,(First_Y+Last_Y)/2+1,colour);       /*  绘制中间刻度线 */
		GUI_Point(x,(First_Y+Last_Y)/2,colour);
		GUI_Point(x,(First_Y+Last_Y)/2+2,colour);
	 }
for (y = First_Y + 6; y <= Last_Y - 5; y += 6)           /* 绘制左边框和右边框刻度,以及中间刻度线 */
	 {GUI_Point(First_X+1,y,colour);     /*  绘制左边框刻度 */
		 GUI_Point(First_X+2,y,colour);
	     GUI_Point(Last_X-1,y,colour);     /*  绘制右边框刻度 */
		 GUI_Point(Last_X-2,y,colour);	
		 GUI_Point((First_X+Last_X)/2+1,y,colour);  /*  绘制中间刻度线 */
		 GUI_Point((First_X+Last_X)/2,y,colour);
		 GUI_Point((First_X+Last_X)/2+2,y,colour);
	 }
	for (x = First_X; x <= Last_X; x++)                 /* 绘制上下两个白线框 */	
	 {GUI_Point(x,First_Y,colour);
GUI_Point(x,Last_Y,colour);
	 }
	for (y = First_X; y <= Last_Y; y++)               /* 绘制左右两个白线框 */
	 { GUI_Point(First_X,y,colour);
		 GUI_Point(Last_X,y,colour);
	 }
}
float AutoRangeChange(float biggerone)
{{if (biggerone >= (1024 * 2 / 3.3))         /* 被测信号电压幅值最大为4伏 */
	    {AutoRangeChange_K0 = (93 * 3.3 / 1024) / 4.0;
	       GUI_OutPutString(0,5,"    ");
	       GUI_OutPutString(21,5,"V");
	       GUI_OutPutString(1,115,"   ");
	       GUI_OutPutString(17,115,"0");
	       GUI_OutPutString(1,91,"   ");
		   GUI_OutPutString(17,91,"1");
		   GUI_OutPutString(1,67,"   ");
		   GUI_OutPutString(17,67,"2");
	       GUI_OutPutString(1,43,"   ");
		   GUI_OutPutString(17,43,"3");
		   GUI_OutPutString(1,19,"   ");
	       GUI_OutPutString(17,19,"4");
		   GUI_OutPutString(1,139,"   ");
		   GUI_OutPutString(13,139,"-1");
		   GUI_OutPutString(1,163,"   ");
		   GUI_OutPutString(13,163,"-2");
		   GUI_OutPutString(1,187,"   ");
		   GUI_OutPutString(13,187,"-3");
		   GUI_OutPutString(1,210,"   ");
		   GUI_OutPutString(13,210,"-4");
	    }
	    else if (biggerone >= (1024 * 0.8 / 3.3) && biggerone <= (1024 * 2 / 3.3))     /* 被测信号电压幅值最大为2伏 */
	    {AutoRangeChange_K0 = (93 * 3.3 / 1024) / 2.0;
	         GUI_OutPutString(0,5,"    ");
	         GUI_OutPutString(21,5,"V");
	         GUI_OutPutString(0,115,"   ");
	         GUI_OutPutString(17,115,"0");
	         GUI_OutPutString(1,91,"   ");
		     GUI_OutPutString(5,91,"0.5");
		     GUI_OutPutString(1,67,"   ");
		     GUI_OutPutString(17,67,"1");
		     GUI_OutPutString(1,43,"   ");
		     GUI_OutPutString(5,43,"1.5");
		     GUI_OutPutString(1,19,"   ");
		     GUI_OutPutString(17,19,"2");
		     GUI_OutPutString(1,139,"   ");
		     GUI_OutPutString(0,139,"-0.5");
		     GUI_OutPutString(1,163,"   ");
		     GUI_OutPutString(13,163,"-1");
		     GUI_OutPutString(1,187,"   ");
		     GUI_OutPutString(0,187,"-1.5");
		     GUI_OutPutString(1,210,"   ");
		     GUI_OutPutString(13,210,"-2");
 }
	 else if (biggerone >= (1024 * 0.4 / 3.3) && biggerone <= (1024 * 0.8 / 3.3))    	      
	 {AutoRangeChange_K0 = (93 * 3.3 / 1024) / 0.8;
	          GUI_OutPutString(0,5,"    ");
	           GUI_OutPutString(17,5,"mV");
	           GUI_OutPutString(1,115,"   ");
	           GUI_OutPutString(17,115,"0");
	           GUI_OutPutString(1,91,"   ");
		       GUI_OutPutString(4,91,"200");
    	       GUI_OutPutString(1,67,"   ");
		       GUI_OutPutString(4,67,"400");
		       GUI_OutPutString(1,43,"   ");
		       GUI_OutPutString(4,43,"600");
		       GUI_OutPutString(1,19,"   ");
		       GUI_OutPutString(4,19,"800");
		       GUI_OutPutString(1,139,"   ");
		       GUI_OutPutString(0,139,"-200");
		       GUI_OutPutString(1,163,"   ");
		       GUI_OutPutString(0,163,"-400");
		       GUI_OutPutString(1,187,"   ");
		       GUI_OutPutString(0,187,"-600");
		       GUI_OutPutString(1,210,"   ");
		       GUI_OutPutString(0,210,"-800");	          
	      }
	      else                               /* 被测信号电压幅值最大为400毫伏 */
	      {    AutoRangeChange_K0 = (93 * 3.3 / 1024) / 0.4;
	           GUI_OutPutString(0,5,"    ");
	           GUI_OutPutString(17,5,"mV");
	           GUI_OutPutString(1,115,"   ");
	           GUI_OutPutString(17,115,"0");
	           GUI_OutPutString(1,91,"   ");
		       GUI_OutPutString(4,91,"100");
		       GUI_OutPutString(1,67,"   ");
		       GUI_OutPutString(4,67,"200");
		       GUI_OutPutString(1,43,"   ");
		       GUI_OutPutString(4,43,"300");
		       GUI_OutPutString(1,19,"   ");
		       GUI_OutPutString(4,19,"400");
		       GUI_OutPutString(1,139,"   ");
		       GUI_OutPutString(0,139,"-100");
		       GUI_OutPutString(1,163,"   ");
		       GUI_OutPutString(0,163,"-200");
		       GUI_OutPutString(1,187,"   ");
		       GUI_OutPutString(0,187,"-300");
		       GUI_OutPutString(1,210,"   ");
		       GUI_OutPutString(0,210,"-400");	          
	       }
	       Auto_Flag = 0;
           }
       return AutoRangeChange_K0;
}
void SignalTypeMessage(void)
{uint32 X = 0;
     uint32 i = 0;
     switch (ThisSignalTypeFlag)  
     {  case DC_Wave :                                /* 被测信号为直流信号*/    
{ if (ThisSignalTypeFlag != LastSignalTypeFlag)
              { LastSignalTypeFlag = ThisSignalTypeFlag;
                  ChangeBlockColour(25, 217, 265, 240, BLUE);
                  X = (X1 - X0 - 9 * 16) / 2;
                  while (i < 9)
                  {while (i < 5)
                      { GUI_LoadPic(25 + i * 16 + X,220,*(MessageWord + i),16,16);                          i++;
                      }
                      while (i < 7)
                    {GUI_LoadPic(25 + i * 16 + X,220,*(SignalTypeWord + i - 1),16,16);                          i++;

⌨️ 快捷键说明

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