LCD 简易画波形(低配)

目录

基本准备

画波形图(适合时域波形绘制)

参数说明:

绘制过程:

画柱状图(画频谱图)

参数说明:

绘制过程:

效果展示


基本准备

主要利用LCD驱动中的画点和画连线函数,驱动为正点原子的lcd.h

void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color);  //点的坐标x、y和点的颜色
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //起始点x1、y1和终点x2、y2

更换画笔的颜色可以用更改全局变量的方式

POINT_COLOR=WHITE;  //可设置颜色为WHITE、RED、BLACK、BLUE等等

刷屏时将屏幕刷为白色

LCD_Clear(WHITE);

画波形图(适合时域波形绘制)

参数说明:

Num为传入数据的点数; xis波形的中心轴(0轴); data传入的数据

以下参数在需要时可以作为函数参数传入:

pix波形x方向的拉伸,pix越大往外侧拉伸,但对于固定点数据而言会降低采样率

reduce,y方向拉伸,y方向不能大于屏幕的分辨率否则不能正常显示,以此处取纵向显示为例,以120为中心0轴,那y取值不超过±120,若对于±10V的信号采样,则可取单位为0.1V

blac_spacey,为了方便在波形区域显示一些信息,可以预留一部分屏幕不被刷新,减少显示的闪烁

绘制过程:

LCD_DrawWave_c(x,y);

该函数作用是绘制先后调用传入两个坐标轴之间画直线,例如第一次调用传入(1,5),第二次(3,8),就会在这两点之间画出连线,这个函数用起来比较方便,但开始和结束的时候需要特殊处理一下,我个人是画完一帧完整波形后将点固定在0轴尾端,下次开始调用在0轴开始位置,刚好顺带画出了0轴的位置

绘制过程大概是先将该列清屏,也就是在该列画一个跟底色相同的线即可,然后换回正常颜色,开始调用LCD_DrawWave_c函数画波形,依次循环。比起画完一帧完整图像后清屏再画下一帧的方式相比,这种方法不会闪屏,波形看起来比较流畅。

代码如下(说明:该lcd分辨率240x320)

void LCD_DrawWave_wave(uint16_t Num,uint16_t xis,float data[]){
        uint16_t i;
        uint16_t pix=8;  //波形拉伸(时间轴)
        uint16_t reduce=100; 波形拉伸(幅值轴)
        uint16_t blac_spacey=16;  //y(竖直方向)的预留空白区域
    
    //LCD_Clear(WHITE);
        POINT_COLOR=WHITE;  //设置字体为WHITE 
        LCD_DrawWave_c(xis,blac_spacey);
        POINT_COLOR=BLUE;   //设置字体为蓝色  
        for (i=blac_spacey;i*pix<Num;i++){
            POINT_COLOR=WHITE;  //设置字体为WHITE  
            LCD_DrawLine(0,i,240,i);
            POINT_COLOR=BLUE;   //设置字体为蓝色  
            LCD_DrawWave_c(xis-(int)(data[i*pix]/reduce),i);
        }//将x、y的位置全部分别交换可以更改竖屏or横屏显示
        POINT_COLOR=WHITE;  //设置字体为RED  
        LCD_DrawWave_c(xis,320);
        POINT_COLOR=BLUE;   //设置字体为蓝色  
}
    

画柱状图(画频谱图)

参数说明:

Num传入数据的点数; show_line需要参考展示的频率,在对应频率(HZ)处标记一根红色线; data传入的数据

以下参数在需要时可以作为函数参数传入:

pix 这里柱状图主要是改变柱的密度,值越大越稀疏

xis 是其底轴的位置,默认设置为0;

reduce,y方向拉伸,y方向不能大于屏幕的分辨率否则不能正常显示,以此处取横向显示为例,从底处0开始,有320个像素点,所以y应该取值0到320,否则不能正常显示,根据实际测量波形的特点,对拉伸参数调整即可,或者利用按键人机交互调参

绘制过程:

这里仅用画直线即可,先画与底色相同的一条线清空一下,再画需要的幅值线段,x轴一致,从底轴向幅值画

代码如下(说明:该lcd分辨率240x320)

void LCD_DrawWave_bar(uint16_t Num,uint16_t show_line,float data[]){
        uint16_t i;
        uint16_t pix=2;  //柱的密度
        uint16_t xis=0;  //底轴的位置
        uint16_t reduce=5000; 波形拉伸(幅值轴)
    
        show_line = show_line*pix/2;
    //LCD_Clear(WHITE);
        POINT_COLOR=RED;    //设置字体为RED  
        LCD_DrawWave_c(show_line,0);
        LCD_DrawWave_c(show_line,320);
        POINT_COLOR=BLUE;   //设置字体为蓝色  
        for (i=0;i<Num;i+=pix){
            POINT_COLOR=WHITE;  //设置字体为蓝色  
            LCD_DrawLine(i,0,i,320);
            POINT_COLOR=BLUE;   //设置字体为蓝色  
                    LCD_DrawLine(i,xis+320,i,xis+320-(int)(data[i*pix]/reduce));
        }
}

效果展示

波形图

频谱图(红线处为23HZ)

 

 

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值