[其他ST产品] STM32结合OLED进行屏显应用实例

[复制链接]
1467|34
 楼主| 过期的塔头 发表于 2023-3-29 12:20 | 显示全部楼层
2)代码
在添加文字字模代码->oledfont.h文件
OLED显示函数test.c
 楼主| 过期的塔头 发表于 2023-3-29 12:20 | 显示全部楼层
void TEST_MainPage(void)
{       
        GUI_ShowCHinese(10,20,16,"故人西辞黄鹤楼",1);
        delay_ms(1500);               
        delay_ms(1500);
}
 楼主| 过期的塔头 发表于 2023-3-29 12:20 | 显示全部楼层
main.c文件
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "oled.h"
  4. #include "gui.h"
  5. #include "test.h"
  6. int main(void)
  7. {       
  8.         delay_init();                           //延时函数初始化          
  9.         NVIC_Configuration();            //设置NVIC中断分组2:2位抢占优先级,2位响应优先级        
  10.         OLED_Init();                                 //初始化OLED  
  11.         OLED_Clear(0);             //清屏(全黑)
  12.         OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
  13.     OLED_WR_Byte(0x27,OLED_CMD);        //水平向左或者右滚动 26/27
  14.     OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  15.         OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
  16.         OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
  17.         OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
  18.         OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  19.         OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
  20.         TEST_MainPage();
  21.         OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
  22. }
 楼主| 过期的塔头 发表于 2023-3-29 12:21 | 显示全部楼层
3、OLED上下或左右的滑动显示长字符
1)滚屏设置
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);        //开启滚动
1
2
3
4
5
6
7
8
9

 楼主| 过期的塔头 发表于 2023-3-29 12:21 | 显示全部楼层
垂直和水平滚动
  1. OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
  2. OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
  3. OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  4. OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
  5. OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
  6. OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
  7. OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
  8. OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
 楼主| 过期的塔头 发表于 2023-3-29 12:21 | 显示全部楼层
2)代码
添加文字字模代码到oledfont.h文件中

  1. "故",0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x80,0xFE,0xFE,0x11,0x08,0x12,0x88,0x10,0x88,
  2. 0x7C,0x88,0x44,0x50,0x44,0x50,0x44,0x20,0x44,0x50,0x7C,0x88,0x45,0x04,0x02,0x02,
  3. "人",0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x02,0x80,0x02,0x80,
  4. 0x04,0x40,0x04,0x40,0x08,0x20,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02,
  5. "西",0x00,0x00,0xFF,0xFE,0x04,0x40,0x04,0x40,0x04,0x40,0x3F,0xF8,0x24,0x48,0x24,0x48,
  6. 0x24,0x48,0x24,0x48,0x28,0x38,0x30,0x08,0x20,0x08,0x20,0x08,0x3F,0xF8,0x20,0x08,
  7. "辞",0x08,0x40,0x1C,0x20,0x70,0x20,0x11,0xFC,0x10,0x00,0xFC,0x88,0x10,0x50,0x11,0xFE,
  8. 0x7C,0x20,0x44,0x20,0x45,0xFC,0x44,0x20,0x44,0x20,0x7C,0x20,0x44,0x20,0x00,0x20,
  9. "黄",0x04,0x40,0x3F,0xF8,0x04,0x40,0x04,0x40,0xFF,0xFE,0x01,0x00,0x1F,0xF0,0x11,0x10,
  10. 0x11,0x10,0x1F,0xF0,0x11,0x10,0x11,0x10,0x1F,0xF0,0x04,0x40,0x08,0x20,0x10,0x10,
  11. "鹤",0x08,0x10,0x08,0x20,0x7F,0x7C,0x55,0x44,0x12,0x64,0x3F,0x54,0x64,0x44,0xA4,0x4C,
  12. 0x3F,0x40,0x24,0x7E,0x24,0x02,0x3F,0x02,0x24,0x7A,0x24,0x02,0x3F,0x0A,0x20,0x04,
  13. "楼",0x20,0x20,0x21,0x24,0x20,0xA8,0x20,0x20,0xFB,0xFE,0x20,0xA8,0x21,0x24,0x72,0x02,
  14. 0x68,0x40,0xA7,0xFE,0xA0,0x88,0x21,0x08,0x21,0x90,0x20,0x60,0x21,0x98,0x26,0x04,
 楼主| 过期的塔头 发表于 2023-3-29 12:21 | 显示全部楼层
OLED显示函数test.c
  1. void TEST_MainPage(void)
  2. {       
  3.         GUI_ShowCHinese(10,20,16,"故人西辞黄鹤楼",1);
  4.         delay_ms(1500);               
  5.         delay_ms(1500);
  6. }
 楼主| 过期的塔头 发表于 2023-3-29 12:22 | 显示全部楼层
main.c
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "oled.h"
  4. #include "gui.h"
  5. #include "test.h"
  6. int main(void)
  7. {       
  8.         delay_init();                           //延时函数初始化          
  9.         NVIC_Configuration();            //设置NVIC中断分组2:2位抢占优先级,2位响应优先级        
  10.         OLED_Init();                                 //初始化OLED  
  11.         OLED_Clear(0);             //清屏(全黑)
  12.         OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
  13.     OLED_WR_Byte(0x27,OLED_CMD);        //水平向左或者右滚动 26/27
  14.     OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  15.         OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
  16.         OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
  17.         OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
  18.         OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
  19.         OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
  20.         TEST_MainPage();
  21.         OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动
  22. }
 楼主| 过期的塔头 发表于 2023-3-29 12:22 | 显示全部楼层
六、总结
通过此次实验基本熟练掌握了STM32结合OLED的操作显示。OLED是一个比较有意思的外设,在之后完成更多硬件项目时,可以利用OLED进行调试显示,帮助会很大,所以要好好掌握OLED的使用,多加练习,受益匪浅。
bqyj 发表于 2023-3-29 19:33 | 显示全部楼层
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);        //开启滚动
bqyj 发表于 2023-3-29 19:33 | 显示全部楼层
没看懂,能解释下吗
eda516 发表于 2024-11-15 09:32 | 显示全部楼层
谢谢分享,不错的资料
zhjb1 发表于 2024-11-15 15:01 | 显示全部楼层
驱显汉字不如采用一片汉字库芯片,按照您的方法只需要将选址改到汉字库选完后送显即可。
dreamCar 发表于 2024-11-15 18:46 | 显示全部楼层
STM32与OLED结合,实现屏显应用。编程控制,显示动态图像和文字信息。示例代码简洁,操作便捷,显示效果流畅。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部