OLED显示图像和波形

这篇具有很好参考价值的文章主要介绍了OLED显示图像和波形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因为在网上没有找到完整的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;
					}
					else
					if(7<y<63)
					{
						a[j][i]|=temp<<(y-(y/8)*8);
					}
					else
					if(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上显示波形。

OLED显示图像和波形

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

OLED显示图像和波形

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

OLED显示图像和波形

 这是微观的一块,以这一块为例。我先给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;
					}
					else
					if(7<y<63)
					{
						a[j][i]|=temp<<(y-(y/8)*8);
					}
					else
					if(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位
}

代码地址:https://gitee.com/cara23456/oled.gitOLED显示图像和波形文章来源地址https://www.toymoban.com/news/detail-512540.html

到了这里,关于OLED显示图像和波形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • modelsim没有波形出现

    QuartusII中使用了modelsim波形进行仿真,怎么处理都没有波形,激励文件编译也没有问题。 解决办法: 在modelsim中compile,确保Transcript中没有错误出现 点击Simulate--Start Simulation 取消掉Optimization中的Enable optimization选项 这里要选中work下的激励文件,再取消Enable optimization选项,防止

    2024年02月11日
    浏览(39)
  • [Python] pyqt6+opencv实现摄像头图像的实时读取并显示(完整源代码)

    本文将会介绍如何通过opencv来实时捕获摄像头的图像,并通过pyqt6进行图像视频呈现。 1. 通过opencv的VideoCapture类读取摄像头的每一帧图像,通过pyqt6的QLabel来显示图像 2. 根据获取的图像的宽和高大小以及QLabel的大小来动态调整最后输出的图像的宽和高 3. 调整窗体大小,动态调

    2024年01月24日
    浏览(74)
  • 【VISIO安装问题】无法安装64位版本的office,因为在您的PC上找到以下32位程序

    无法安装64位版本的office,因为在您的PC上找到以下32位程序 当我们想要安装visio 64位程序的时候,我们的电脑提示这种错误,可能是我们电脑上32位 visio程序并未删除干净! 直接卸载电脑上的32位visio程序有时候可能卸载不了,或者卸载不干净,此时我们就要尝试以下方法解决

    2024年02月11日
    浏览(61)
  • 【技巧】Vivado 仿真器simulation显示模拟波形图(非数字波形)

    ①打开Vivado的任意一个可以运行的工程 ②点击Simulation - Run Behavioral Simulation进行仿真 ③等待运行结束后会弹出如图2所示的数字波形图 ④右键点击需要查看模拟波形的项目,在Waveform Style下选择Analog即可显示出模拟波形 Simulation运行后的结果一般为十六进制的数值,我们可以通

    2024年02月11日
    浏览(42)
  • macOS 运行xxx.command文件提示”无法执行,因为您没有正确的访问权限“

    使用苹果mac电脑运行.command文件时,是否遇到弹出”无法执行,因为您没有正确的访问权限“的窗口?遇到这种问题怎么解决呢?这里小编为大家带来了详细的解决方法,一起来看看吧! 解决方法: 方法一: 打开终端工具,输入以下命令: sudo sh 注意后面有空格 然后再把

    2024年02月08日
    浏览(83)
  • pycharm没有找到manage repositories按钮

    问题描述 :不知道是因为版本原因还是其他,pycharm没有找到manage repositories按钮,无法更改下载源,导致安装库的速度会很慢。 解决办法: 1、点击左下角的python packages 2、点击设置按钮 3、点击加号,输入镜像网址,保存。 附三个常用下载源: 清华源 : https://pypi.tuna.tsingh

    2024年02月15日
    浏览(37)
  • STM32 OLED 显示原理的讲解以及OLED显示汉字与图片的代码

    本文主要涉及OLED显示原理的讲解以及OLED显示汉字与图片的代码。 OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display,OELD) 。 OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板

    2024年02月04日
    浏览(44)
  • 【Linux】权限管理——还在因为没有权限而头疼?手把手教你修改权限

      权限 决定了一个人可以干什么和不可以干什么,它是一种限制,在日生活中大家也许或多或少都受到过权限的约束。  同样,在Linux上也有权限的概念,Linux并不允许我们在上面为所欲为。为了限制我们的一些行为,Linux上对用户进行了分类。 超级用户 :也叫root,只有一

    2024年02月12日
    浏览(47)
  • ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。解决方案

    序         1、参考博文===》①严格模式 - 知乎,②ts的tsconfig.son中文说明③TypeScript Number | 菜鸟教程          2、解决( ts报错“this“ 隐式具有类型 “any“,因为它没有类型注释。 )           3、解决( 函数内this是undefined 的问题 )          4、解决( 其目标缺少构造

    2024年02月08日
    浏览(73)
  • Ubuntu提示没有找到ifconfig命令解决方法

    在我们新安装的Ubuntu 20.04操作系统中,当我们尝试使用ifconfig命令查看IP地址时,会发现该命令不存在。然而,我们可以通过安装ifconfig工具来解决这个问题。在下面的文章中,将介绍如何安装此工具。 当在运行 ifconfig 命令是,提示下面的错误,就代表没有安装它: 或者提示

    2024年02月14日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包