📄 dispfunction.c
字号:
#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 + -