【STM32F407学习笔记】模拟IIC驱动OLED

【STM32F407学习笔记】模拟IIC驱动OLED

1. 0.96寸OLED模块

OLED,即有机发光二极管(Organic Light Emitting Diode)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。 IIC 接口模块的OLED如图中所示:
在这里插入图片描述
其中引脚定义为:

  • GND 电源地
  • VCC 电源正(3~5.5V)
  • SCL IIC通信中的时钟管脚
  • SDA IIC通信中的数据管脚

屏幕所使用的驱动IC为SSD1306。SSD1306 的每页包含了128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。通过查询SSD1306的数据手册可以看到所有的驱动命令。OLED的具体初始化方法可以参考中景园电子的驱动。

2. IIC驱动编写

在上一篇博客链接: 【STM32F407学习笔记】模拟IIC协议中我们已经实现了模拟IIC的所有时序,包括起始信号、停止信号、应答ACK信号、非应答NACK信号以及读取一字节ReadByte和发送一字节SendByte,因此剩下的工作就是通过这些时序,模拟出OLED通信所需要的信号即可。首先是向OLED写命令
查阅数据手册发现从机地址为:0111 10SA0 R/W#,当我们需要写时从机地址为:0111 1000 即:0x78

  • OLED_WriteCommand

    void OLED_WriteCommand(uint8_t Command)
    {
    	IIC_Start();
    	IIC_SendByte(0x78); //从机地址
    	IIC_waitACK();
    	IIC_SendByte(0x00);
    	IIC_waitACK();
    	IIC_SendByte(Command); // 写入命令
    	IIC_waitACK();
    	IIC_Stop();
    }
    
  • OLED_WriteData

    void OLED_WriteData(uint8_t Data)
    {
    	IIC_Start();
    	IIC_SendByte(0x78); //从机地址
    	IIC_waitACK();
    	IIC_SendByte(0x40);
    	IIC_waitACK();
    	IIC_SendByte(Data); // 写入命令
    	IIC_waitACK();
    	IIC_Stop();
    }
    

有了这两个函数之后就可以编写OLED的所有驱动函数了,下面是整个OLED驱动的实现

  • oled.c:

    #include "oled.h"
    #include "oled_font.h"
    #include "delay.h"
    #include "i2c.h"
    
    /**
     * @brief  OLED写命令
     * @param  Command 要写入的命令
     * @retval 无
     */
    void OLED_WriteCommand(uint8_t Command)
    {
        IIC_Start();
        IIC_SendByte(0x78);
        IIC_waitACK();
        IIC_SendByte(0x00); // 写命令
        IIC_waitACK();
        IIC_SendByte(Command);
        IIC_waitACK();
        IIC_Stop();
    }
    
    /**
     * @brief  OLED写数据
     * @param  Data 要写入的数据
     * @retval 无
     */
    void OLED_WriteData(uint8_t Data)
    {
        IIC_Start();
        IIC_SendByte(0x78);
        IIC_waitACK();
        IIC_SendByte(0x40); // 写数据
        IIC_waitACK();
        IIC_SendByte(Data);
        IIC_waitACK();
        IIC_Stop();
    }
    
    /**
     * @brief  OLED设置光标位置
     * @param  Y 以左上角为原点,向下方向的坐标,范围:0~7
     * @param  X 以左上角为原点,向右方向的坐标,范围:0~127
     * @retval 无
     */
    void OLED_SetCursor(uint8_t Y, uint8_t X)
    {
        OLED_WriteCommand(0xB0 | Y);                 // 设置Y位置
        OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); // 设置X位置高4位
        OLED_WriteCommand(0x00 | (X & 0x0F));        // 设置X位置低4位
    }
    
    /**
     * @brief  OLED清屏
     * @param  无
     * @retval 无
     */
    void OLED_Clear(void)
    {
        uint8_t i, j;
        for (j = 0; j < 8; j++)
        {
            OLED_SetCursor(j, 0);
            for (i = 0; i < 128; i++)
            {
                OLED_WriteData(0x00);
            }
        }
    }
    
    /**
     * @brief  OLED显示一个字符
     * @param  Line 行位置,范围:1~4
     * @param  Column 列位置,范围:1~16
     * @param  Char 要显示的一个字符,范围:ASCII可见字符
     * @retval 无
     */
    void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char)
    {
        uint8_t i;
        OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); // 设置光标位置在上半部分
        for (i = 0; i < 8; i++)
        {
            OLED_WriteData(OLED_F8x16[Char - ' '][i]); // 显示上半部分内容
        }
        OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); // 设置光标位置在下半部分
        for (i = 0; i < 8; i++)
        {
            OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); // 显示下半部分内容
        }
    }
    
    /**
     * @brief  OLED显示字符串
     * @param  Line 起始行位置,范围:1~4
     * @param  Column 起始列位置,范围:1~16
     * @param  String 要显示的字符串,范围:ASCII可见字符
     * @retval 无
     */
    void OLED_ShowString(uint8_t Line, uint8_t Column, char *String)
    {
        uint8_t i;
        for (i = 0; String[i] != '\0'; i++)
        {
            OLED_ShowChar(Line, Column + i, String[i]);
        }
    }
    
    /**
     * @brief  OLED次方函数
     * @retval 返回值等于X的Y次方
     */
    uint32_t OLED_Pow(uint32_t X, uint32_t Y)
    {
        uint32_t Result = 1;
        while (Y--)
        {
            Result *= X;
        }
        return Result;
    }
    
    /**
     * @brief  OLED显示数字(十进制,正数)
     * @param  Line 起始行位置,范围:1~4
     * @param  Column 起始列位置,范围:1~16
     * @param  Number 要显示的数字,范围:0~4294967295
     * @param  Length 要显示数字的长度,范围:1~10
     * @retval 无
     */
    void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
    {
        uint8_t i;
        for (i = 0; i < Length; i++)
        {
            OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0');
        }
    }
    
    /**
     * @brief  OLED显示数字(十进制,带符号数)
     * @param  Line 起始行位置,范围:1~4
     * @param  Column 起始列位置,范围:1~16
     * @param  Number 要显示的数字,范围:-2147483648~2147483647
     * @param  Length 要显示数字的长度,范围:1~10
     * @retval 无
     */
    void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length)
    {
        uint8_t i;
        uint32_t Number1;
        if (Number >= 0)
        {
            OLED_ShowChar(Line, Column, '+');
            Number1 = Number;
        }
        else
        {
            OLED_ShowChar(Line, Column, '-');
            Number1 = -Number;
        }
        for (i = 0; i < Length; i++)
        {
            OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0');
        }
    }
    
    /**
     * @brief  OLED显示数字(十六进制,正数)
     * @param  Line 起始行位置,范围:1~4
     * @param  Column 起始列位置,范围:1~16
     * @param  Number 要显示的数字,范围:0~0xFFFFFFFF
     * @param  Length 要显示数字的长度,范围:1~8
     * @retval 无
     */
    void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
    {
        uint8_t i, SingleNumber;
        for (i = 0; i < Length; i++)
        {
            SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16;
            if (SingleNumber < 10)
            {
                OLED_ShowChar(Line, Column + i, SingleNumber + '0');
            }
            else
            {
                OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A');
            }
        }
    }
    
    /**
     * @brief  OLED显示数字(二进制,正数)
     * @param  Line 起始行位置,范围:1~4
     * @param  Column 起始列位置,范围:1~16
     * @param  Number 要显示的数字,范围:0~1111 1111 1111 1111
     * @param  Length 要显示数字的长度,范围:1~16
     * @retval 无
     */
    void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
    {
        uint8_t i;
        for (i = 0; i < Length; i++)
        {
            OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0');
        }
    }
    
    /**
     * @brief  OLED初始化
     * @param  无
     * @retval 无
     */
    void OLED_Init(void)
    {
        uint32_t i, j;
    
        for (i = 0; i < 1000; i++) // 上电延时
        {
            for (j = 0; j < 1000; j++)
                ;
        }
    
        // IIC_init(); // OLED IIC接口初始化 在主函数中初始化了
    
        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); // 设置左右方向,0xA1正常 0xA0左右反置
    
        OLED_WriteCommand(0xC8); // 设置上下方向,0xC8正常 0xC0上下反置
    
        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); // 开启显示
    
        OLED_Clear(); // OLED清屏
    }
    
    
  • oled_font.h

    #ifndef __OLED_FONT_H
    #define __OLED_FONT_H
    #include "stm32f4xx.h"
    /*OLED字模库,宽8像素,高16像素*/
    const uint8_t OLED_F8x16[][16]=
    {
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0
    	
    	0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
    	
    	0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
    	
    	0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,
    	0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
    	
    	0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,
    	0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
    	
    	0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,
    	0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
    	
    	0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,
    	0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
    	
    	0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
    	
    	0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,
    	0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
    	
    	0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,
    	0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
    	
    	0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,
    	0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
    	
    	0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,
    	0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
    	
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
    	
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
    	
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
    	
    	0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,
    	0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
    	
    	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
    	0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
    	
    	0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
    	
    	0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,
    	0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
    	
    	0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,
    	0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
    	
    	0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,
    	0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
    	
    	0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,
    	0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
    	
    	0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,
    	0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
    	
    	0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,
    	0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
    	
    	0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
    	0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
    	
    	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
    	0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
    	
    	0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
    	
    	0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
    	
    	0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,
    	0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
    	
    	0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
    	0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
    	
    	0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,
    	0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
    	
    	0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,
    	0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
    	
    	0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,
    	0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
    	
    	0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,
    	0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
    	
    	0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,
    	0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
    	
    	0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,
    	0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
    	
    	0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,
    	0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
    	
    	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
    	0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
    	
    	0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,
    	0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
    	
    	0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,
    	0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
    	
    	0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
    	0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
    	
    	0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,
    	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
    	
    	0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,
    	0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
    	
    	0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,
    	0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
    	
    	0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,
    	0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
    	
    	0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,
    	0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
    	
    	0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,
    	0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
    	
    	0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
    	0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
    	
    	0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,
    	0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
    	
    	0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,
    	0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
    	
    	0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,
    	0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
    	
    	0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,
    	0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
    	
    	0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,
    	0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
    	
    	0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,
    	0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
    	
    	0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,
    	0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
    	
    	0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,
    	0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
    	
    	0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,
    	0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
    	
    	0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,
    	0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
    	
    	0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,
    	0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
    	
    	0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,
    	0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
    	
    	0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
    	
    	0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
    	0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
    	
    	0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
    	
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    	0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
    	
    	0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
    	
    	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    	0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
    	
    	0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,
    	0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
    	
    	0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
    	0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
    	
    	0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,
    	0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
    	
    	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    	0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
    	
    	0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,
    	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
    	
    	0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
    	0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
    	
    	0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,
    	0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
    	
    	0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,
    	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
    	
    	0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,
    	0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
    	
    	0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,
    	0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
    	
    	0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,
    	0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
    	
    	0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
    	0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
    	
    	0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,
    	0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
    	
    	0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,
    	0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
    	
    	0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,
    	0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
    	
    	0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,
    	0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
    	
    	0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
    	0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
    	
    	0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
    	0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
    	
    	0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,
    	0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
    	
    	0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,
    	0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
    	
    	0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
    	0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
    	
    	0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,
    	0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
    	
    	0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,
    	0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
    	
    	0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
    	0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
    	
    	0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
    	0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
    	
    	0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,
    	0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
    	
    	0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
    	
    	0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,
    	0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
    	
    	0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
    };
    
    #endif
    
    
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以通过以下代码来在STM32F407上使用IIC驱动OLED屏幕进行显示: ```c #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "oled.h" #include "myiic.h" int main(void) { int i; delay_init(168); LED_Init(); IIC_Init(); OLED_Init(); while(1) { OLED_P8x16Str(0,0,"Hello"); OLED_P8x16Str(0,2,"OLED Open"); OLED_P8x16Str(0,4,"Just me"); OLED_P6x8Str(0,6,"hbwl"); OLED_P6x8Str(0,7,"heltec.taobao.com"); delay_ms(1000); GPIO_ResetBits(GPIOF,GPIO_Pin_9); GPIO_SetBits(GPIOF,GPIO_Pin_10); delay_ms(500); GPIO_SetBits(GPIOF,GPIO_Pin_9); GPIO_ResetBits(GPIOF,GPIO_Pin_10); delay_ms(500); } } ``` 在这段代码中,我们首先进行了一些初始化操作,然后通过调用`OLED_P8x16Str`和`OLED_P6x8Str`函数来在OLED屏幕上显示文字。最后,我们通过控制GPIO引脚的电平来实现屏幕的闪烁效果。 请注意,这段代码中使用了一些头文件和函数,您需要确保这些文件和函数的定义正确引入到您的工程中。另外,您还需要根据您的具体硬件连接情况进行相应的配置。 希望这段代码能帮助您成功使用IIC驱动OLED屏幕进行显示。如果您有任何问题,请随时向我提问。 #### 引用[.reference_title] - *1* *2* *3* [STM32F407ZGT6的OLEDIIC的实现(全代码)](https://blog.csdn.net/qq_53945939/article/details/120225955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值