📄 dso.c
字号:
if (KeyCode > 0)
{
/* 有键按下 */
switch (KeyCode)
{
case KEY_DOWN_JOY_LEFT: /* 摇杆LEFT键按下 */
case KEY_DOWN_JOY_RIGHT: /* 摇杆RIGHT键按下 */
case KEY_DOWN_WAKEUP:
case KEY_DOWN_USER:
case KEY_DOWN_JOY_OK: /* 摇杆OK键 */
/* 退出,进入全速运行状态 */
*pMainStatus = S_RUN;
break;
case KEY_DOWN_JOY_UP: /* 摇杆UP键按下 */
bright += BRIGHT_STEP;
if (bright > BRIGHT_MAX)
{
bright = BRIGHT_MAX;
}
SetBackLight(bright);
break;
case KEY_DOWN_JOY_DOWN: /* 摇杆DOWN键按下 */
if (bright < BRIGHT_STEP)
{
bright = 0;
}
else
{
bright -= BRIGHT_STEP;
}
SetBackLight(bright);
break;
default:
break;
}
}
}
}
/*******************************************************************************
* 函数名: DispFrame
* 输 入: 无
* 输 出: 无
* 功 能:显示波形窗口的边框和刻度线
*/
static void DispFrame(void)
{
uint16_t x, y;
LCD_SetTextColor(White); /* 选择白色 */
/* 绘制一个实线矩形框 x, y, h, w */
LCD_DrawRect(9, 19, 202, 302);
/* 绘制垂直刻度点 */
for (x = 0; x < 13; x++)
{
for (y = 0; y < 41; y++)
{
LCD_PutPixel(10 + (x * 25), 20 + (y * 5), White);
}
}
/* 绘制水平刻度点 */
for (y = 0; y < 9; y++)
{
for (x = 0; x < 61; x++)
{
LCD_PutPixel(10 + (x * 5), 20 + (y * 25), White);
}
}
/* 绘制垂直中心刻度点 */
for (y = 0; y < 41; y++)
{
LCD_PutPixel(9 + (6 * 25), 20 + (y * 5), White);
LCD_PutPixel(11 + (6 * 25), 20 + (y * 5), White);
}
/* 绘制水平中心刻度点 */
for (x = 0; x < 61; x++)
{
LCD_PutPixel(10 + (x * 5), 19 + (4 * 25), White);
LCD_PutPixel(10 + (x * 5), 21 + (4 * 25), White);
}
}
/*******************************************************************************
* 函数名: DispButton
* 输 入: 无
* 输 出: 无
* 功 能:显示波形窗口右边的功能按钮(待扩展)
*/
static void DispButton(void)
{
LCD_SetTextColor(White); /* 选择白色 */
/* 绘制一个实线矩形框 x, y, h, w */
LCD_DrawRect(320, 19, 25, 70);
LCD_DisplayString(323, 24, "扩展按钮");
LCD_DrawRect(320, 55, 25, 70);
LCD_DisplayString(323, 60, "扩展按钮");
}
/*******************************************************************************
* 函数名: DispCh1Wave
* 输 入: 无
* 输 出: 无
* 功 能:显示通道1波形
*/
static void DispCh1Wave(void)
{
int16_t i; /* 有符号数 */
//uint16_t pos;
uint16_t *px;
uint16_t *py;
int16_t iTemp;
static uint8_t s_DispFirst = 0; /* 用于第一次调用时刷屏 */
/* 显示通道1电平标记 */
{
static uint16_t y = 70;
LCD_SetTextColor(Blue); /* 选择蓝色 */
LCD_DrawLine(1, y, 6, Horizontal);
y = g_DSO.Ch1VOffset;
if (y < 20)
{
y = 20;
}
else if (y > 220)
{
y = 220;
}
LCD_SetTextColor(Yellow); /* 选择白色 */
LCD_DrawLine(1, y, 6, Horizontal);
}
if (s_DispFirst == 0)
{
s_DispFirst = 1;
LCD_Clear(Blue); /* 清屏,背景蓝色 */
}
if (g_DSO.BufUsed == 0)
{
g_DSO.BufUsed = 1;
}
else
{
g_DSO.BufUsed = 0;
}
if (g_DSO.BufUsed == 0)
{
px = g_DSO.xCh1Buf1;
py = g_DSO.yCh1Buf1;
}
else
{
px = g_DSO.xCh1Buf2;
py = g_DSO.yCh1Buf2;
}
/* 计算当前最新的数据位置,向前递减400个样本 */
//pos = SAMPLE_COUNT - DMA_GetCurrDataCounter(DMA1_Channel1);
//pos = 0;
/* CH1通道, 输入0V时,ADC采样值 = 1872 */
for (i = 0; i < 300; i++)
{
px[i] = 10 + i;
iTemp = g_DSO.Ch1VOffset + (int16_t)((1872 - g_DSO.Ch1Buf[i + 1]) * 10) / g_DSO.Ch1Attenuation;
if (iTemp > 220)
{
iTemp = 220;
}
else if (iTemp < 20)
{
iTemp = 20;
}
py[i] = iTemp;
}
/* 清除上帧波形 */
if (g_DSO.BufUsed == 0)
{
LCD_DrawPoints(g_DSO.xCh1Buf2, g_DSO.yCh1Buf2, 300, Blue);
}
else
{
LCD_DrawPoints(g_DSO.xCh1Buf1, g_DSO.yCh1Buf1, 300, Blue);
}
/* 显示更新的波形 */
LCD_DrawPoints((uint16_t *)px, (uint16_t *)py, 300, Yellow);
}
/*******************************************************************************
* 函数名: DispCh2Wave
* 输 入: 无
* 输 出: 无
* 功 能:显示通道2波形
*/
static void DispCh2Wave(void)
{
int16_t i; /* 有符号数 */
//uint16_t pos;
uint16_t *px;
uint16_t *py;
int16_t iTemp;
/* 显示通道2电平标记 */
{
static uint16_t y = 170;
LCD_SetTextColor(Blue); /* 选择蓝色 */
LCD_DrawLine(1, y, 6, Horizontal);
y = g_DSO.Ch2VOffset;
if (y < 20)
{
y = 20;
}
else if (y > 220)
{
y = 220;
}
LCD_SetTextColor(Green); /* 选择白色 */
LCD_DrawLine(1, y, 6, Horizontal);
}
if (g_DSO.BufUsed == 0)
{
px = g_DSO.xCh2Buf1;
py = g_DSO.yCh2Buf1;
}
else
{
px = g_DSO.xCh2Buf2;
py = g_DSO.yCh2Buf2;
}
/* 计算当前最新的数据位置,向前递减400个样本 */
//pos = SAMPLE_COUNT - DMA_GetCurrDataCounter(DMA2_Channel5);
//pos = 0;
for (i = 0; i < 300; i++)
{
px[i] = 10 + i;
iTemp = g_DSO.Ch2VOffset + (int16_t)((1872 - g_DSO.Ch2Buf[i + 1]) * 10) / g_DSO.Ch2Attenuation;
if (iTemp > 220)
{
iTemp = 220;
}
else if (iTemp < 20)
{
iTemp = 20;
}
py[i] = iTemp;
}
/* 清除上帧波形 */
if (g_DSO.BufUsed == 0)
{
LCD_DrawPoints(g_DSO.xCh2Buf2, g_DSO.yCh2Buf2, 300, Blue);
}
else
{
LCD_DrawPoints(g_DSO.xCh2Buf1, g_DSO.yCh2Buf1, 300, Blue);
}
/* 显示更新的波形 */
LCD_DrawPoints((uint16_t *)px, (uint16_t *)py, 300, Green);
}
/*******************************************************************************
* 函数名: DispChInfo
* 输 入: 无
* 输 出: 无
* 功 能:显示通道信息
*/
static void DispChInfo(void)
{
char buf[32]; /* 字符显示缓冲区 */
/* 显示示波器程序版本 */
LCD_SetTextColor(White); /* 白字 */
LCD_SetBackColor(Blue); /* 蓝底 */
LCD_DisplayString(10, 2, DSO_VER);
/* 显示通道1信息 */
if (g_DSO.Ch1DC == 1)
{
strcpy(buf, "CH1 DC ");
}
else
{
strcpy(buf, "CH1 AC ");
}
if (g_DSO.Ch1VScale >= 1000)
{
sprintf(&buf[7], "%d.00V", g_DSO.Ch1VScale / 1000);
}
else
{
sprintf(&buf[7], "%dmV", g_DSO.Ch1VScale);
}
if (g_DSO.ActiveCH == 1)
{
LCD_SetTextColor(Yellow); /* 白字 */
LCD_SetBackColor(Magenta); /* 蓝底 */
}
else
{
LCD_SetTextColor(Yellow); /* 黄字 */
LCD_SetBackColor(Blue); /* 蓝底 */
}
LCD_DisplayString(10, 224, (uint8_t *)buf);
/* 显示通道2信息 */
LCD_SetTextColor(Red); /* CH2 红色 */
if (g_DSO.Ch2DC == 1)
{
strcpy(buf, "CH2 DC ");
}
else
{
strcpy(buf, "CH2 AC ");
}
if (g_DSO.Ch2VScale >= 1000)
{
sprintf(&buf[7], "%d.00V", g_DSO.Ch2VScale / 1000);
}
else
{
sprintf(&buf[7], "%dmV", g_DSO.Ch2VScale);
}
if (g_DSO.ActiveCH == 2)
{
LCD_SetTextColor(Green); /* 红字 */
LCD_SetBackColor(Magenta); /* 蓝底 */
}
else
{
LCD_SetTextColor(Green); /* 红字 */
LCD_SetBackColor(Blue); /* 蓝底 */
}
LCD_DisplayString(120, 224, (uint8_t *)buf);
/* 显示时基 */
LCD_SetTextColor(White); /* 时基白色 */
LCD_SetBackColor(Blue); /* 蓝底 */
if (g_DSO.TimeBase < 1000)
{
sprintf(buf, "Time %3dus", g_DSO.TimeBase);
}
else if (g_DSO.TimeBase < 1000000)
{
sprintf(buf, "Time %3dms", g_DSO.TimeBase / 1000);
}
else
{
sprintf(buf, "Time %3ds ", g_DSO.TimeBase / 1000000);
}
LCD_DisplayString(230, 224, (uint8_t *)buf);
/* 显示调节模式 */
LCD_SetTextColor(White); /* 白字 */
LCD_SetBackColor(Blue); /* 蓝底 */
if (g_DSO.AdjustMode == 1)
{
LCD_DisplayString(245, 2, (uint8_t *)"调节位置");
}
else
{
LCD_DisplayString(245, 2, (uint8_t *)"调节幅度");
}
sprintf(buf, "采样频率:%7dHz", g_DSO.SampleFreq);
LCD_DisplayString(75, 2, (uint8_t *)buf);
}
/*******************************************************************************
* 函数名: DispDSO
* 输 入: 无
* 输 出: 无
* 功 能:刷新整个窗口
*/
static void DispDSO(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -