当前位置: 首页 > article >正文

STM32F4+OLED 显示汉字、图片和动态图

目录

  • STM32F4+OLED 显示汉字、图片和动态图
    • 一、导入.h和.c文件
      • 导入 .h 文件
      • 导入 .c 文件
    • 二、显示数字
      • 显示数字的函数
      • 显示效果
    • 三、显示汉字
      • 汉字取模
      • 显示汉字的函数
      • 显示效果
    • 四、显示图片
      • 图片取模
      • 显示图片的函数
      • 显示效果
    • 五、显示进度条
      • 显示进度条函数
      • 显示效果
    • 附录

STM32F4+OLED 显示汉字、图片和动态图

OLED 是一种新型的显示技术,它具有低功耗、高对比度、自发光、可弯曲等优点。OLED 可以用于各种嵌入式系统,如 STM32F4 单片机。在本文中,我将分享我如何使用 STM32F4 单片机的 OLED 外设进行显示汉字、图片和动态图的项目,以及我在实现过程中遇到的一些问题和解决方法。
开发板:STM32F407ZGT6(正点原子探索者)
OLED:正点原子0.96’ OLED 显示器模块
软件:Keil MDK5

一、导入.h和.c文件

显示汉字和图片,需要先用取模软件得到二维数组,二维数组需要以 .h 文件形式导入 Keil 项目。还有其他地方能用到导入 .h 和 .c 文件。

下面以导入 BMP 文件(图片的二维数组)为例

导入 .h 文件

在这里插入图片描述

导入 .c 文件

在这里插入图片描述

二、显示数字

显示数字的函数

x, y : 起点坐标
len : 数字的位数
size : 字体太小
num : 数值 (0~4294967295)

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
{         	u8 t,temp;u8 enshow=0;						   for(t=0;t<len;t++){temp=(num/mypow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){OLED_ShowChar(x+(size/2)*t,y,' ',size,1);continue;}else enshow=1; }OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1); }
} 

以显示数字 13 为例

		OLED_ShowNum(48,24,13,3,24);	OLED_Refresh_Gram();delay_ms(500);		

显示效果

在这里插入图片描述

三、显示汉字

汉字取模

取模软件用的是 PCtoLCD 2002 完美版。设置如下:
在这里插入图片描述
取出后的二维数组,复制到 oledfont.h 头文件(需要自己创建和导入)中
在这里插入图片描述

显示汉字的函数

正点原子开发板没有显示汉字的函数,我从网上找到相关函数修改之后,复制到 oled.c 文件中,就可以在主程序中直接调用。

x 起始列 一个字体占 16 列
y 起始页 一个字体占两页
no 字体的序号
Ch[][n] 中文数组

void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no,unsigned char Chn[][16])
{      			    unsigned char t,adder=0;OLED_Set_Pos(x,y+1);	for(t=0;t<16;t++){OLED_WR_Byte(Chn[2*no][t],1);adder+=1;}	OLED_Set_Pos(x,y); for(t=0;t<16;t++){	OLED_WR_Byte(Chn[2*no+1][t],1);adder+=1;}					
}

以“重庆大学”四个字为例

	OLED_ShowCHinese(32,4,0,School);OLED_ShowCHinese(48,4,1,School);OLED_ShowCHinese(64,4,2,School);OLED_ShowCHinese(80,4,3,School);delay_ms(2000);		

显示效果

四、显示图片

图片取模

取模方式与显示中文一样,但是要转换成数组形式,就要变成单色(黑与白),而且大小应该在 128*64 以内,使用的软件是 Img2Lcd 。设置如下:
在这里插入图片描述
取出后的二维数组,复制到 bmp.c 文件(需要自己创建和导入)中

显示图片的函数

正点原子开发板没有显示图片的函数,我也是从网上找到相关函数修改之后,复制到 oled.c 文件中。

x0: 起始列地址
y0: 起始页地址
x1: 终止列地址
y1: 终止页地址
BMP[]: 存放图片代码的数组

void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])
{ 	unsigned int j=0; unsigned char x,y;  if(y1%8==0) y=y1/8;   else y=y1/8+1;for(y=y0;y<y1;y++) {OLED_Set_Pos(x0,y); for(x=x0;x<x1;x++){OLED_WR_Byte(BMP[j++],OLED_DATA);	 	}}
} 

以重庆大学校徽为例

	OLED_DrawBMP(40,0,96,7,logo);delay_ms(1000);

显示效果

五、显示进度条

结合C语言编程实现显示进度条

显示进度条函数

void drawProgressBar(int t, int n)
{OLED_ShowString(0,0,"Progress:",16);int i =0;float f = 12.5 * t;char a[10];sprintf(a, "%.1f%%", f);OLED_ShowString(0,24,"[",12);for (; i < n; i++){if (i < t){OLED_ShowString(12 + i * 12,24,"*",12);	}}OLED_ShowString(112,24,"]",12);OLED_ShowString(88,48,a,12);
};
  int i = 0;while (i <= 8) {drawProgressBar(i, 8);OLED_Refresh_Gram();delay_ms(500);i++;};

显示效果

OLED 屏幕显示进度条

附录

参考项目:用STM32玩OLED(显示文字、图片、动图gif等)
本项目源码

http://www.lryc.cn/news/2417998.html

相关文章:

  • 什么是勒索病毒以及怎么防勒索病毒
  • 最新shsh备份详细教程(现在只能备份最新的固件)
  • 如何让iframe背景色透明
  • Servlet 过滤器(FilterDispatcher)
  • 笔记总结-html5+css3
  • [2023最新]美少妇Metasploit(MSF)下载安装及使用详解,永久免费使用,环境配置和使用技巧指南_msf下载
  • 实用的网页特效集锦
  • 北京火车订票电话一览
  • 计算机如何设置光驱启动,电脑如何设置光驱启动(含UEFI BIOS方法)?
  • flash播放器代码
  • Flash--元件和实例
  • xcode7真机测试详解
  • 用c语言基础知识写小游戏之扫雷
  • 2007最新瑞星杀毒软件绿色版免费下载
  • 台式机单硬盘安装黑苹果体验
  • 什么是DNS劫持?怎么防止DNS劫持攻击?
  • sim卡iccid编辑软件_一篇文章扫盲手机SIM卡相关知识
  • 小白第一次开游戏服如何选择合适的服务器
  • 如何安装SQL2000的sp3补丁
  • 桃源秘境:探寻中国最佳桃子的诞生地
  • 今天开始学习DELPHI 2006 ECO
  • 国内的几个游戏搜索引擎
  • 一文让你读懂——什么是1G,2G,3G,4G,5G
  • B2C站点汇总
  • 多普达P800开机第一屏刷机过程图解(G兄WM6系统1018版本)
  • 【模型转换】将.mindir文件转换成.ms文件(Windows篇)
  • iOS 开发实战培训
  • Tools_ js提取中文拼音首字母
  • Android开发之修改系统开机Logo与开机动画
  • ASP.NET项目发布网站具体步骤