当前位置: 移动技术网 > 科技>人工智能>物联网 > 最全OLED驱动集合,IIC、三线SPI、四线SPI、8080驱动OLED

最全OLED驱动集合,IIC、三线SPI、四线SPI、8080驱动OLED

2020年07月29日  | 移动技术网科技  | 我要评论
## 阅读须知阅读本文需要有一定的STM32基础。## 前言我经常用的是IIC驱动,因为只有2个IO口,使用也方便。前段时间拿到SPI接口的OLED,于是就去捣鼓了三线SPI驱动。本驱动适用SSD1306,其他芯片的鄙人没有测试,仅供参考。SSD1306手册:https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf代码中的宏定义对应接线: OledCS :CS--->PB12 OledRS :DC-...

 

## 阅读须知

阅读本文需要有一定的STM32基础。

## 前言

我经常用的是IIC驱动,因为只有2个IO口,使用也方便。

前段时间拿到SPI接口的OLED,于是就去捣鼓了三线SPI驱动。

本驱动适用SSD1306,其他芯片的鄙人没有测试,仅供参考。

SSD1306手册:https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

代码中的宏定义对应接线:

    OledCS  :CS--->PB12
    OledRS  :DC--->PB14
    OledRst  :RES-->PB13,可以直接接单片机RST引脚
    OledSck :D0--->PB0
    OledSdin:D1--->PB1

 

//OLED模式设置
//0: SPI串行模式  (模块的BS1,BS2均接GND)
//1: 并行8080模式 (模块的BS1,BS2均接VCC)
#define  OLED_MODE             0
//SPI模式设置
//0: 4线串行模式 8 bit data send
//1: 3线串行模式 9 bit data send
#define  OLED_SPI_X         0

## 驱动原理

不管是IIC还是三线SPI、四线SPI,乃至8080并口驱动OLED,他们的本质都是一样的:写数据和写命令。也就是说当你已经有一份可以驱动的代码,你就可以很快的修改成其他接口协议来驱动OLED。

如果是7针的OLED,接线和改电阻参考(也可以直接看元器件的丝印):

https://wenku.baidu.com/view/42efcb877cd184254a353584.html

### IIC驱动OLED

没有什么好说的,直接上源码。

最后得出2个函数,写命令和写数据函数,然后拿着这2个函数去写OLED操作。如显示数字、字符、字符串、中文,

void WriteCmd(u8 command);
void WriteDat(u8 data);

只要其他接口实现这2个函数的功能,那么就可以在IIC接口的驱动延伸出其它接口的OLED驱动。开始,写底层驱动~~~。

为了不影响阅读,OLED显示代码我放在最后。

#define  OledSCL_H()        I2CSCLPort->BSRR = I2CSCLPin  
#define  OledSCL_L()        I2CSCLPort->BRR  = I2CSCLPin  
#define  OledSDA_H()        I2CSDAPort->BSRR = I2CSDAPin  
#define  OledSDA_L()        I2CSDAPort->BRR  = I2CSDAPin 

#define  OledSDA_Read       I2CSDAPort->IDR  & I2CSDAPin  

/**
**  设置SDA为输出
**/
void SDA_OUT(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= I2CSDAPin;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(I2CSDAPort, &GPIO_InitStructer);
}


/**
**  设置SDA为输入
**/
void SDA_IN(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= I2CSDAPin;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_Init(I2CSDAPort, &GPIO_InitStructer);
}

//开始信号
void IIC_Start(void)
{
    SDA_OUT();
    OledSDA_H();
    OledSCL_H();
    delay_us(2);
    OledSDA_L();
    delay_us(2);
    OledSCL_L();
    delay_us(2);
}

void IIC_Stop(void)
{
    OledSCL_H();
    OledSDA_L();
    delay_us(2);
    OledSDA_H();
    delay_us(2);
}


/*
*   返回1--应答出错
*   放回0--应答正确
*/
u8 IIC_Wait_Ask(void)
{
    int count=0;
    SDA_IN();
    OledSCL_H();
    delay_us(2);
    while(OledSDA_Read)
    {
        count++;
        if(count>250)
        {
            IIC_Stop();
            return 1;
        }   
    }
    OledSCL_L();
    delay_us(2);
    return 0;
}

//写一个字节
void IIC_WriteByte(u8 data)
{
    u8 i;
    SDA_OUT();
    for(i=0;i<8;i++)
    {
        OledSCL_L();
        delay_us(2);
        if(data & 0x80)     //MSB,从高位开始一位一位传输
            OledSDA_H();
        else
            OledSDA_L();
        OledSCL_H();
        delay_us(2);
        OledSCL_L();
        data<<=1;

    }
}

u8 IIC_ReadByte(void)
{
    u8 data,i;
    OledSDA_H();
    delay_us(3);
    for(i=0;i<8;i++)
    {
        data<<=1;
        OledSCL_L();
        delay_us(1);
        OledSCL_H();
        delay_us(1);
        if(GPIO_ReadInputDataBit(I2CSDAPort, I2CSDAPin))
            data=data | 0x01;
        else 
            data=data & 0xFE;

    }
    OledSCL_L();
    delay_us(3);
    return data;

}

void WriteCmd(u8 command)
{
    IIC_Start();
    IIC_WriteByte(0x78);//OLED地址
    IIC_Wait_Ask();
    IIC_WriteByte(0x00);//寄存器地址
    IIC_Wait_Ask();
    IIC_WriteByte(command);
    IIC_Wait_Ask();
    IIC_Stop();
}


void WriteDat(u8 data)
{
    IIC_Start();
    IIC_WriteByte(0x78);//OLED地址
    IIC_Wait_Ask();
    IIC_WriteByte(0x40);//寄存器地址
    IIC_Wait_Ask();
    IIC_WriteByte(data);
    IIC_Wait_Ask();
    IIC_Stop();
}

### 四线SPI驱动OLED

四线SPI使用CS、D0、D1、DC。分别对应SPI的CS、Sck、Sdin、命令数据选择。

注:RES是要使用的。

官方说明:

第一段是说使用到什么线的,每一个IO的功能。

第二段是告诉你怎么编程的。

### 对应的编程,这里只考虑写,不考虑读取。以下为写8bit。

void OLED_WR_Byte(u8 dat,u8 cmd)
{
    char i;
    OledCs_L();//片选
    if(cmd)    //判断是写数据还是写命令
        OledRS_H();
    else
        OledRS_L();
    for(i=0;i<8;i++)//8bit
    {			  
        OledSck_L();
        if(dat&0x80)
            OledSdin_H();
        else 
            OledSdin_L();
        OledSck_H();
        dat<<=1;   
    }    
    OledCs_H();
    OledRS_H();
     
}

### 三线SPI驱动OLED

三线SPI使用CS、D0、D1。分别对应SPI的CS、Sck、Sdin。

注:RES是要使用的。

官方的说明:

第一段是说使用到什么线的,每一个IO的功能。

第二段是告诉你怎么编程的。这里说一下三线SPI的原理:其实就是一次发9bit数据,把命令/数据使用Sdin线的1bit,(1:写数据,0:写命令)而在四线SPI中,根据D/C线的电平判断写命令还是写数据。

### 对应的编程,这里只考虑写,不考虑读取。

那么我们就再四线SPI的基础上加上几行(配合宏定义):

void OLED_WR_Byte(u8 dat,u8 cmd)
{
    char i;
    OledCs_L();    //片选
#if OLED_SPI_X == 1//如果定义了三线SPI
    OledSck_L();
    if(cmd)        //判断是写数据还是写命令
        OledSdin_H();
    else 
        OledSdin_L();
    OledSck_H();
#else               //四线SPI
    if(cmd)        //判断是写数据还是写命令
        OledRS_H();
    else
        OledRS_L();
#endif
    for(i=0;i<8;i++)//8bit
    {			  
        OledSck_L();
        if(dat&0x80)
            OledSdin_H();
        else 
            OledSdin_L();
        OledSck_H();
        dat<<=1;   
    }    
    OledCs_H();
#if OLED_SPI_X == 0//四线SPI
    OledRS_H();
#endif
     
}

### 8080并口驱动OLED

并口比较简单,和以前使用的LCD12864差不多,鄙人没有条件测试。不做任何保证,仅供参考。

void OLED_WR_Byte(u8 dat,u8 cmd)
{
    DATAOUT(dat);    //先输出数据
    if(cmd)          //判断是写数据还是写命令
        OledRS_H();
    else
        OledRS_L();
    OledCs_L();	   
    OledWR_L(); 
    OledWR_H();    
    OledCs_H();	  
    OledRS_H();	 
} 

### 写数据和写命令函数

上面的所有驱动,都要实现OLED_WR_Byte函数的功能,然后使用OLED_WR_Byte封装出写命令和写数据的函数和IIC驱动一致。这样就可以使用原本IIC驱动的操作函数。封装如下:

void WriteCmd(u8 command)
{
    OLED_WR_Byte(command,OLED_CMD);
}
void WriteDat(u8 data)
{
    OLED_WR_Byte(data,OLED_DATA);
}

## 效果

## 代码

### 完整的项目工程

可以查看鄙人上传的资源,点击进去传送门

### 部分摘要

config.h文件:

#ifndef _config_H
#define _config_H
#include "stm32f10x.h"
#include "stm32f10x_it.h"

#define SYS_CLOCK_FREQ_HZ   72000000
//#define OLEDIIC
/********************************
	定义
	OledCS  :CS--->PB12
	OledRS  : DC--->PB14
	OledRst :RES-->PB13,可以直接接单片机RST引脚
	OledSck : D0--->PB0
	OledSdin: D1--->PB1
	

******************************************/
#ifdef  OLEDIIC  
#define  I2CSCLPort         GPIOC
#define  I2CSDAPort         GPIOC
#define  I2CSCLPin          GPIO_Pin_14
#define  I2CSDAPin          GPIO_Pin_15
#else

//OLED模式设置
//0: SPI串行模式  (模块的BS1,BS2均接GND)
//1: 并行8080模式 (模块的BS1,BS2均接VCC)
#define  OLED_MODE 	        0
//SPI模式设置
//0: 4线串行模式 8 bit data send
//1: 3线串行模式 9 bit data send
#define  OLED_SPI_X         1

#define  OledCsPort         GPIOB
#define  OledCsPin          GPIO_Pin_12

#define  OledRstPort        GPIOB
#define  OledRstPin         GPIO_Pin_13

#define  OledRSPort         GPIOB
#define  OledRSPin          GPIO_Pin_14

#define  OledCs_H()         OledCsPort->BSRR = OledCsPin
#define  OledCs_L()         OledCsPort->BRR  = OledCsPin  

#define  OledRst_H()        OledRstPort->BSRR = OledRstPin
#define  OledRst_L()        OledRstPort->BRR  = OledRstPin  

#if OLED_MODE ==1
#define  OledWRPort         GPIOB
#define  OledWRPin          GPIO_Pin_15

#define  OledRDPort         GPIOB
#define  OledRDPin          GPIO_Pin_11

#define  OledWR_H()         OledWRPort->BSRR = OledWRPin
#define  OledWR_L()         OledWRPort->BRR  = OledWRPin

#define  OledRD_H()         OledRDPort->BSRR = OledRDPin
#define  OledRD_L()         OledRDPort->BRR  = OledRDPin

#define  DATAOUT(x)         GPIO_Write(GPIOA,x);//输出  //PA0~7,作为数据线

#else
#define  OledSckPort        GPIOB
#define  OledSckPin         GPIO_Pin_0

#define  OledSdinPort       GPIOB
#define  OledSdinPin        GPIO_Pin_1

#define  OledSck_H()        OledSckPort->BSRR = OledSckPin
#define  OledSck_L()        OledSckPort->BRR  = OledSckPin

#define  OledSdin_H()       OledSdinPort->BSRR = OledSdinPin
#define  OledSdin_L()       OledSdinPort->BRR  = OledSdinPin
#endif

#define  OledRS_H()         OledRSPort->BSRR = OledRSPin
#define  OledRS_L()         OledRSPort->BRR  = OledRSPin

#endif

#define  LedPort            GPIOC
#define  LedPIN             GPIO_Pin_13

#define  LedState(State)    State?GPIO_SetBits(LedPort,LedPIN):GPIO_ResetBits(LedPort,LedPIN);
#define  LedXor(PIN)        LedPort->ODR ^= PIN

#define  OLED_ADDRESS       0x78    //IIC模式下的地址,需要结合硬件
#define  OLED_CMD           0x00	//写命令
#define  OLED_DATA          0x01	//写数据

void RCC_Configuration(void);
void delay_ms(u16 time);
void delay_us(u16 time);

void OLED_ON(void);
void OLED_CLS(void);
void OLED_OFF(void);
void OLED_Init(void);
void WriteDat(u8 I2C_Data);
void OLED_SetPos(u8 x, u8 y);
void OLED_Fill(u8 fill_Data);
void I2C_Configuration(void);
void WriteCmd(u8 I2C_Command);
void OLED_ShowCN(u8 x, u8 y, u8 N);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void I2C_WriteByte(uint8_t addr,uint8_t data);
void OLED_ShowStr(u8 x, u8 y, u8 ch[], u8 TextSize);
void OLED_DrawBMP(u8 x0,u8 y0,u8 x1,u8 y1,u8 BMP[]);
void OLED_ShowString(u8 x,u8 y,char *chr,u8 Char_Size);

#endif


OLED.c

#include "config.h" 
#include "codetab.h"
//OLED的显存
//存放格式如下.
//[0]0 1 2 3 ... 127	
//[1]0 1 2 3 ... 127	
//[2]0 1 2 3 ... 127	
//[3]0 1 2 3 ... 127	
//[4]0 1 2 3 ... 127	
//[5]0 1 2 3 ... 127	
//[6]0 1 2 3 ... 127	
//[7]0 1 2 3 ... 127 
#ifdef OLEDIIC 

#define  OledSCL_H()        I2CSCLPort->BSRR = I2CSCLPin  
#define  OledSCL_L()        I2CSCLPort->BRR  = I2CSCLPin  
#define  OledSDA_H()        I2CSDAPort->BSRR = I2CSDAPin  
#define  OledSDA_L()        I2CSDAPort->BRR  = I2CSDAPin 

#define  OledSDA_Read       I2CSDAPort->IDR  & I2CSDAPin  

/**
**  设置SDA为输出
**/
void SDA_OUT(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= I2CSDAPin;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(I2CSDAPort, &GPIO_InitStructer);
}


/**
**  设置SDA为输入
**/
void SDA_IN(void)
{
    GPIO_InitTypeDef GPIO_InitStructer;
    GPIO_InitStructer.GPIO_Pin= I2CSDAPin;
    GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_Init(I2CSDAPort, &GPIO_InitStructer);
}

//开始信号
void IIC_Start(void)
{
    SDA_OUT();
    OledSDA_H();
    OledSCL_H();
    delay_us(2);
    OledSDA_L();
    delay_us(2);
    OledSCL_L();
    delay_us(2);
}

void IIC_Stop(void)
{
    OledSCL_H();
    OledSDA_L();
    delay_us(2);
    OledSDA_H();
    delay_us(2);
}


/*
*   返回1--应答出错
*   放回0--应答正确
*/
u8 IIC_Wait_Ask(void)
{
    int count=0;
    SDA_IN();
    OledSCL_H();
    delay_us(2);
    while(OledSDA_Read)
    {
        count++;
        if(count>250)
        {
            IIC_Stop();
            return 1;
        }   
    }
    OledSCL_L();
    delay_us(2);
    return 0;
}

//写一个字节
void IIC_WriteByte(u8 data)
{
    u8 i;
    SDA_OUT();
    for(i=0;i<8;i++)
    {
        OledSCL_L();
        delay_us(2);
        if(data & 0x80)     //MSB,从高位开始一位一位传输
            OledSDA_H();
        else
            OledSDA_L();
        OledSCL_H();
        delay_us(2);
        OledSCL_L();
        data<<=1;

    }
}

u8 IIC_ReadByte(void)
{
    u8 data,i;
    OledSDA_H();
    delay_us(3);
    for(i=0;i<8;i++)
    {
        data<<=1;
        OledSCL_L();
        delay_us(1);
        OledSCL_H();
        delay_us(1);
        if(GPIO_ReadInputDataBit(I2CSDAPort, I2CSDAPin))
            data=data | 0x01;
        else 
            data=data & 0xFE;

    }
    OledSCL_L();
    delay_us(3);
    return data;

}
 
void WriteCmd(u8 command)
{
    IIC_Start();
    IIC_WriteByte(0x78);//OLED地址
    IIC_Wait_Ask();
    IIC_WriteByte(0x00);//寄存器地址
    IIC_Wait_Ask();
    IIC_WriteByte(command);
    IIC_Wait_Ask();
    IIC_Stop();
}

void WriteDat(u8 data)
{
    IIC_Start();
    IIC_WriteByte(0x78);//OLED地址
    IIC_Wait_Ask();
    IIC_WriteByte(0x40);//寄存器地址
    IIC_Wait_Ask();
    IIC_WriteByte(data);
    IIC_Wait_Ask();
    IIC_Stop();
}

#else
#if OLED_MODE==1	//8080并口 
/*****************************************************************
    向SSD1306写入一个字节
    dat:要写入的数据/命令
    cmd:数据/命令标志 0,表示命令;1,表示数据
*****************************************************************/
void OLED_WR_Byte(u8 dat,u8 cmd)
{
	DATAOUT(dat);	    
    if(cmd)
        OledRS_H();
    else
        OledRS_L();
	OledCs_L();	   
	OledWR_L(); 
    OledWR_H();    
	OledCs_H();	  
	OledRS_H();	 
} 	    	    
#else
void OLED_WR_Byte(u8 dat,u8 cmd)
{
    char i;
    OledCs_L();
#if OLED_SPI_X == 1
    OledSck_L();
    if(cmd)OledSdin_H();
    else OledSdin_L();
    OledSck_H();
#else
    if(cmd)
        OledRS_H();
    else
        OledRS_L();
#endif
	for(i=0;i<8;i++)
	{			  
		OledSck_L();
		if(dat&0x80)OledSdin_H();
		else OledSdin_L();
		OledSck_H();
		dat<<=1;   
	}    
    OledCs_H();
#if OLED_SPI_X == 0
    OledRS_H();
#endif
     
}
#endif
void WriteCmd(u8 command)
{
	OLED_WR_Byte(command,OLED_CMD);
}
void WriteDat(u8 data)
{
	OLED_WR_Byte(data,OLED_DATA);
}
#endif

// 公共部分

/*****************************************************************
    将OLED从休眠中唤醒
*****************************************************************/
void OLED_ON(void)
{
    WriteCmd(0X8D);  //设置电荷泵
    WriteCmd(0X14);  //开启电荷泵
    WriteCmd(0XAF);  //OLED唤醒
}

/*****************************************************************
  设置光标
  x,光标x位置 0-127
  y,光标y位置 0-7
*****************************************************************/
void OLED_SetPos(u8 x, u8 y)
{ 
    WriteCmd(0xb0+y);
    WriteCmd(((x&0xf0)>>4)|0x10);
    WriteCmd((x&0x0f)|0x01);
}

/*****************************************************************
  填充整个屏幕
  fill_Data:要填充的数据
*****************************************************************/
void OLED_Fill(u8 fill_Data)
{
    u8 m,n;
    for(m=0;m<8;m++)
    {
        WriteCmd(0xb0+m);       //page0-page1
        WriteCmd(0x00);     //low column start address
        WriteCmd(0x10);     //high column start address
        for(n=0;n<128;n++)
        {
            WriteDat(fill_Data);
        }
    }
}

void OLED_CLS(void)//清屏
{
	u8 i,n;		    
	for(i=0;i<8;i++)  
	{  
		WriteCmd (0xb0+i);
		WriteCmd (0x00);
		WriteCmd (0x10);   
		for(n=0;n<128;n++)
        WriteDat(0); 
	}
}

/*****************************************************************
  显示codetab.h中的ASCII字符,有6*8和8*16可选择
  x,y : 起始点坐标(x:0~127, y:0~7);
                     ch[] :- 要显示的字符串; 
                     TextSize : 字符大小(1:6*8 ; 2:8*16)
*****************************************************************/
void OLED_ShowStr(u8 x, u8 y, u8 ch[], u8 TextSize)
{
    u8 c = 0,i = 0,j = 0;
    switch(TextSize)
    {
        case 1:
        {
            while(ch[j] != '\0')
            {
                c = ch[j] - 32;
                if(x > 126)
                {
                    x = 0;
                    y++;
                }
                OLED_SetPos(x,y);
                for(i=0;i<6;i++)
                    WriteDat(F6x8[c][i]);
                x += 6;
                j++;
            }
        }break;
        case 2:
        {
            while(ch[j] != '\0')
            {
                c = ch[j] - 32;
                if(x > 120)
                {
                    x = 0;
                    y++;
                }
                OLED_SetPos(x,y);
                for(i=0;i<8;i++)
                    WriteDat(F8X16[c*16+i]);
                OLED_SetPos(x,y+1);
                for(i=0;i<8;i++)
                    WriteDat(F8X16[c*16+i+8]);
                x += 8;
                j++;
            }
        }break;
    }
}

void OLED_ShowChar(u8 x,u8 y,char chr,u8 Char_Size)
{      	
	u8 c=0,i=0;	
	c=chr-' ';		
	if(x>128-1){x=0;y=y+2;}
	if(Char_Size ==16)
	{
		OLED_SetPos(x,y);	
		for(i=0;i<8;i++)
		WriteDat(F8X16[c*16+i]);
		OLED_SetPos(x,y+1);
		for(i=0;i<8;i++)
		WriteDat(F8X16[c*16+i+8]);
	}
	else 
	{	
		OLED_SetPos(x,y);
		for(i=0;i<6;i++)
		{
			WriteDat(F6x8[c][i]);
		}
	}
}
/*****************************************************************
    显示字符串
    示例:OLED_ShowString(0,0,"4Wire SPI Runing",16);
*****************************************************************/
void OLED_ShowString(u8 x,u8 y,char *chr,u8 Char_Size)
{
	u8 j=0;
	while (chr[j]!='\0')
	{
		OLED_ShowChar(x,y,chr[j],Char_Size);
		x+=8;
		if(x>120){x=0;y+=2;}
		{
			j++;
		}
	}
}
/*****************************************************************
    显示中文
    no  :中文数组Hzk[] 编号
    示例:OLED_ShowCHinese(32,4,2);
*****************************************************************/
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{      			    
	u8 t,adder=0;
	OLED_SetPos(x,y);	
    for(t=0;t<16;t++)
    {
        WriteDat(Hzk[2*no][t]);
        adder+=1;
     }	
    OLED_SetPos(x,y+1);	
    for(t=0;t<16;t++)
    {	
        WriteDat(Hzk[2*no+1][t]);
        adder+=1;
    }					
}
/*****************************************************************
    OLED初始化
*****************************************************************/
void OLED_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    delay_ms(100);
    
#ifdef OLEDIIC 
    
    GPIO_InitStructure.GPIO_Pin=I2CSCLPin | I2CSDAPin;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

    GPIO_Init(I2CSCLPort, &GPIO_InitStructure);
#else    
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = OledCsPin;
 	GPIO_Init(OledCsPort, &GPIO_InitStructure);
    GPIO_SetBits(OledCsPort,OledCsPin);
    
    GPIO_InitStructure.GPIO_Pin = OledRstPin;
 	GPIO_Init(OledRstPort, &GPIO_InitStructure);
    GPIO_SetBits(OledRstPort,OledRstPin);
    
    GPIO_InitStructure.GPIO_Pin =OledRSPin ;
 	GPIO_Init(OledRSPort, &GPIO_InitStructure);
    GPIO_SetBits(OledRSPort,OledRSPin);
    
#if OLED_MODE==1
 
 	GPIO_InitStructure.GPIO_Pin =0xFF; //PA0~7 OUT推挽输出
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOA,0xFF); //PA0~7输出高
	
	GPIO_InitStructure.GPIO_Pin = OledWRPin;
 	GPIO_Init(OledWRPort, &GPIO_InitStructure);
    GPIO_SetBits(OledWRPort,OledWRPin);

    GPIO_InitStructure.GPIO_Pin = OledRDPin;
 	GPIO_Init(OledRDPort, &GPIO_InitStructure);
    GPIO_SetBits(OledRDPort,OledRDPin);

#else
 	GPIO_InitStructure.GPIO_Pin = OledSckPin;
 	GPIO_Init(OledSckPort, &GPIO_InitStructure);
 	GPIO_SetBits(OledSckPort,OledSckPin);

 	GPIO_InitStructure.GPIO_Pin = OledSdinPin;
 	GPIO_Init(OledSdinPort, &GPIO_InitStructure);
 	GPIO_SetBits(OledSdinPort,OledSdinPin);

#endif
  							  
	OledCs_H();
    OledRS_H();
	OledRst_L();
	delay_ms(100);
	OledRst_H();
#endif    
    
    WriteCmd(0xAE); //display off
    WriteCmd(0x20); //Set Memory Addressing Mode    
    WriteCmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
    WriteCmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7
    WriteCmd(0xc8); //Set COM Output Scan Direction
    WriteCmd(0x00); //---set low column address
    WriteCmd(0x10); //---set high column address
    WriteCmd(0x40); //--set start line address
    WriteCmd(0x81); //--set contrast control register
    WriteCmd(0xdf); //亮度调节 0x00~0xff
    WriteCmd(0xa1); //--set segment re-map 0 to 127
    WriteCmd(0xa6); //--set normal display
    WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
    WriteCmd(0x3F); //
    WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
    WriteCmd(0xd3); //-set display offset
    WriteCmd(0x00); //-not offset
    WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
    WriteCmd(0xf0); //--set divide ratio
    WriteCmd(0xd9); //--set pre-charge period
    WriteCmd(0x22); //
    WriteCmd(0xda); //--set com pins hardware configuration
    WriteCmd(0x12);
    WriteCmd(0xdb); //--set vcomh
    WriteCmd(0x20); //0x20,0.77xVcc
    WriteCmd(0x8d); //--set DC-DC enable
    WriteCmd(0x14); //
    WriteCmd(0xaf); //--turn on oled panel
    OLED_CLS();
}

字库文件

codetab.h

#ifndef __CODETAB_H
#define	__CODETAB_H
#include "config.h"
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
};
/****************************************8*16µÄµãÕó************************************/
const unsigned char F8X16[]=	  
{
  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
};
unsigned char Hzk[][32]={

{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},/*"µç",0*/
/* (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},/*"ѹ",1*/
/* (16 X 16 , 压 )*/

{0x10,0x10,0xD0,0xFF,0x90,0x14,0xE4,0xAF,0xA4,0xA4,0xA4,0xAF,0xE4,0x04,0x00,0x00},
{0x04,0x03,0x00,0xFF,0x00,0x89,0x4B,0x2A,0x1A,0x0E,0x1A,0x2A,0x4B,0x88,0x80,0x00},/*"Ä£",2*/
/* (16 X 16 , 模 )*/

{0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00},
{0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00},/*"ʽ",3*/
/* (16 X 16 , 式 )*/
};

#endif

main.c

#ifdef LedPort
void LedInit()
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = LedPIN;              
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(LedPort, &GPIO_InitStructure);
    GPIO_ResetBits(LedPort,LedPIN);   
}
#endif

void System_Init()
{
    RCC_Configuration();
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        // GPIOA clock 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);        // GPIOB clock 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);        // GPIOC clock 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);        // AFIO  clock 
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE );   // JTAG Disable

#ifdef LedPort    
    LedInit();	        // Led Init 
#endif
#ifdef OLEDIIC     
    OLED_Init();
    OLED_ShowString(0,1,"oled is OK",16);
    OLED_CLS();
    OLED_ShowString(0,0," IIC bus Runing",16);
#else
#if OLED_SPI_X == 1
    OLED_Init();
    OLED_ShowString(0,1,"oled is OK",16);
    OLED_CLS();
    OLED_ShowString(0,0,"3Wire SPI Runing",16);
#else
    OLED_Init();
    OLED_ShowString(0,1,"oled is OK",16);
    OLED_CLS();
    OLED_ShowString(0,0,"4Wire SPI Runing",16);
#endif
#endif
    
}
int main(void)
{
    System_Init();
    while(1)
    {
        LedXor(LedPIN);
        OLED_ShowCHinese( 0,4,0);
        OLED_ShowCHinese(16,4,1);
        OLED_ShowCHinese(32,4,2);
        OLED_ShowCHinese(48,4,3);
        while(1);
    }
	
}

 

 

 

本文地址:https://blog.csdn.net/Corner_L/article/details/107645283

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网