这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 之二OLED波形显示(FREERTOS)

共1条 1/1 1 跳转至

之二OLED波形显示(FREERTOS)

助工
2018-12-16 15:38:56     打赏

考试总算考完了大半,终于有时间写帖子了。

这段时间吧程序改成了FREERTOS版本了,加入OS后多任务处理起来会方便许多,ADC采样并计算心率创建一个任务,波形显示创建一个任务,还有一个任务用来翻转led提示系统正在运行。

心率的采样和计算在上一章帖子里已经一直好了,这次只需要复制过来即可。本次的重点是波形的OLED 显示。不过效果并不像在示波器和上位机上那样理想,毕竟像素只有128*64。

先上显示部分的程序,如下:

void Show_Pulse()
{
    u8 cur=Cur,i;
    OLED_CLS();
    if(cur<127)
    {
        i=cur+128;
        for(; i!=0; i++)
        {
            if(Pulser[i] < 1900 || Pulser[i] > 2300)continue;
            else OLED_PutPixel(i-cur-128,64-(Pulser[i]-1900)/7);
        }
        i=0;
        for(; i<cur; i++)
        {
            if(Pulser[i] < 1900 || Pulser[i] > 2300)continue;
            else OLED_PutPixel(i-cur+128,64-(Pulser[i]-1900)/7);
        }
    }
    else
    {
        i=cur-128;
        for(; i<cur; i++)
        {
            if(Pulser[i] < 1900 || Pulser[i] > 2300)continue;
            else OLED_PutPixel(i-cur+128,64-(Pulser[i]-1900)/7);
        }
    }
}

OLED 屏幕的显示列数为128,所以我定义的波形缓存为256点。OLED刷新频率为10Hz。每次刷新时先获取ADC缓存到哪一个点了,然后将前128个点用打点函数更新即可,注意如何正确的获取前128 点。然后还有一个问题是压缩变换,将读到到ADC值压缩变换到0-63范围内,因为OLED 只有64行,由于制造厂家的不同,ADC值的范围会有所不同,压缩变换时的算法根据实际情况做相应的调整。

下一步打算做一个扩展板,毕竟用杜邦线看起来实在是太乱了,也是作为最后压轴上场的最终版“跳动的心”

最后附上本帖配套的程序

跳动的心V1.2.rar




关键词: 波形     显示     FREERTOS    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]