SSD1306显示

 

 

 

 

 

 

driver_oled.c

#include "driver_oled.h"
#include "driver_i2c.h"
#include "ascii_font.c"                //字符

/*
 *  函数名:OLED_WriteCmd
 *  功能描述:I2C发送命令给OLED:开始信号->设备地址->控制字节->命令数据->停止信号
 *  输入参数:cmd-——>发送给OLED的命令数据
 *  输出参数:无
 *  返回值:无
*/
void OLED_WriteCmd(uint8_t cmd)
{
    I2C_Start();
    I2C_WriteByte(OLED_WRITE_ADDR);
    // I2C_WriteByte(OLED_ADDR | OLED_WRITE);
    I2C_WriteByte(0x00);
    I2C_WriteByte(cmd);
    I2C_Stop();
}

/*
 *  函数名:OLED_WriteData
 *  功能描述:I2C发送命令给OLED:开始信号->设备地址->控制字节->GDRAM数据->停止信号
 *  输入参数:data-——>发送给OLED的写入GDRAM的数据
 *  输出参数:无
 *  返回值:无
*/
void OLED_WriteData(uint8_t data)
{
    I2C_Start();
    I2C_WriteByte(OLED_WRITE_ADDR);
    // I2C_WriteByte(OLED_ADDR | OLED_WRITE);
    I2C_WriteByte(0x40);
    I2C_WriteByte(data);
    I2C_Stop();
}

/*
 *  函数名:OLED_WriteNBytes
 *  功能描述:连续发送N个写入显存的数据:开始信号->设备地址->控制字节->N个GDRAM数据->停止信号
 *  输入参数:buf——>指向保存了要发送数据的首地址;length-->发送数据的个数
 *  输出参数:无
 *  返回值:无
*/
void OLED_WriteNBytes(uint8_t *buf, uint16_t length)
{
    uint16_t i = 0;
    if(buf == NULL) return;
    I2C_Start();
    I2C_WriteByte(OLED_WRITE_ADDR);
    I2C_WriteByte(0x40);
    for(i=0; i<length; i++)
    {
        I2C_WriteByte(buf[i]);
    }
    I2C_Stop();
}

/************** 1. 基础命令功能函数 **************/
/*
 *  函数名:OLED_SetContrastValue
 *  功能描述:设置OLED的对比度:发送命令0x81--->发送对比度值
 *  输入参数:value --> 对比度值,范围0~255
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetContrastValue(uint8_t value)
{
    OLED_WriteCmd(0x81);
    OLED_WriteCmd(value);
}

/************** 2. 滚动命令功能函数 **************/
/*
 *  函数名:OLED_H_Scroll
 *  功能描述:让指定页的像素朝着设置的方向按设置的频率水平滚动
 *  输入参数:dir--->滚动方向:朝左或者朝右
 *            start--->起始页
 *            fr_time--->滚动间隔时间,每隔这么多帧水平偏移一列滚动
 *            end--->结束页
 *  输出参数:无
 *  返回值:无
*/
void OLED_H_Scroll(H_SCROLL_DIR dir, uint8_t start, uint8_t fr_time, uint8_t end)
{
    if((dir != H_RIGHT) && (dir != H_LEFT))     return;
    if((start>0x07) || (fr_time>0x07) || (end>0x07))    return;
    OLED_WriteCmd(dir);
    OLED_WriteCmd(0x00);
    OLED_WriteCmd(start);
    OLED_WriteCmd(fr_time);
    OLED_WriteCmd(end);
    OLED_WriteCmd(0x00);
    OLED_WriteCmd(0xFF);
}

/*
 *  函数名:OLED_HV_Scroll
 *  功能描述:让指定页的像素朝着设置的方向按设置的频率水平滚动且会将像素的行地址进行偏移offset这么多个单位
 *  输入参数:dir--->滚动方向:朝左或者朝右
 *            start--->起始页
 *            fr_time--->滚动间隔时间,每隔这么多帧水平偏移一列滚动
 *            end--->结束页
 *            offset--->行偏移单位
 *  输出参数:无
 *  返回值:无
*/
void OLED_HV_Scroll(HV_SCROLL_DIR dir, uint8_t start, uint8_t fr_time, uint8_t end, uint8_t offset)
{
    if((dir != HV_RIGHT) && (dir != HV_LEFT))     return;
    if((start>0x07) || (fr_time>0x07) || (end>0x07) || (offset>0x3F))    return;
    OLED_WriteCmd(dir);
    OLED_WriteCmd(0x00);
    OLED_WriteCmd(start);
    OLED_WriteCmd(fr_time);
    OLED_WriteCmd(end);
    OLED_WriteCmd(offset);
}

/*
 *  函数名:OLED_SetVScrollArea
 *  功能描述:设置OLED像素垂直滚动的区域
 *  输入参数:area-->顶行区域
 *            row_num--->滚动的行区域
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetVScrollArea(uint8_t area, uint8_t row_num)
{
    if((area>0x3F) || (row_num>0x7F))       return;
    OLED_WriteCmd(0xA3);
    OLED_WriteCmd(area);
    OLED_WriteCmd(row_num);
}

/************** 3. 地址设置功能函数 **************/
static MEM_MODE mem_mode = PAGE_ADDR_MODE;  // 静态局部变量,保存OLED的地址模式的

/*
 *  函数名:OLED_SetColAddr_PAGE
 *  功能描述:设置OLED在页地址模式下的显示起始行地址
 *  输入参数:addr-->起始行地址
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetColAddr_PAGE(uint8_t addr)
{
    if(mem_mode != PAGE_ADDR_MODE)  return;
    if(addr > 0x7F)   return;
    OLED_WriteCmd(0x00 + (addr & 0x0F));
    OLED_WriteCmd(0x10 + (addr>>4));
}

/*
 *  函数名:OLED_SetMemAddrMode
 *  功能描述:设置OLED的地址模式
 *  输入参数:mode-->地址模式:页地址模式、水平地址模式、垂直地址模式
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetMemAddrMode(MEM_MODE mode)
{
    if((mode != H_ADDR_MODE) && (mode != V_ADDR_MODE) && (mode != PAGE_ADDR_MODE))      return;
    OLED_WriteCmd(0x20);
    OLED_WriteCmd(mode);
    mem_mode = mode;
}

/*
 *  函数名:OLED_SetColAddr_HV
 *  功能描述:设置OLED在水平地址模式或垂直地址模式下像素显示的起始行地址和结束行地址
 *  输入参数:start-->起始行地址
 *            end --->结束行地址
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetColAddr_HV(uint8_t start, uint8_t end)
{
    if(mem_mode == PAGE_ADDR_MODE)      return;
    if((start > 127) || (end > 127))    return;
    OLED_WriteCmd(0x21);
    OLED_WriteCmd(start);
    OLED_WriteCmd(end);
}

/*
 *  函数名:OLED_SetPageAddr_HV
 *  功能描述:设置OLED在水平地址模式或垂直地址模式下像素显示的起始页地址和结束页地址
 *  输入参数:start-->起始页地址
 *            end --->结束页地址
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetPageAddr_HV(uint8_t start, uint8_t end)
{
    if(mem_mode == PAGE_ADDR_MODE)      return;
    if((start > 7) || (end > 7))        return; 
    OLED_WriteCmd(0x22);
    OLED_WriteCmd(start);
    OLED_WriteCmd(end);
}

/*
 *  函数名:OLED_SetPageAddr_PAGE
 *  功能描述:设置OLED在页地址模式下的显示起始页地址
 *  输入参数:addr-->起始页地址
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetPageAddr_PAGE(uint8_t addr)
{
    if(mem_mode != PAGE_ADDR_MODE)  return;
    if(addr > 7)   return;
    OLED_WriteCmd(0xB0 + addr);
}

/************** 4. 硬件配置功能函数 **************/
/*
 *  函数名:OLED_SetDispStartLine
 *  功能描述:设置OLED从第line行开始显示,即将默认的0行偏移至line那一行
 *  输入参数:line-->显示的起始行
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetDispStartLine(uint8_t line)
{
    if(line > 63)       return;
    OLED_WriteCmd(0x40 + line);
}

/*
 *  函数名:OLED_SetMuxRatio
 *  功能描述:设置OLED复用率
 *  输入参数:ratio-->复用率值
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetMuxRatio(uint8_t ratio)
{
    if((ratio < 15) || (ratio > 63))      return;
    OLED_WriteCmd(0xA8);
    OLED_WriteCmd(ratio);
}

/*
 *  函数名:OLED_SetDispOffset
 *  功能描述:设置OLED的COM引脚偏移值
 *  输入参数:offset-->COM偏移值
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetDispOffset(uint8_t offset)
{
    if(offset > 63)     return;
    OLED_WriteCmd(0xD3);
    OLED_WriteCmd(offset);
}

/*
 *  函数名:OLED_SetComConfig
 *  功能描述:设置OLED的COM引脚属性
 *  输入参数:mode-->COM引脚模式是连续的还是可选择的
 *            state-->COM引脚翻转与否
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetComConfig(COM_PINS_MODE mode, COM_REMAP_STATE state)
{
    if((mode != COM_PIN_SEQ) && (mode != COM_PIN_ALT))      return;
    if((state != COM_NOREMAP) && (state != COM_REMAP))      return;
    
    OLED_WriteCmd(0xDA);
    OLED_WriteCmd(0x02 + (mode << 4) + (state << 5));
}

/************** 5. 时间设置功能函数 **************/
/*
 *  函数名:OLED_SetDCLK_Freq
 *  功能描述:设置OLED的扫描周期和晶振频率
 *  输入参数:div-->时钟分频系数
 *            freq-->晶振频率
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetDCLK_Freq(uint8_t div, uint8_t freq)
{
    if((div>0x0F) || (freq>0x0F))       return;
    OLED_WriteCmd(0xD5);
    OLED_WriteCmd(div + (freq<<4));
}

/*
 *  函数名:OLED_SetPreChargePeriod
 *  功能描述:设置OLED的预充电周期
 *  输入参数:phase1-->预充电阶段1时间
 *            phase2-->预充电阶段2时间
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetPreChargePeriod(uint8_t phase1, uint8_t phase2)
{
    if((phase1>0x0F) || (phase2>0x0F))       return;
    OLED_WriteCmd(0xD9);
    OLED_WriteCmd(phase1 + (phase2<<4));    
}

/*
 *  函数名:OLED_SetVcomhLevel
 *  功能描述:设置OLED的电压等级
 *  输入参数:level-->电压等级
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetVcomhLevel(VCOMH_LEVEL level)
{
    if((level != LEVEL_0) && (level != LEVEL_1) && (level != LEVEL_2))      return;
    OLED_WriteCmd(0xDB);
    OLED_WriteCmd(level << 4);
}

/************** 6. 电荷碰撞功能函数 **************/
/*
 *  函数名:OLED_SetChargePump
 *  功能描述:打开或关闭OLED的电荷泵
 *  输入参数:state-->电荷泵打开或关闭
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetChargePump(CHARGE_PUMP_STATE state)
{
    if((state != PUMP_DISABLE) && (state != PUMP_ENABLE))   return;
    OLED_WriteCmd(0x8D);
    OLED_WriteCmd((state<<2) + 0x10);
}

/************** 7. OLED初始化函数 **************/
void OLED_Init(void)
{   
    OLED_SetMemAddrMode(PAGE_ADDR_MODE);    // 0. 设置地址模式
    OLED_SetMuxRatio(0x3F);                 // 1. 设置多路复用率
    OLED_SetDispOffset(0x00);               // 2. 设置显示的偏移值
    OLED_SetDispStartLine(0x00);            // 3. 设置起始行
    OLED_SEG_REMAP();                       // 4. 行翻转
    OLED_SCAN_REMAP();                      // 5. 正常扫描
    OLED_SetComConfig(0x00, 0x00);          // 6. COM 引脚设置
    OLED_SetContrastValue(0x7F);            // 7. 设置对比度
    ENTIRE_DISP_OFF();                      // 8. 全屏点亮/熄灭
    DISP_NORMAL();                          // 9. 显示模式
    OLED_SetDCLK_Freq(0x00, 0x08);          // 10. 设置分频系数和频率增值
    OLED_SetChargePump(PUMP_ENABLE);        // 11. 使能电荷碰撞
    
    OLED_SetComConfig(COM_PIN_ALT, COM_NOREMAP);
    
    DISP_ON();
}

/************** 8. 基本驱动功能函数 **************/
/*
 *  函数名:OLED_SetPosition
 *  功能描述:设置像素显示的起始页和起始列地址
 *  输入参数:page-->页地址模式下的起始页地址
 *            col-->页地址模式下的起始行地址
 *  输出参数:无
 *  返回值:无
*/
void OLED_SetPosition(uint8_t page, uint8_t col)
{
    OLED_SetPageAddr_PAGE(page);
    OLED_SetColAddr_PAGE(col);
}

/*
 *  函数名:OLED_Clear
 *  功能描述:清屏函数
 *  输入参数:无
 *  输出参数:无
 *  返回值:无
*/
void OLED_Clear(void)
{
    uint8_t i = 0;
    uint8_t buf[128] = {0};
    
    for(i=0; i<8; i++)
    {
        OLED_SetPosition(i, 0);
        OLED_WriteNBytes(&buf[0], 128);
    }
}

/*
 *  函数名:OLED_PutChar
 *  功能描述:显示一个字符
 *  输入参数:page --> 起始页地址
 *            col --> 起始列地址
 *            c -->   显示的字符
 *  输出参数:无
 *  返回值:无
*/
void OLED_PutChar(uint8_t page, uint8_t col, char c)
{
    OLED_SetPosition(page, col);
    OLED_WriteNBytes((uint8_t*)&ascii_font[c][0], 8);
    
    OLED_SetPosition(page + 1, col);
    OLED_WriteNBytes((uint8_t*)&ascii_font[c][8], 8);
}

/*
 *  函数名:OLED_PrintString
 *  功能描述:显示一个字符串
 *  输入参数:page --> 起始页地址
 *            col --> 起始列地址
 *            str -->   显示的字符串
 *  输出参数:无
 *  返回值:无
*/
void OLED_PrintString(uint8_t page, uint8_t col, char *str)
{
    while(*str != 0)
    {
        OLED_PutChar(page, col, *str);
        col += 8;
        if(col > 127)
        {
            page += 2;
        }
        
        if(page > 7)
        {
            page = 0;
        }
        
        str++;
    }
}
 

driver_oled.h 

 

#ifndef __DRIVER_OLED_H
#define __DRIVER_OLED_H

#include "stm32f1xx_hal.h"

// 第一种,分别定义读写设备地址
#define OLED_WRITE_ADDR      0x78
#define OLED_READ_ADDR       0x79

// 第二种,定义基础地址,通过改变读写位来改变地址
#define OLED_ADDR       0x78
#define OLED_WRITE      0x00
#define OLED_READ       0x01

/* 函数声明 */
/*
 *  函数名:OLED_WriteCmd
 *  功能描述:I2C发送命令给OLED:开始信号->设备地址->控制字节->命令数据->停止信号
 *  输入参数:cmd-——>发送给OLED的命令数据
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_WriteCmd(uint8_t cmd);

/*
 *  函数名:OLED_WriteData
 *  功能描述:I2C发送命令给OLED:开始信号->设备地址->控制字节->GDRAM数据->停止信号
 *  输入参数:data-——>发送给OLED的写入GDRAM的数据
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_WriteData(uint8_t data);

/*
 *  函数名:OLED_WriteNBytes
 *  功能描述:连续发送N个写入显存的数据:开始信号->设备地址->控制字节->N个GDRAM数据->停止信号
 *  输入参数:buf——>指向保存了要发送数据的首地址;length-->发送数据的个数
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_WriteNBytes(uint8_t *buf, uint16_t length);

/* 1. 基础命令功能函数 */
/*
 *  函数名:OLED_SetContrastValue
 *  功能描述:设置OLED的对比度:发送命令0x81--->发送对比度值
 *  输入参数:value --> 对比度值,范围0~255
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetContrastValue(uint8_t value);
/*
    全屏点亮或者熄灭
*/
#define ENTIRE_DISP_ON()       OLED_WriteCmd(0xA5) 
#define ENTIRE_DISP_OFF()      OLED_WriteCmd(0xA4) 
/*
    阴码显示或者阳码显示
*/
#define DISP_NORMAL()          OLED_WriteCmd(0xA6)  
#define DISP_INVERSE()         OLED_WriteCmd(0xA7)
/*
    打开显示或者关闭显示
*/
#define DISP_ON()              OLED_WriteCmd(0xAF) 
#define DISP_OFF()             OLED_WriteCmd(0xAE) 

/* 2. 滚动命令功能函数 */
typedef enum
{
    H_RIGHT     = 0x26,
    H_LEFT      = 0x27,
}H_SCROLL_DIR;  // 水平滚动方向

/*
 *  函数名:OLED_H_Scroll
 *  功能描述:让指定页的像素朝着设置的方向按设置的频率水平滚动
 *  输入参数:dir--->滚动方向:朝左或者朝右
 *            start--->起始页
 *            fr_time--->滚动间隔时间,每隔这么多帧水平偏移一列滚动
 *            end--->结束页
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_H_Scroll(H_SCROLL_DIR dir, uint8_t start, uint8_t fr_time, uint8_t end);

typedef enum
{
    HV_RIGHT    = 0x29,
    HV_LEFT     = 0x2A,
}HV_SCROLL_DIR;     // 水平和垂直滚动的方向

/*
 *  函数名:OLED_HV_Scroll
 *  功能描述:让指定页的像素朝着设置的方向按设置的频率水平滚动且会将像素的行地址进行偏移offset这么多个单位
 *  输入参数:dir--->滚动方向:朝左或者朝右
 *            start--->起始页
 *            fr_time--->滚动间隔时间,每隔这么多帧水平偏移一列滚动
 *            end--->结束页
 *            offset--->行偏移单位
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_HV_Scroll(HV_SCROLL_DIR dir, uint8_t start, uint8_t fr_time, uint8_t end, uint8_t offset);

/* 
    开始或者停止滚动
*/
#define SCROLL_ON()             OLED_WriteCmd(0x2F)
#define SCROLL_OFF()            OLED_WriteCmd(0x2E)

/*
 *  函数名:OLED_SetVScrollArea
 *  功能描述:设置OLED像素垂直滚动的区域
 *  输入参数:area-->顶行区域
 *            row_num--->滚动的行区域
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetVScrollArea(uint8_t area, uint8_t row_num);

/* 3. 地址设置功能函数 */
typedef enum
{
    H_ADDR_MODE     = 0,    // 水平地址模式
    V_ADDR_MODE     = 1,    // 垂直地址模式
    PAGE_ADDR_MODE  = 2,    // 页地址模式
}MEM_MODE;  // 内存地址模式

/*
 *  函数名:OLED_SetColAddr_PAGE
 *  功能描述:设置OLED在页地址模式下的显示起始行地址
 *  输入参数:addr-->起始行地址
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetColAddr_PAGE(uint8_t addr);

/*
 *  函数名:OLED_SetMemAddrMode
 *  功能描述:设置OLED的地址模式
 *  输入参数:mode-->地址模式:页地址模式、水平地址模式、垂直地址模式
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetMemAddrMode(MEM_MODE mode);

/*
 *  函数名:OLED_SetColAddr_HV
 *  功能描述:设置OLED在水平地址模式或垂直地址模式下像素显示的起始行地址和结束行地址
 *  输入参数:start-->起始行地址
 *            end --->结束行地址
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetColAddr_HV(uint8_t start, uint8_t end);

/*
 *  函数名:OLED_SetPageAddr_HV
 *  功能描述:设置OLED在水平地址模式或垂直地址模式下像素显示的起始页地址和结束页地址
 *  输入参数:start-->起始页地址
 *            end --->结束页地址
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetPageAddr_HV(uint8_t start, uint8_t end);

/*
 *  函数名:OLED_SetPageAddr_PAGE
 *  功能描述:设置OLED在页地址模式下的显示起始页地址
 *  输入参数:addr-->起始页地址
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetPageAddr_PAGE(uint8_t addr);

/* 4. 硬件配置功能函数 */
/*
 *  函数名:OLED_SetDispStartLine
 *  功能描述:设置OLED从第line行开始显示,即将默认的0行偏移至line那一行
 *  输入参数:line-->显示的起始行
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetDispStartLine(uint8_t line);

/*
    行地址翻转或者不翻转
*/
#define OLED_SEG_REMAP()        OLED_WriteCmd(0xA1)
#define OLED_SEG_NOREMAP()      OLED_WriteCmd(0xA0)

/*
 *  函数名:OLED_SetMuxRatio
 *  功能描述:设置OLED复用率
 *  输入参数:ratio-->复用率值
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetMuxRatio(uint8_t ratio);

/*
    COM引脚扫描方向正常扫描或者逆扫描
*/
#define OLED_SCAN_NORMAL()      OLED_WriteCmd(0xC0)
#define OLED_SCAN_REMAP()       OLED_WriteCmd(0xC8)

/*
 *  函数名:OLED_SetDispOffset
 *  功能描述:设置OLED的COM引脚偏移值
 *  输入参数:offset-->COM偏移值
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetDispOffset(uint8_t offset);

typedef enum
{
    COM_PIN_SEQ     = 0,
    COM_PIN_ALT     = 1,
}COM_PINS_MODE; // COM引脚属性
typedef enum
{
    COM_NOREMAP     = 0,
    COM_REMAP       = 1,
}COM_REMAP_STATE;   // COM引脚翻转

/*
 *  函数名:OLED_SetComConfig
 *  功能描述:设置OLED的COM引脚属性
 *  输入参数:mode-->COM引脚模式是连续的还是可选择的
 *            state-->COM引脚翻转与否
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetComConfig(COM_PINS_MODE mode, COM_REMAP_STATE state);

/* 5. 时间设置功能函数 */
/*
 *  函数名:OLED_SetDCLK_Freq
 *  功能描述:设置OLED的扫描周期和晶振频率
 *  输入参数:div-->时钟分频系数
 *            freq-->晶振频率
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetDCLK_Freq(uint8_t div, uint8_t freq);

/*
 *  函数名:OLED_SetPreChargePeriod
 *  功能描述:设置OLED的预充电周期
 *  输入参数:phase1-->预充电阶段1时间
 *            phase2-->预充电阶段2时间
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetPreChargePeriod(uint8_t phase1, uint8_t phase2);
    
typedef enum
{
    LEVEL_0     = 0x00,
    LEVEL_1     = 0x20,
    LEVEL_2     = 0x30,
}VCOMH_LEVEL;   // 电压等级
/*
 *  函数名:OLED_SetVcomhLevel
 *  功能描述:设置OLED的电压等级
 *  输入参数:level-->电压等级
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetVcomhLevel(VCOMH_LEVEL level);

/* 6. 电荷碰撞功能函数 */
typedef enum
{
    PUMP_DISABLE    = 0,
    PUMP_ENABLE     = 1,
}CHARGE_PUMP_STATE; // 打开或者关闭电荷泵
/*
 *  函数名:OLED_SetChargePump
 *  功能描述:打开或关闭OLED的电荷泵
 *  输入参数:state-->电荷泵打开或关闭
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetChargePump(CHARGE_PUMP_STATE state);

/* 7. OLED初始化函数 */
extern void OLED_Init(void);

/* 8. 基本驱动功能函数 */
/*
 *  函数名:OLED_SetPosition
 *  功能描述:设置像素显示的起始页和起始列地址
 *  输入参数:page-->页地址模式下的起始页地址
 *            col-->页地址模式下的起始行地址
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_SetPosition(uint8_t page, uint8_t col);

/*
 *  函数名:OLED_Clear
 *  功能描述:清屏函数
 *  输入参数:无
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_Clear(void);

/*
 *  函数名:OLED_PutChar
 *  功能描述:显示一个字符
 *  输入参数:page --> 起始页地址
 *            col --> 起始列地址
 *            c -->   显示的字符
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_PutChar(uint8_t page, uint8_t col, char c);

/*
 *  函数名:OLED_PrintString
 *  功能描述:显示一个字符
 *  输入参数:page --> 起始页地址
 *            col --> 起始列地址
 *            c -->   显示的字符
 *  输出参数:无
 *  返回值:无
*/
extern void OLED_PrintString(uint8_t page, uint8_t col, char *str);
#endif /* __DRIVER_OLED_H */

 #include "ascii_font.c" 

#include "stm32f1xx_hal.h"

const uint8_t ascii_font[128][16] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",2*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",3*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",4*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",5*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",6*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",7*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",8*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"    ",9*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",10*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",11*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",12*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",13*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",14*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",15*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",16*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",17*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",18*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",19*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",20*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",21*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",22*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",23*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",24*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",25*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",26*/

{0x00,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20},/*"",27*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",28*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",29*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",30*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",31*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",32*/

{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00},/*"!",33*/

{0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",34*/

{0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00},/*"#",35*/

{0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00},/*"$",36*/

{0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00},/*"%",37*/

{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10},/*"&",38*/

{0x00,0x12,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",39*/

{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",40*/

{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",41*/

{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",42*/

{0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01},/*"+",43*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00},/*",",44*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00},/*"-",45*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",46*/

{0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00},/*"/",47*/

{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",48*/

{0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00},/*"1",49*/

{0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",50*/

{0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00},/*"3",51*/

{0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24},/*"4",52*/

{0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00},/*"5",53*/

{0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00},/*"6",54*/

{0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00},/*"7",55*/

{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",56*/

{0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00},/*"9",57*/

{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",58*/

{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00},/*";",59*/

{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",60*/

{0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x00},/*"=",61*/

{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",62*/

{0x00,0x70,0x48,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x30,0x37,0x00,0x00,0x00},/*"?",63*/

{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x2F,0x28,0x17,0x00},/*"@",64*/

{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",65*/

{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",66*/

{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",67*/

{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",68*/

{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",69*/

{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",70*/

{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",71*/

{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",72*/

{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",73*/

{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",74*/

{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",75*/

{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",76*/

{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00},/*"M",77*/

{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",78*/

{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",79*/

{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",80*/

{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00},/*"Q",81*/

{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",82*/

{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",83*/

{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",84*/

{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",85*/

{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",86*/

{0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00},/*"W",87*/

{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",88*/

{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",89*/

{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",90*/

{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",91*/

{0x00,0x04,0x38,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",92*/

{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",93*/

{0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",94*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",95*/

{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",96*/

{0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00},/*"a",97*/

{0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",98*/

{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",99*/

{0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"d",100*/

{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00},/*"e",101*/

{0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",102*/

{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",103*/

{0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",104*/

{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",105*/

{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",106*/

{0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00},/*"k",107*/

{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",108*/

{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",109*/

{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",110*/

{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",111*/

{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00},/*"p",112*/

{0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80},/*"q",113*/

{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",114*/

{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",115*/

{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00},/*"t",116*/

{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",117*/

{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00},/*"v",118*/

{0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01},/*"w",119*/

{0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00},/*"x",120*/

{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00},/*"y",121*/

{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",122*/

{0x00,0x00,0x00,0x00,0x00,0xFC,0x02,0x02,0x00,0x00,0x00,0x00,0x01,0x3E,0x40,0x40},/*"{",123*/

{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",124*/

{0x02,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x3E,0x01,0x00,0x00,0x00,0x00},/*"}",125*/

{0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",126*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}/*"",127*/
};

main.c

#include "driver_oled.h"

 OLED_Init();
    // 3. 清屏
    OLED_Clear();
    // 4. 在第0列第0页打印一个字符'A'
    OLED_PutChar(0, 0, 'A');
    // 5. 在第16列第9页打印一个字符'Y'
    OLED_PutChar(0, 16, 'Y');
    // 6. 在第0列第2页打印一个字符串"Hello World!"
    OLED_PrintString(2, 0, "Hello World!");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值