ocGUI编写(5)--波形发生以及坐标轴创建

二维码是我创建的QQ群,欢迎新朋友加入。

上午还在纠结这个功能要不要,感觉有点鸡肋

先看看实物,简单做了三个波形显示,正弦波、三角波、方波

三个图形都是软件产生波形,然后调用同一个波形绘制函数

目前接口函数有几个

/**********************************************
	* @brief  :获取不同点数的正弦波数据
	* @param  :point: 一周期内的取样点数
  * @param  :maxnum: 一周期内输出最大值
	* @param  :table: 数据存放指针
	* @note :
	* @retval :无
**********************************************/
void ocGetSinTab(uint32_t point,int32_t *table);

/**********************************************
	* @brief  :产生方波信号
	* @param  :point: 一周期内的取样点数
  * @param  :maxnum: 一周期内输出最大值
	* @param  :duty: 占空比
	* @param  :table: 数据存放指针
	* @note :
	* @retval :无
**********************************************/
void ocGetPwm(uint32_t point,uint8_t duty,int32_t *table);

/**********************************************
	* @brief  :产生三角波信号
	* @param  :point: 一周期内的取样点数
  * @param  :maxnum: 一周期内输出最大值
	* @param  :duty: 占空比
	* @param  :table: 数据存放指针
	* @note :
	* @retval :无
**********************************************/
void ocGetTriangle(uint32_t point,uint8_t duty,int32_t *table);
	
/**********************************************
	* @brief  :绘制任意波形
	* @param  :inData :将要绘制的目标数据
  * @param  :dataLen :有效数据长度
	* @note :
	* @retval :无
**********************************************/
uint8_t ocDrawWave(int32_t *inData,uint16_t dataLen);

/**********************************************
	* @brief  :绘制一个坐标系
	* @param  :inData :将要绘制的目标数据
  * @param  :dataLen :有效数据长度
	* @note :
	* @retval :无
**********************************************/
void ocCoordinate(int32_t *inData,uint16_t dataLen);

 

比较折腾的是波形的绘制函数

/**********************************************
	* @brief  :绘制任意波形
	* @param  :inData :将要绘制的目标数据
  * @param  :dataLen :有效数据长度
	* @note :
	* @retval :无
**********************************************/
uint8_t ocDrawWave(int32_t *inData,uint16_t dataLen)
{
	uint32_t showColor,temp,step;
	uint16_t i=0,j=0;
	
	showColor = ocFontSet.textColor;
	
	ocFontSet.textColor = OCCLEAR_COLOR;
	step = xWaveLen/coMemorySize;
	//清除显示窗口数据
	for(i = 0; i < coMemorySize; i++)
	{
		ocDrawUniLine(xWaveOrigin + i*step,
									yWaveOrigin - waveBuff[i],
		              xWaveOrigin + (i+1)*step,
		              yWaveOrigin - waveBuff[i+1]);
	}
	
	ocFontSet.textColor = showColor;
	//显示数据整理
	for(i=0;i < dataLen;i++)
	{
		//数据填充缓存BUFF
		waveBuff[ocWave.waveWrite] = inData[i];
		ocWave.waveWrite ++;
		
		//缓存FIFO已经填充满
		if(ocWave.waveWrite > coMemorySize)
		{
			temp = ocWave.updatePos - (dataLen - i);
			for(j = 0;j < temp;j++)
			{
				waveBuff[j] = waveBuff[j + coMemorySize - temp];
			}
			ocWave.waveWrite = temp;
		}
	}
	
	temp = xWaveLen/coMemorySize;
	//绘制获取的波形数据
	for(i = 0; i < ocWave.waveWrite - 1; i++)
	{
		ocDrawUniLine(xWaveOrigin + i*step,
									yWaveOrigin - waveBuff[i],
		              xWaveOrigin + (i+1)*step,
		              yWaveOrigin - waveBuff[i+1]);
	}

	return oc_OK;
}

猜你喜欢

转载自blog.csdn.net/Jun626/article/details/81414270
今日推荐