二维码是我创建的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;
}