嵌入式实验(三):基于STM32的0.96OLED基本显示 |
您所在的位置:网站首页 › 基于stm32的oled › 嵌入式实验(三):基于STM32的0.96OLED基本显示 |
实验三
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)接线说明 (1)下载例程 本实验使用的0.96OLED,提供了详细的例程,很适合初学者学习。Arduino、C51、STM32等常见平台的例程都很完善。链接 ![]() ![]() 由以上两个代码,可以看出,他们都是调用GUI的函数来实现功能的。 右键点击函数名,查看函数是怎么实现的
由于需要实现的功能很少,就只留下一个显示函数; 修改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中,添加汉字 打开汉字生成软件![]() ![]()
(1)模拟IIC实现温湿度显示 前面的实验中,已经完成率基于模拟IIC的温湿度显示(stm32核心版)。 (2)在温湿度检测代码的基础上添加OLED的代码 (也可以在OLED的基础上添加温湿度代码,没有影响) (3)硬件连接 硬件使用的是stm32核心板,OLED scl连 pb13,sda 连pb14 (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)结果 这次实验主要学会了OLED的一些操作,以及多个元件之间通过stm32共同完成一个功能。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |