STM32实现IIC接口驱动OLED显示屏

一、IIC协议的简单介绍

  • 在物理层上:IIC协议就是通过一根数据线(SDA)与一根时钟线(SCL)将一个主机与一个或多个从机相连接,并且为了不同设备之间进行访问,每一个设备都有不同的地址。

  • 在协议层上:IIC通信一般都遵循一个过程:发送起始信号->发送通信地址->发送读写命令->数据传输->发送应答信号。(起始信号一般是由主机产生,而应答信号主机与 从机都可以产生。发送应答信号相当于告诉对方我现在有时间,可以与你通信;而非应答信号,反之。)

  • 二、OLED显示屏的简单介绍

  • 0.96 寸OLED有黄蓝,白,蓝三种颜色可选;其中黄蓝是屏上1/4部分为黄光,下3/4为蓝;白光则为纯白,也就是黑底白字;蓝色则为纯蓝,也就是黑底蓝字。
  • 多种接口方式;0D裸屏总共种接口包括: 6800、8080两种并行接口方式、3线或4线的串行SPI接口方式、IIC接口方式(只需要2根线就可以控制0ED了!),这五种接口是通过屏上的BSO~BS2来配置的。
  • 开发了两种接口的Demo板,接口分别为六针的 SPT/ITC-兼容模块,四针的IIC模块。
  • 三、使用OLED显示屏

    1、器件准备

  • STM32F103ZET6开发板
  • STM32F103C8T6开发板
  • IIC接口的OLED显示屏一个
  • 杜邦线若干
  • 2、目标显示

  • 1.在显示屏中显示汉字;
  • 2.在显示屏中字母与数字;
  • 3.在显示屏中显示动态时间;
  • 3、接线说明

    usb转tl C8T6 显示屏
    GND GND
    VCC VCC
    RX PA9
    TX PA10
    3.3V VCC
    GND GND
    PB8 SCL
    PB9 SDA

    4、核心代码

    (1)、主函数

    int main(void)
    {
    	char ch[] = "23.00";
    	int temp = 23.0;
    	int m = 0,s = 0,h = 0;
    	OLED_Init();
    	OLED_Fill(0xFF);//全屏点亮
    	delay_ms(2000);
    	OLED_Fill(0x00);//全屏灭
    	delay_ms(2000);
    	
    	while(1){
    		
    /**************************** 温度显示测试 ********************************************/
    		sprintf(ch,"%d",temp);
    		OLED_ShowCN(16*0,0,0);//温
    		OLED_ShowCN(16*1,0,1);//度
    		OLED_ShowStr(16*2,0,"Out:",2);//测试8*16字符
    		OLED_ShowStr(16*4,0,ch,2);//测试8*16字符
    		
    /****************************  汉字显示测试 ******************************************/
    		OLED_ShowCN(16*0,2,2);//湿
    		OLED_ShowCN(16*1,2,3);//度
    		OLED_ShowCN(16*2,2,6);//强
    		OLED_ShowCN(16*3,2,7);//度
    		OLED_ShowCN(16*4,2,10);//浓
    		OLED_ShowCN(16*5,2,11);//度
    		
    /***************************** 显示屏的动态显示 *************************************/
    		sprintf(ch,"Time: %d:%d:%d",h,m,s);
    		OLED_ShowStr(16*0,4,ch,2);
    		if(++s==60){
    			s = 0;
    			if(++m==60){
    				m = 0;
    				if(++h == 24){
    					h = 0;
    				}
    			}
    		}
    		delay_ms(1000);
    	}
    }
    

    (2)、显示屏驱动oled_iic.c文件

    #include "oled_iic.h"
    #include "systick.h"
    #include "codetab.h"
    
    void I2C_Configuration(void)
    {
    	I2C_InitTypeDef  I2C_InitStructure;
    	GPIO_InitTypeDef  GPIO_InitStructure; 
    
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    	
    	//重映射至PB8 PB9
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    	GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
    
    	/*STM32F103C8T6芯片的硬件I2C: PB8 -- SCL; PB9 -- SDA */
    	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;//I2C必须开漏输出
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    	I2C_DeInit(I2C1);//使用I2C1
    	I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    	I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    	I2C_InitStructure.I2C_OwnAddress1 = 0x30;//主机的I2C地址,随便写的
    	I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    	I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    	I2C_InitStructure.I2C_ClockSpeed = 400000;//400K
    	I2C_Cmd(I2C1, ENABLE);
    	I2C_Init(I2C1, &I2C_InitStructure);
    }
    
    void I2C_WriteByte(uint8_t addr,uint8_t data)
    {
      while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
    	
    	I2C_GenerateSTART(I2C1, ENABLE);//开启I2C1
    	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/
    
    	I2C_Send7bitAddress(I2C1, OLED_ADDRESS, I2C_Direction_Transmitter);//器件地址 -- 默认0x78
    	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
    
    	I2C_SendData(I2C1, addr);//寄存器地址
    	while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    
    	I2C_SendData(I2C1, data);//发送数据
    	while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    	
    	I2C_GenerateSTOP(I2C1, ENABLE);//关闭I2C1总线
    }
    //写命令
    void WriteCmd(unsigned char I2C_Command)
    {
    	I2C_WriteByte(0x00, I2C_Command);
    }
    //写数据
    void WriteDat(unsigned char I2C_Data)
    {
    	I2C_WriteByte(0x40, I2C_Data);
    }
    
    void OLED_Init(void)
    {
    	I2C_Configuration();
    	
    	delay_ms(100); //这里的延时很重要
    	
    	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(0xff); //亮度调节 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
    }
    
    void OLED_SetPos(unsigned char x, unsigned char y) //设置起始点坐标
    { 
    	WriteCmd(0xb0+y);
    	WriteCmd(((x&0xf0)>>4)|0x10);
    	WriteCmd((x&0x0f)|0x01);
    }
    
    void OLED_Fill(unsigned char fill_Data)//全屏填充
    {
    	unsigned char 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)//清屏
    {
    	OLED_Fill(0x00);
    }
    
    //--------------------------------------------------------------
    // Prototype      : void OLED_ON(void)
    // Calls          : 
    // Parameters     : none
    // Description    : 将OLED从休眠中唤醒
    //--------------------------------------------------------------
    void OLED_ON(void)
    {
    	WriteCmd(0X8D);  //设置电荷泵
    	WriteCmd(0X14);  //开启电荷泵
    	WriteCmd(0XAF);  //OLED唤醒
    }
    
    //--------------------------------------------------------------
    // Prototype      : void OLED_OFF(void)
    // Calls          : 
    // Parameters     : none
    // Description    : 让OLED休眠 -- 休眠模式下,OLED功耗不到10uA
    //--------------------------------------------------------------
    void OLED_OFF(void)
    {
    	WriteCmd(0X8D);  //设置电荷泵
    	WriteCmd(0X10);  //关闭电荷泵
    	WriteCmd(0XAE);  //OLED休眠
    }
    
    //--------------------------------------------------------------
    // Prototype      : void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
    // Calls          : 
    // Parameters     : x,y -- 起始点坐标(x:0~16*8, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
    // Description    : 显示codetab.h中的ASCII字符,有6*8和8*16可选择
    //--------------------------------------------------------------
    void OLED_ShowStr(unsigned char x, unsigned char y,  char ch[], unsigned char TextSize)
    {
    	unsigned char 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;
    	}
    }
    
    //--------------------------------------------------------------
    // Prototype      : void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
    // Calls          : 
    // Parameters     : x,y -- 起始点坐标(x:0~16*8, y:0~7); N:汉字在codetab.h中的索引
    // Description    : 显示codetab.h中的汉字,16*16点阵
    //--------------------------------------------------------------
    void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
    {
    	unsigned char wm=0;
    	unsigned int  adder=32*N;
    	OLED_SetPos(x , y);
    	for(wm = 0;wm < 16;wm++)
    	{
    		WriteDat(F16x16[adder]);
    		adder += 1;
    	}
    	OLED_SetPos(x,y + 1);
    	for(wm = 0;wm < 16;wm++)
    	{
    		WriteDat(F16x16[adder]);
    		adder += 1;
    	}
    }
    
    //--------------------------------------------------------------
    // Prototype      : void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
    // Calls          : 
    // Parameters     : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
    // Description    : 显示BMP位图
    //--------------------------------------------------------------
    void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
    {
    	unsigned int j=0;
    	unsigned char x,y;
    
      if(y1%8==0)
    		y = y1/8;
      else
    		y = y1/8 + 1;
    	for(y=y0;y<y1;y++)
    	{
    		OLED_SetPos(x0,y);
        for(x=x0;x<x1;x++)
    		{
    			WriteDat(BMP[j++]);
    		}
    	}
    }
    
    

    (3)、显示屏驱动oled_iic.h文件

    #ifndef __OLED_IIC_H
    #define	__OLED_IIC_H
    
    #include "stm32f10x.h"
    
    #define OLED_ADDRESS	0x78 //通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78
    
    extern void I2C_Configuration(void);
    extern void I2C_WriteByte(uint8_t addr,uint8_t data);
    extern void WriteCmd(unsigned char I2C_Command);
    extern void WriteDat(unsigned char I2C_Data);
    extern void OLED_Init(void);
    extern void OLED_SetPos(unsigned char x, unsigned char y);
    extern void OLED_Fill(unsigned char fill_Data);
    extern void OLED_CLS(void);
    extern void OLED_ON(void);
    extern void OLED_OFF(void);
    //--------------------------------------------------------------
    // Prototype      : void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
    // Calls          : 
    // Parameters     : x,y -- 起始点坐标(x:0~16*8, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
    // Description    : 显示codetab.h中的ASCII字符,有6*8和8*16可选择
    //--------------------------------------------------------------
    extern void OLED_ShowStr(unsigned char x, unsigned char y,  char ch[], unsigned char TextSize);
    //--------------------------------------------------------------
    // Prototype      : void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
    // Calls          : 
    // Parameters     : x,y -- 起始点坐标(x:0~16*8, y:0~7); N:汉字在codetab.h中的索引
    // Description    : 显示codetab.h中的汉字,16*16点阵
    //--------------------------------------------------------------
    extern void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N);
    extern void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
    
    #endif
    
    

    四、总结

  • 1.在OLED显示屏上显示数据需要注意:由于OLED显示屏它由一格一格小的框框组成的,当我们需要显示不同数据时,它有可能所占的空间大小是不一样的,最好间隔显示数据。
  • 2.在OLED显示屏上显示数据时,C8T6的源码跟ZET6的源码是可以是一样的,两者的区别在启动文件不一样和预编译指令不一样,C8T6用的是startup_stm32f10x_md.s,而ZET6用的startup_stm32f10x_hd.s,在两块开发板上显示时改改预编译指令与启动文件就好。(实际中,小编发现改不改问题不大,都能够显示。)
  • 五、附:

    字符库codetab.h文件

    /***************************16*16的点阵字体取模方式:共阴——列行式——逆向输出*********/
    unsigned char F16x16[] =
    	{
    		 //温(0) 度(1) 湿(2) 度(3) 光(4) 照(5) 强(6) 度(7) 烟(8) 雾(9) 浓(10) 度(11)
    
    	0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
    	0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,//温0
    
    	0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
    	0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,//度1
    
    	0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
    	0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00,//湿2
    
    	0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
    	0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,//度3
    
    	0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x40,0x40,0x00,
    	0x80,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,//光4
    
    	0x00,0xFE,0x42,0x42,0x42,0xFE,0x00,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00,
    	0x80,0x6F,0x08,0x08,0x28,0xCF,0x00,0x00,0x2F,0xC8,0x08,0x08,0x28,0xCF,0x00,0x00,//照5
    
    	0x02,0xE2,0x22,0x22,0x3E,0x00,0x80,0x9E,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00,
    	0x00,0x43,0x82,0x42,0x3E,0x40,0x47,0x44,0x44,0x44,0x7F,0x44,0x44,0x54,0xE7,0x00,//强6
    
    	0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
    	0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,//度7
    
    	0x80,0x70,0x00,0xFF,0x10,0x08,0xFE,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0xFE,0x00,
    	0x80,0x60,0x18,0x07,0x08,0x10,0xFF,0x50,0x48,0x46,0x41,0x42,0x4C,0x40,0xFF,0x00,//烟8
    
    	0x10,0x0C,0x05,0x55,0x55,0xD5,0x05,0x7F,0x05,0x55,0x55,0x55,0x05,0x14,0x0C,0x00,
    	0x10,0x10,0x10,0x8A,0xA9,0x6B,0x35,0x25,0x25,0xAB,0xE9,0x08,0x10,0x10,0x10,0x00,//雾9
    
    	0x10,0x60,0x02,0x8C,0x20,0x18,0x08,0xC8,0x38,0xCF,0x08,0x08,0x28,0x98,0x00,0x00,
    	0x04,0x04,0x7E,0x01,0x04,0x02,0x01,0xFF,0x40,0x21,0x06,0x0A,0x11,0x20,0x40,0x00,//浓10
    
    	0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,
    	0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,//度11
    	
    		
    	0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,//1 12
    
    	0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 13
    };
    
    /************************************6*8的点阵************************************/
    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
    };
    /****************************************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
    };
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32实现IIC接口驱动OLED显示屏

    发表评论