考试总算考完了大半,终于有时间写帖子了。
这段时间吧程序改成了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值的范围会有所不同,压缩变换时的算法根据实际情况做相应的调整。
下一步打算做一个扩展板,毕竟用杜邦线看起来实在是太乱了,也是作为最后压轴上场的最终版“跳动的心”
最后附上本帖配套的程序

我要赚赏金
