因为在网上没有找到完整的OLED显示波形的代码,所以自己写了一个,但是在网上居然都没找到详细的OLED数据手册,不过完整的驱动OLED显示数字字母代码很多。于是我在别人写好的代码下面加了显示波形的函数,但是显示波形和显示字母数字并不算兼容,因为原点设置的不一样。

这里也只展示了部分代码,OLED初始化的代码很多,将下面两个函数添加到.c文件,再调用即可。

void function_1(void)
{unsigned char i;       unsigned char j;        unsigned int y;unsigned char a[8][8];unsigned char temp=0x01;unsigned char line=0;unsigned char column=0;OLED_WriteCommand(0xC0);                //上下反置,把原点设置在左下for(column=0;column<128;column+=8){for(i=0;i<8;i++){//y=(i+column)*(i+column)/100;    //显示y=x*x(x=i+column),x取0,1,2,3....127,表达式除100可以算成Y轴扩大100倍,显示的图形更好看y=sin((i+column)/3.14)*15+18;   //y=sin(x),加18相当于向上平移,对x除3.14相当于缩小X轴for(j=0;j<8;j++){if(j==y/8){if(y<8){a[j][i]|=temp<<y;}elseif(7<y<63){a[j][i]|=temp<<(y-(y/8)*8);}elseif(y>63){a[j][i]=0x00;}}else{a[j][i]=0x00;}}}for(line=0;line<8;line++){OLED_SetCursor(line,column);for(i=0;i<8;i++){OLED_WriteData(a[line][i]);}}
}
}

上面的代码是显示一个函数,给y一个数学表达式,在OLED上显示波形。

上面我给的表达式是y=sinx, 显示的图像如上所示,不过上面代码显示是没有坐标轴的。

图画的不是很好,意思一下。上面这个图是宏观的,整个OLED的像素点(后面没有画完),OLED的像素是128*64。我用的是描点显示波形,横坐标从0到127,纵坐标从0到63。如图所示,将OLED分成了很多块(这个块不是随便分的),将纵轴分成了八份,每一份有八位,把x轴分成了16份,每一份也是八位。要点亮某一个点,不能单独赋值,只能按块赋值,例如(0,1),(0,2)。0是熄灭,1是点亮。

这是微观的一块,以这一块为例。我先给x值为0,根据表达式会得到一个y值,如果y为0,那这x=0的这一列我只把y=0这一个点亮(上面还有7快),这整列从上到下赋值为0x00,0x00,0x00,0x00,0x00,0x00,0x01,并把它存在数组中,这里可以看出a[8][8]存的数组就是x在0到7取值范围内,给y的值,例如a[0],这一行的值就是上面这一块的赋值,a[0][0]就是x=0时,我给这一块这一列的值0x01。这里我们可以发现一个规律,当y=1时,赋值为0x02,当y=2,赋值为0x04,y每加一,1就左移一位,所以上面赋值我用的移位,应该不难看懂。当x=0,y大于7,小于15的时候,应该在上面那一块显示,这里我给y值为14,这时从上到下赋值应为0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00。这时我应该把0x40给a[1][0]。怎么把这个值就给a[1][0],而不是a[0][0]了,可以看一下我上面的,应该很容易理解,这里就不在详细说明了。

void function_2(float*str)
{unsigned char i;       unsigned char j;        unsigned int y;unsigned char a[8][8];unsigned char temp=0x01;unsigned char line=0;unsigned char column=0;OLED_WriteCommand(0xC0);            for(column=0;column<128;column+=8){for(i=0;i<8;i++){y=*(i+column+str);for(j=0;j<8;j++){if(j==y/8){if(y<8){a[j][i]|=temp<<y;}elseif(7<y<63){a[j][i]|=temp<<(y-(y/8)*8);}elseif(y>63){a[j][i]=0x00;}}else{a[j][i]=0x00;}}}for(line=0;line<8;line++){OLED_SetCursor(line,column);for(i=0;i<8;i++){OLED_WriteData(a[line][i]);}}
}
}

这个函数,比如在AD采集时,可以将采集到的数据存入数组中,调用函数显示波形。

void OLED_SetCursor(uint8_t Y, uint8_t X)
{OLED_WriteCommand(0xB0 | Y);                   //设置Y位置OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4));   //设置X位置低4位OLED_WriteCommand(0x00 | (X & 0x0F));         //设置X位置高4位
}

OLED显示图像和波形相关推荐

  1. 如何使用OLED显示图像

    使用OLED显示图像,分为两步 1)图像取模 2)编写代码 图像取模 (软件自取) 链接:https://pan.baidu.com/s/1hwoF8min8xPI9MSyJSHVvQ  提取码:u8 ...

  2. Arduino配合电位计和oled液晶屏显示波形 Processing联动

    Arduino配合电位计和oled液晶屏显示波形 Processing联动 公众号:STCode Arduino配合电位计和oled液晶屏显示波形 Processing联动 1)描述 本作品使用Ard ...

  3. 基于STM32的脉搏心率检测仪(OLED可以实时显示脉冲波形)

    -设计完整,功能可全部实现,有完整报告文档说明.程序以及pcb文件- 可作为:课程设计,STM32实践学习,电子制作等 **禁止转载,以及用于其他商业用途.*** B站对应讲解心率传感器项目链接 设计 ...

  4. 基于STM32G031的失真度测试仪(CubeMX+ADC+DMA+OLED+EC11)

    目录 项目介绍 硬件介绍 设计思路 各功能代码及说明 SPWM波生成 ADC采样 FFT 获取按键动作 OLED显示 系统顶层 功能展示 OLED显示采样波形 OLED显示频谱/失真度曲线 项目总结

  5. 树莓派,摄像头拍照,OLED 显示

    摄像头的使用 配置系统使能摄像头功能 pi@raspberrypi:~ $ sudo raspi-config 配置完成后,系统会提示重启,重启完成后,摄像头就可以使用了 简单测试一下 pi@rasp ...

  6. msp432快速入门第八节之oled显示

    (一) 移植驱动 0.96寸oled是非常常用的显示模,通过oled可以显示多种字符 在此选取了使用模拟spi方式驱动的oled,采用逐飞库作为基准移植,梳理逐飞科技的oled驱动依赖后,确认其需要的 ...

  7. 优信电子所有博客汇总(导航搜索)

    优信电子所有博客汇总(导航搜索) 文章目录 51单片机开发 stm32系列 arduino专栏 ESP系列开发板/模组 树莓派相关 各类传感器驱动案例 TFT.LCD DIY 其他 文章目录 本文用于 ...

  8. 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示

    [开源工程]STM32C8T6+ADC信号采集+OLED波形显示 通过手指皮肤接触探测输入引脚:PA7 PA8引脚上的方波输出 PB13引脚上的方波输出 PB13和PA8:互补型方波输出引脚 硬件搭建 ...

  9. STM32的心率监测装置+OLED心率波形显示

    欢迎访问我的个人博客:基于stm32的心率监控装置

最新文章

  1. 一个球从100m高度自由落下,第10次反弹多高
  2. 算法小记 · 字符串翻转
  3. JDK环境下利用记事本对java文件进行运行编译
  4. ConcurrentHashMap与HashTable的区别
  5. windows 使用 tricks
  6. 系统架构设计-计算机组成与体系结构
  7. 从零开始系统学习区块链
  8. Matlab多种群遗传算法
  9. uniapp项目使用mescroll中mescroll-body组件记录
  10. 大学计算机基础教程期末试题,大一大学计算机基础教程期末考试卷试题 .doc
  11. 生物信息学入门 富集分析与蛋白质互作用网络(PPI)的可视化 Cystocape入门指南
  12. SpringCloud分布式开发理解
  13. 进制转换--2进制转16进制
  14. html基本词汇app,背单词APP哪个最好 可以自定义单词卡片的英语学习APP推荐
  15. python分析数据的相关性_使用Python进行相关性分析
  16. 模拟鼠标键盘操作,含硬件模拟技术。
  17. 友盟单点推送(推送给单个设备)
  18. Android实现拨打电话
  19. 系统文件host的作用
  20. linux进程数和句柄数

热门文章

  1. 牵手华为冲刺L2++市场,这家国产厂商的自动驾驶版图再扩张
  2. Redis expire
  3. HDU1864 最大报销额 01背包
  4. Vue+ .netcore3.1 模拟QQ邮箱发送验证码
  5. 关于如何区分Android手机是32位还是64位
  6. uni-app对接支付
  7. 做财务讲师真的好吗?启宣教育告诉你答案
  8. Java日志文档怎么写
  9. 网渲显示服务器错误,网络渲染疑难解答指南 | 3ds Max 2021 | Autodesk Knowledge Network...
  10. 十岁左右的孩子都可以用这样的线条画画