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

📄 dso.c

📁 STM32手持式示波器源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		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 + -