前言
本次我们学习一下STM32F103关于OLED显示汉字,数字,英文,图片,GIF动画,和介绍各种取模软件的使用,主要教会大家使用和修改OLED驱动的代码,对汉字大小,图片分辨率进行代码修改并显示,本篇博客大部分是自己收集和整理,如有侵权请联系我删除。
本次实验板子使用的是正点原子精英版,芯片是STM32F103ZET6,需要资料可以@我拿取。
没有初步认识OLED屏幕的组成的,可以先看看我之前的博客:OLED接线和屏幕大小介绍
各种取模软件和一些图片资料,百度 盘@我拿
1.OLED显示ASCII码(数字和英文)
2)解析坐标代码
发送页地址:
OLED_WR_Byte(0xb0+y,OLED_CMD); – – 设置Y坐标,查看手册输入0Xb0就是起始地址
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//发送坐标的高4位的值
OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD); //发送坐标的低4位的值
通过查看手册我们大概了解一下X轴坐标的起始地址和怎么读取的,不用深究这个,我在这里就是提一下,不然有些人不知道这串代码代表什么意思。
3)显示字符和代码修改实现
我们就不直接介绍原厂家的代码来解析了,厂家提供的代码是英文长度是8*16的ASCII码,接下来我们自己生成一个ASCII的字模。英文长度是16*24,我们看一下需要修改哪一些代码我们就能实现对英文的大小控制和取模软件的使用。
1.生成一个16*24的字模库
因为ASCII库里面有很多英文字符,我们生成的字模库是需要放在一个数组里面实现的,所以我们就要在设置里面修改一下:
然后我们生成一个ASCII库:
2.把生成的字模库放在工程里
接下来我们需要把字模库复制一下,放在一个H文件的数组里面,我们可以自己创建一个H文件,也可以直接在厂家提供的H文件下创建一个数组,把字模库的东西复制进去就可以:
注意每个字模之间是用逗 隔开的,放在一个数组里,以大括 包住。
3.更改厂家显示字符的代码
因为厂家只固定了大小是8*16的,所以他有声明SIZE == 16,我们不要他的,自己复制修改一下他的代码:
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~7
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
我们先看厂家的代码:
if(x>Max_Column-1){x=0;y=y+2;}//#define Max_Column 128
这个的作用就是大小超过了X,Y轴的限制范围就换行
第一个for循环里面 i<8 , 因为他生成的是8*16的字模,首先发送的是第一页(Y轴分为8(页))
但是我们的是16*24的字模库,我们看一下生成的字模代码:
因为我们的 size == 24,所以我们首先修改一下大小,选择大小是长度24的字模:
第二个我们需要修改的就是 i<16,因为我们一页发送16个数据,厂家的发送8个
然后第三个就是把数组改成我们的字模库F16×24,里面的C*48代表:C是代表偏移量,因为A在ASCII里面是65,偏移量+48(A字模代表的数据大小),就能输出A了。
第二个for循环,首先我们先在Y轴基础上+1,代表输出第二页的数据,因为第一页我们已经输出了16个数据了,所以我们在数组里面加上16,表示已经输出到第二页了,下面那个依次类推。
修改后的代码如下所示:
接下来我们在main主函数里设置一下,因为我们的H文件有三个点阵的ASCII码,我们依次显示出来看看是什么效果:
显示效果:
2.OLED显示汉字
显示汉字和显示字符差不多,反正都是通过取模,然后生成字模库放在H文件里面就能实现了。
接下来我直接放图片,就不一一解析了,代码其实和上面字符的差不多。
设置里面,我们吧这个行的前缀后缀的大括 都给加回来
我们生成的字模大小是8*16,我们复制在H文件里面,重新生成一个数组,如图:
接下来我们查看代码:我们不做修改了,直接使用厂家的代码修改为自己的,然后我们修改我们自己汉字的数组 OLED_WR_Byte(Boke[2*no][t],OLED_DATA);
main函数里面的代码:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!