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

共55条 1/6 1 2 3 4 5 6 ›| 跳转至

之二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    

菜鸟
2018-12-16 20:57:40     打赏
2楼

终于等到好文!!

向你学习!!


管理员
2018-12-17 09:19:27     打赏
3楼

楼主棒棒哒


菜鸟
2018-12-17 19:34:24     打赏
4楼

image.png

这是什么意思?


菜鸟
2018-12-17 19:37:15     打赏
5楼

能贴硬件图 么


高工
2018-12-19 20:20:51     打赏
6楼

不错不错哦~期待更新


专家
2022-01-21 10:47:14     打赏
7楼

不错不错


高工
2022-01-21 10:51:58     打赏
8楼

感谢分享,学习学习


专家
2022-01-22 13:39:30     打赏
9楼

感谢分享


专家
2022-01-22 13:44:39     打赏
10楼

感谢分享,学习学习


共55条 1/6 1 2 3 4 5 6 ›| 跳转至

回复

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