嵌入式实验(三):基于STM32的0.96OLED基本显示

您所在的位置:网站首页 基于stm32的oled 嵌入式实验(三):基于STM32的0.96OLED基本显示

嵌入式实验(三):基于STM32的0.96OLED基本显示

#嵌入式实验(三):基于STM32的0.96OLED基本显示| 来源: 网络整理| 查看: 265

实验三 0 实验要求1 0.96OLED简介2 显示学号和姓名3 温湿度显示4 滑动显示长字符5 总结

0 实验要求

理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:

显示自己的学号和姓名;

显示AHT20的温度和湿度;

上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。(最好使用硬件刷屏模式)

1 0.96OLED简介

(1)OLED

OLED即有机发光二级管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优点,被认为是下一代的平面显示器新兴应用技术。OLED 显示和传统的LCD显示不同,其可以自发光,所以不需要背光灯,这使得OLED 显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优。

(2)接线说明 在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2 显示学号和姓名

(1)下载例程 本实验使用的0.96OLED,提供了详细的例程,很适合初学者学习。Arduino、C51、STM32等常见平台的例程都很完善。链接 在这里插入图片描述

下载解压后如下: 在这里插入图片描述 1是例程文件,7是生成汉字代码需要的工具。 (2)学习例程打开keil工程文件 在这里插入图片描述 如图,在main.c函数中,已经有一长串测试代码,可以显示各种文字、符号、图形。 在这里,我们需要用到的只有数字显示和中文显示,所以主要就看TEST_Number_Character();和TEST_Chinese();两个函数; 他们都在test.c这个函数中。TEST_Number_Character(); void TEST_Number_Character(void) { GUI_Fill(0,0,WIDTH-1,HEIGHT/2-1,0); GUI_ShowString(0,0,"6x8:!\"#$%&'()*+,-./:;?@[]\\^_`~{}|",8,1); GUI_ShowNum(30,16,1234567890,10,8,1); delay_ms(1000); OLED_Clear(0); GUI_ShowString(0,0,"8x16:!\"#$%&'()*+,-./:;?@[]\\^_`~{}|",16,1); GUI_ShowNum(40,32,1234567890,10,16,1); delay_ms(1500); OLED_Clear(0); } TEST_Chinese(); void TEST_Chinese(void) { GUI_ShowString(45,0,"16x16",8,1); GUI_ShowCHinese(16,20,16,"È«¶¯µç×Ó¼¼Êõ",1); delay_ms(1000); OLED_Clear(0); GUI_ShowString(45,0,"24x24",8,1); GUI_ShowCHinese(16,20,24,"È«¶¯µç×Ó",1); delay_ms(1000); OLED_Clear(0); GUI_ShowString(45,0,"32x32",8,1); GUI_ShowCHinese(0,20,32,"È«¶¯µç×Ó",1); delay_ms(1000); OLED_Clear(0); }

由以上两个代码,可以看出,他们都是调用GUI的函数来实现功能的。

右键点击函数名,查看函数是怎么实现的

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 最后可以发现,函数是通过储存汉字对应的数组,然后判断OLED的哪些点亮,哪些点不亮。所以我们只需要在oledfont.h中,按照格式添加我们需要的字,并修改GUI显示函数,即可实现我们的第一个目标。 (3)修改例程

修改main.c int main(void) { delay_init(); NVIC_Configuration(); OLED_Init(); OLED_Clear(0); while(1) { TEST_MainPage(); OLED_Clear(0); } }

由于需要实现的功能很少,就只留下一个显示函数;

修改test.c void TEST_MainPage(void) { GUI_ShowCHinese(28,20,16,"张同学",1); GUI_ShowString(4,48,"631807030433",16,1); delay_ms(1500); delay_ms(1500); } 在oledfont.h中,添加汉字 打开汉字生成软件 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 将字模按格式复制到keil中 在这里插入图片描述 (4)连接硬件,将程序烧录进程序,实验完成。 在这里插入图片描述

3 温湿度显示

(1)模拟IIC实现温湿度显示 前面的实验中,已经完成率基于模拟IIC的温湿度显示(stm32核心版)。 (2)在温湿度检测代码的基础上添加OLED的代码 (也可以在OLED的基础上添加温湿度代码,没有影响) 在这里插入图片描述 以上文件都需要添加到温湿度工程中(包括.h文件),不过需要注意,需要在用到这些函数的文件前进行声明。

添加需要的字模 "温",0x00,0x00,0x23,0xF8,0x12,0x08,0x12,0x08,0x83,0xF8,0x42,0x08,0x42,0x08,0x13,0xF8, 0x10,0x00,0x27,0xFC,0xE4,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x2F,0xFE,0x00,0x00,/*"温",0*/ "湿",0x00,0x00,0x27,0xF8,0x14,0x08,0x14,0x08,0x87,0xF8,0x44,0x08,0x44,0x08,0x17,0xF8, 0x11,0x20,0x21,0x20,0xE9,0x24,0x25,0x28,0x23,0x30,0x21,0x20,0x2F,0xFE,0x00,0x00,/*"湿",0*/ "度",0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x3F,0xFC,0x22,0x20,0x22,0x20, 0x23,0xE0,0x20,0x00,0x2F,0xF0,0x24,0x10,0x42,0x20,0x41,0xC0,0x86,0x30,0x38,0x0E,/*"度",0*/

(3)硬件连接 硬件使用的是stm32核心板,OLED scl连 pb13,sda 连pb14 在这里插入图片描述

(4)温湿度显示 下图是将温度传感器靠近热水时的变化: 在这里插入图片描述

4 滑动显示长字符

(1)OLED屏的滚屏命令 (以下内容转载至链接)

设置水平左右移步骤: OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动 OLED_WR_Byte(0x26,OLED_CMD); //水平向左或者右滚动 26/27 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x00,OLED_CMD); //起始页 0 OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔 OLED_WR_Byte(0x07,OLED_CMD); //终止页 7 OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

这里需要注意的是 设置前要先关闭 滚动 还有的是在写入终止页后需要写入 两个虚拟字节

设置垂直和水平滚动的(没有可用连续垂直滚动)步骤: OLED_WR_Byte(0x2e,OLED_CMD); //关闭滚动 OLED_WR_Byte(0x29,OLED_CMD); //水平垂直和水平滚动左右 29/2a OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x00,OLED_CMD); //起始页 0 OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔 OLED_WR_Byte(0x07,OLED_CMD); //终止页 1 OLED_WR_Byte(0x01,OLED_CMD); //垂直滚动偏移量 OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

注意:垂直滚动偏移量=0时,就只有水平左右移了。 通过设置起始页 终止页 被设置的区域就垂直和水平滚动,,其余的区域就只有垂直滚动

设置滚动区域: OLED_WR_Byte(0x2e,OLED_CMD); //关闭滚动 OLED_WR_Byte(0x29,OLED_CMD); //水平垂直和水平滚动左右 29/2a OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节 OLED_WR_Byte(0x00,OLED_CMD); //起始页 0 OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔 OLED_WR_Byte(0x07,OLED_CMD); //终止页 1 OLED_WR_Byte(0x01,OLED_CMD); //垂直滚动偏移量 OLED_WR_Byte(0xA3,OLED_CMD); //开启滚动 OLED_WR_Byte(16,OLED_CMD); //开启滚动 OLED_WR_Byte(8,OLED_CMD); //开启滚动 OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

(2)keil程序·

delay_init(); //??????? NVIC_Configuration(); //??NVIC????2:2??????,2?????? OLED_Init(); //???OLED OLED_Clear(0); //??(??) OLED_WR_Byte(0x2E,OLED_CMD); //???? OLED_WR_Byte(0x27,OLED_CMD); //????????? 26/27 OLED_WR_Byte(0x00,OLED_CMD); //???? OLED_WR_Byte(0x00,OLED_CMD); //??? 0 OLED_WR_Byte(0x07,OLED_CMD); //?????? OLED_WR_Byte(0x07,OLED_CMD); //??? 7 OLED_WR_Byte(0x00,OLED_CMD); //???? OLED_WR_Byte(0xFF,OLED_CMD); //???? OLED_ShowCHinese(6,0,24); OLED_ShowCHinese(26,0,25); OLED_ShowCHinese(46,0,21); OLED_ShowCHinese(66,0,6); OLED_ShowCHinese(86,0,7); OLED_ShowCHinese(106,0,8); OLED_ShowCHinese(6,3,22); OLED_ShowCHinese(26,3,23); OLED_ShowCHinese(46,3,21); OLED_ShowString(0,6,"631807030433",16); OLED_WR_Byte(0x2F,OLED_CMD);

在oledfont.h文件里添加我们需要的汉字 在这里插入图片描述

(3)烧录程序 (4)结果 在这里插入图片描述

5 总结

这次实验主要学会了OLED的一些操作,以及多个元件之间通过stm32共同完成一个功能。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3