OLED驱动编写
本文最后更新于20 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

也是终于想起密码了,记录一下OLED模块的驱动编写,方便以后移植用

# OLED显示模块

0.96寸OLED显示屏,一般是SSD1306芯片或SSD1315芯片,只要是这两个芯片就能使用本篇写下的代码。

这块OLED使用的是I2C接口(4根引脚),也有的OLED使用的是SPI接口(7根引脚)

像素为128*64像素

一、引脚接线

本篇遵循易移植的原则,采用软件I2C

STM32OLED模块
3.3VVCC
GNDGND
PB8SCL
PB9SDA

因为采用的是软件I2C,所以IO口选择不是固定的,这里分别使用PB8和PB9连接OLED模块的SCL和SDA

下载厂家给的demo程序测试

二、驱动代码

使用基本的I2C代码,且OLED不使用连续模式。

1、写命令

 //写入一个字节命令
 void OLED_WriteCommand(uint8_t Command)
 {
  MyI2C_Start();
     MyI2C_SendByte(0x78); //0x78为OLED的ID地址
  MyI2C_ReceiveAck();
  MyI2C_SendByte(0x00); //非连续模式, 写命令
  MyI2C_ReceiveAck();
  MyI2C_SendByte(Command); //发送数据
  MyI2C_ReceiveAck();
  MyI2C_Stop();
 }

2、写数据

 //写入一个数据
 void OLED_WriteData(uint8_t Data)
 {
  MyI2C_Start();
     MyI2C_SendByte(0x78); //0x78为OLED的ID地址
  MyI2C_ReceiveAck();
  MyI2C_SendByte(0x40); //非连续模式, 写数据
  MyI2C_ReceiveAck();
  MyI2C_SendByte(Data); //发送数据
  MyI2C_ReceiveAck();
  MyI2C_Stop();
 ​
 }

3、OLED初始化

参考流程图:

 void OLED_Init(void)
 {
  MyI2C_Init();
 
  Delay_ms(100);
 
  OLED_WriteCommand(0xAE); //关闭显示
 
  OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率
  OLED_WriteCommand(0x80);
 
  OLED_WriteCommand(0xA8); //设置多路复用比率
  OLED_WriteCommand(0x3F);
 
  OLED_WriteCommand(0xD3); //设置显示偏移量
  OLED_WriteCommand(0x00);
 
  OLED_WriteCommand(0x40); //设置显示起始行
 
  OLED_WriteCommand(0xA1); //设置段重映射
 
  OLED_WriteCommand(0xC8); //设置COM输出扫描方向
 
  OLED_WriteCommand(0xDA); //设置COM引脚硬件配置
  OLED_WriteCommand(0x12);
 
  OLED_WriteCommand(0x81); //设置对比度控制
  OLED_WriteCommand(0xCF);
 
  OLED_WriteCommand(0xD9); //设置预充电周期
  OLED_WriteCommand(0xF1);
 
  OLED_WriteCommand(0xDB); //设置VCOMH取消选择电平
  OLED_WriteCommand(0x30);
 
  OLED_WriteCommand(0xA4); //设置全屏开启/关闭
 
  OLED_WriteCommand(0xA6); //设置正常/反色显示
 
  OLED_WriteCommand(0x8D); //设置电荷泵
  OLED_WriteCommand(0x14);
 
  OLED_WriteCommand(0xAF); //开启显示
 
  Delay_ms(100);
 
 }

4、设置显示位置

 /**
   * @brief 一个设置显示位置的指针
   * @param X:0~127
   * @param Page:0~7
   * @retval None
   */
 void OLED_SetPosition(uint8_t X, uint8_t Page)
 {
  OLED_WriteCommand(0x00 |( X & 0x0F)); //取低四位
  OLED_WriteCommand(0x10 |(( X & 0xF0)  >> 4)); //取高四位
  OLED_WriteCommand(0xB0 | Page);
 ​
 }

5、清屏

 /**
   * @brief 清屏函数
   * @param None
   * @param None
   * @retval None
   */
 void OLED_Clear(void)
 {
  for(uint8_t i = 0; i < 8; i++)
  {
  OLED_SetPosition(0, i);
  for(uint8_t j =0; j < 128; j++) OLED_WriteData(0x00);
 
  }
 ​
 }

待续…

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇