STM32
直播中

李进锋

7年用户 906经验值
私信 关注
[问答]

如何编写0.96寸OLED的底层驱动?

如何编写0.96寸OLED的底层驱动?

回帖(1)

林俭幼

2021-11-23 11:50:14
1、在STM32CubeMx里面进行配置

1.1、打开STM32CubeMx,点击“ACCESS TO MCU SELECTOR”;




1.2、基于我的开发板为STM32F103VCT6,因此选择芯片型号为STM32F103VCTx,然后点击“Start Project”生成一个新工程;





1.3、点击“System Core”下的“SYS”,因为我自己用ST-LINK下载,因此将"SYS"配置为“Serial Wire”;





1.4、如果需要外部时钟的话就点击“RCC”进行外部时钟配置,具体的参数根据自己的开发板需要进行设置;如果要显示最好还是要配置成32MHz。










1.5、进行IIC配置,默认选用芯片的PB6、PB7作为SCL和SDA引脚,点击芯片的PB6、PB7引脚,在下拉的模式里面选择I2C1_SCL以及I2C2_SDA,在左侧的“Connectivity”中选择“I2C1,在打开的界面中点击选择“I2C”,其他参数默认即可;说一句,在这里如果直接在左侧的“Connectivity”中选择“I2C1,也可以,我这属于有点多此一举。








1.6、点击"Project Manager",输入文件名,将“Toolchain/IDE”选为"MDK-ARM",点击“Code Generator”,将“Generate peripheral …”勾选,最后点击“GENERATE CODE”生成代码;









到此为止,在STM32CubeMx上的配置则全部完成,接下来的工作将在Keil中完成。
2、编写0.96寸OLED的底层驱动

2.1、OLED的驱动文件的oled.c代码如下所示:

#include "oled.h"
#include "i2c.h"
#include "oledfont.h"          //头文件


uint8_t CMD_Data[]={
0xAE, 0x00, 0x10, 0x40, 0xB0, 0x81, 0xFF, 0xA1, 0xA6, 0xA8, 0x3F,
                                       
0xC8, 0xD3, 0x00, 0xD5, 0x80, 0xD8, 0x05, 0xD9, 0xF1, 0xDA, 0x12,
                                       
0xD8, 0x30, 0x8D, 0x14, 0xAF};      //初始化命令




void WriteCmd(void)
{
        uint8_t i = 0;
        for(i=0; i<27; i++)
        {
                HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,CMD_Data+i,1,0x100);
        }
}
//向设备写控制命令
void OLED_WR_CMD(uint8_t cmd)
{
        HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&cmd,1,0x100);
}
//向设备写数据
void OLED_WR_DATA(uint8_t data)
{
        HAL_I2C_Mem_Write(&hi2c1 ,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&data,1,0x100);
}
//初始化oled屏幕
void OLED_Init(void)
{        
        HAL_Delay(200);

        WriteCmd();
}
//清屏
void OLED_Clear(void)
{
        uint8_t i,n;                    
        for(i=0;i<8;i++)  
        {  
                OLED_WR_CMD(0xb0+i);
                OLED_WR_CMD (0x00);
                OLED_WR_CMD (0x10);
                for(n=0;n<128;n++)
                        OLED_WR_DATA(0);
        }
}
//开启OLED显示   
void OLED_Display_On(void)
{
        OLED_WR_CMD(0X8D);  //SET DCDC命令
        OLED_WR_CMD(0X14);  //DCDC ON
        OLED_WR_CMD(0XAF);  //DISPLAY ON
}
//关闭OLED显示     
void OLED_Display_Off(void)
{
        OLED_WR_CMD(0X8D);  //SET DCDC命令
        OLED_WR_CMD(0X10);  //DCDC OFF
        OLED_WR_CMD(0XAE);  //DISPLAY OFF
}                                            
void OLED_Set_Pos(uint8_t x, uint8_t y)
{        
        OLED_WR_CMD(0xb0+y);
        OLED_WR_CMD(((x&0xf0)>>4)|0x10);
        OLED_WR_CMD(x&0x0f);
}

void OLED_On(void)  
{  
        uint8_t i,n;                    
        for(i=0;i<8;i++)  
        {  
                OLED_WR_CMD(0xb0+i);    //设置页地址(0~7)
                OLED_WR_CMD(0x00);      //设置显示位置—列低地址
                OLED_WR_CMD(0x10);      //设置显示位置—列高地址   
                for(n=0;n<128;n++)
                        OLED_WR_DATA(1);
        } //更新显示
}
unsigned int oled_pow(uint8_t m,uint8_t n)
{
        unsigned int result=1;         
        while(n--)result*=m;   
        return result;
}
//显示2个数字
//x,y :起点坐标         
//len :数字的位数
//size:字体大小
//mode:模式        0,填充模式;1,叠加模式
//num:数值(0~4294967295);                           
void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2)
{                
        uint8_t t,temp;
        uint8_t enshow=0;                                                  
        for(t=0;t         {
                temp=(num/oled_pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
                                continue;
                        }else enshow=1;
                          
                }
                 OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
        }
}
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示                                 
//size:选择字体 16/12
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
{             
        unsigned char c=0,i=0;       
                c=chr-' ';//得到偏移后的值                       
                if(x>128-1){x=0;y=y+2;}
                if(Char_Size ==16)
                        {
                        OLED_Set_Pos(x,y);       
                        for(i=0;i<8;i++)
                        OLED_WR_DATA(F8X16[c*16+i]);
                        OLED_Set_Pos(x,y+1);
                        for(i=0;i<8;i++)
                        OLED_WR_DATA(F8X16[c*16+i+8]);
                        }
                        else {       
                                OLED_Set_Pos(x,y);
                                for(i=0;i<6;i++)
                                OLED_WR_DATA(F6x8[c]);
                               
                        }
}

//显示一个字符号串
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
        unsigned char j=0;
        while (chr[j]!='')
        {                OLED_ShowChar(x,y,chr[j],Char_Size);
                        x+=8;
                if(x>120){x=0;y+=2;}
                        j++;
        }
}
//显示汉字
//hzk 用取模软件得出的数组
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
{                                  
        uint8_t t,adder=0;
        OLED_Set_Pos(x,y);       
    for(t=0;t<16;t++)
                {
                                OLED_WR_DATA(Hzk[2*no][t]);
                                adder+=1;
     }       
                OLED_Set_Pos(x,y+1);       
    for(t=0;t<16;t++)
                        {       
                                OLED_WR_DATA(Hzk[2*no+1][t]);
                                adder+=1;
      }                                       
}
OLED的驱动文件字库oledfont.h代码如下所示:

#ifndef __OLED_H__
#define __OLED_H__


#include "stm32f1xx_hal.h"


///
#define   OLED_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOA_CLK_ENABLE()


#define   GPIOx_OLED_PORT               GPIOB
#define   OLED_SCK_PIN                  GPIO_PIN_6
#define   OLED_SCK_ON()                 HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SCK_PIN, GPIO_PIN_SET)
#define   OLED_SCK_OFF()                HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SCK_PIN, GPIO_PIN_RESET)
#define   OLED_SCK_TOGGLE()             HAL_GPIO_TogglePin(GPIOx_OLED_PORT, OLED_SCK_PIN)
#define   OLED_SDA_PIN                  GPIO_PIN_7
#define   OLED_SDA_ON()                 HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SDA_PIN, GPIO_PIN_SET)
#define   OLED_SDA_OFF()                HAL_GPIO_WritePin(GPIOx_OLED_PORT, OLED_SDA_PIN, GPIO_PIN_RESET)
#define   OLED_SDA_TOGGLE()             HAL_GPIO_TogglePin(GPIOx_OLED_PORT, OLED_SDA_PIN)
///


void WriteCmd(void);
void OLED_WR_CMD(uint8_t cmd);
void OLED_WR_DATA(uint8_t data);
void OLED_Init(void);
void OLED_Clear(void);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Set_Pos(uint8_t x, uint8_t y);
void OLED_On(void);
void OLED_ShowNum(uint8_t x,uint8_t y,unsigned int num,uint8_t len,uint8_t size2);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size);
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size);
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);




#endif
OLED的驱动文件字库oledfont.h代码如下所示:


#ifndef __OLEDFONT_H__
#define __OLEDFONT_H__

#include "stm32f1xx_hal.h"


//8*6 ASCII字符集点阵
const unsigned char F6x8[][6] =               
{
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
        0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
        0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
        0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
        0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
        0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
        0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
        0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
        0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
        0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
        0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
        0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
        0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
        0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
        0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
        0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
        0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
        0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
        0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
        0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
        0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
        0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
        0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
        0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
        0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
        0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
        0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
        0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
        0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
        0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
        0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
        0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
        0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
        0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
        0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
        0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
        0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
        0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
        0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
        0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
        0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
        0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
        0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
        0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
        0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
        0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
        0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
        0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
        0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
        0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
        0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
        0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
        0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
        0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
        0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
        0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
        0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
        0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
        0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
        0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
        0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
        0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
        0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
        0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
        0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
        0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
        0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
        0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
        0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
        0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
        0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
        0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
        0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
        0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
        0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
        0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
        0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
        0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
        0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
        0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
        0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
        0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
        0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
        0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
        0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
        0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
        0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
        0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
        0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
        0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
        0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
        0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};


//16*8 ASCII字符集点阵
const unsigned char F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//sp /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,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}  /92
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00};//|  /93


//部分汉字
const unsigned char Hzk[][32]=
{
        {0x00,0x00,0x04,0x14,0x64,0x04,0x0C,0xB4,0x02,0x02,0x42,0x33,0x02,0x00,0x00,0x00},
        {0x40,0x41,0x21,0x11,0x09,0x05,0x03,0xFF,0x03,0x05,0x09,0x11,0x21,0x41,0x40,0x00},/*"采",0*/
        /* (16 X 16 , 宋体 )*/


        {0x10,0x10,0xD0,0xFF,0x90,0x00,0x10,0x91,0x96,0x90,0xF0,0x90,0x94,0x93,0x10,0x00},
        {0x04,0x03,0x00,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x00},/*"样",1*/
        /* (16 X 16 , 宋体 )*/


        {0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00},
        {0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00},/*"值",2*/
        /* (16 X 16 , 宋体 )*/


        {0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00},
        {0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",3*/
        /* (16 X 16 , 宋体 )*/


        {0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00},
        {0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00},/*"压",4*/
        /* (16 X 16 , 宋体 )*/


        {0x00,0x80,0x60,0xF8,0x07,0x04,0xE4,0xA4,0xA4,0xBF,0xA4,0xA4,0xE4,0x04,0x00,0x00},
        {0x01,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00},/*"值",5*/
        /* (16 X 16 , 宋体 )*/


        {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
        {0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",6*/
/* (16 X 16 , 宋体 )*/
};


#endif


如何用这三个驱动代码呢?
首先在桌面上新建三个TXT文本,依次将这三个代码复制进去然后更改文件名为“oled.c”、“oled.h”、“oledfont.h”,然后将“oled.c”文件复制到STM32CubeMx生成的“OLED_CESHI”文件夹中的“Src文件夹”中,将“oled.h”、“oledfont.h”文件复制到STM32CubeMx生成的“OLED_CESHI”文件夹中的“Inc文件夹”中。
2.2、打开“OLED_CESHI”下"MDK-ARM"文件夹中的“OLED_CESHI.uvprojx”文件,在“Application/User”中添加“oled.c”,编译一遍(应该没有错误嘿嘿);
2.3、点击main.c,在头文件处添加“ #include “oled.h” ”,
其中,主函数代码如下所示:


int main(void)
{
  /* USER CODE BEGIN 1 *//*用户代码开始1 */


  /* USER CODE END 1 *//*用户代码结尾1 */
  


  /* MCU ConfigurationMCU配置--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. *//*重置所有外围设备,初始化Flash接口和Systick。 */
  HAL_Init();


  /* USER CODE BEGIN Init *//*用户代码开始初始化*/
  
  /* USER CODE END Init *//*用户代码结束初始化*/


  /* Configure the system clock *//*配置系统时钟*/
  SystemClock_Config();


  /* USER CODE BEGIN SysInit *//*用户代码开始SysInit */


  /* USER CODE END SysInit *//*用户代码结束SysInit */


  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  /* USER CODE BEGIN 2 *//*用户代码开始2 */
          OLED_Init();
        OLED_Clear();
        OLED_ShowString(0,0,"www.taxing.com",16);
        OLED_ShowCHinese(0,4,0);//
        OLED_ShowCHinese(16,4,1);//
        OLED_ShowCHinese(32,4,2);//
        OLED_ShowCHinese(48,4,6);//
        OLED_ShowCHinese(0,6,3);//
        OLED_ShowCHinese(16,6,4);//
        OLED_ShowCHinese(32,6,5);//
        OLED_ShowCHinese(48,6,6);//
  /* USER CODE END 2 *//*用户代码结尾2 */
  /* Infinite loop *//* 无限循环 */
  /* USER CODE BEGIN WHILE *//*用户代码开始时*/
  while (1)
  {
    /* USER CODE END WHILE *//*用户代码结束时*/
               
    /* USER CODE BEGIN 3 *//*用户代码开始3 */
  }
  /* USER CODE END 3 *//*用户代码结尾3 */
}


效果图如下所示:





题外话:本人也是初学者,第一次写博客主要为了记录自己的学习过程,同时也希望分享自己的经验,如果博客有啥问题欢迎大家批评指正。
举报

更多回帖

×
20
完善资料,
赚取积分