iic.h
#ifndef __IIC_H
#define __IIC_H
#include "stm32f10x.h"
#define IIC_SPEED 1
#define IIC_SDA_RCC RCC_APB2Periph_GPIOB
#define IIC_SCL_RCC RCC_APB2Periph_GPIOB
#define IIC_SDA_PORT GPIOB
#define IIC_SCL_PORT GPIOB
#define IIC_SDA_PIN GPIO_Pin_10
#define IIC_SCL_PIN GPIO_Pin_11
#define IIC_SDA_IN() setSDA_IN()
#define IIC_SDA_OUT() setSDA_OUT()
#define IIC_SDA_H() GPIO_SetBits(IIC_SDA_PORT,IIC_SDA_PIN)
#define IIC_SDA_L() GPIO_ResetBits(IIC_SDA_PORT,IIC_SDA_PIN)
#define IIC_SCL_H() GPIO_SetBits(IIC_SCL_PORT,IIC_SCL_PIN)
#define IIC_SCL_L() GPIO_ResetBits(IIC_SCL_PORT,IIC_SCL_PIN)
typedef enum
{
NACK = 0x00,
ACK = 0x01
}IIC_ACK;
void setSDA_OUT(void);
void setSDA_IN(void);
void initIIC(void);
void startIIC(void);
void stopIIC(void);
void sendIICByte(u8 byte);
u8 receiveIICByte(void);
void sendIICAck(void);
void sendIICNAck(void);
IIC_ACK waitAck(void);
#endif
iic.c
#include "IIC/IIC.h"
#include "DELAY/Delay.h"
void setSDA_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
}
void setSDA_OUT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(IIC_SDA_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
GPIO_SetBits(IIC_SDA_PORT,IIC_SDA_PIN);
}
void initIIC(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(IIC_SDA_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = IIC_SDA_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(IIC_SDA_PORT, &GPIO_InitStructure);
GPIO_SetBits(IIC_SDA_PORT,IIC_SDA_PIN);
RCC_APB2PeriphClockCmd(IIC_SCL_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = IIC_SCL_PIN;
GPIO_Init(IIC_SCL_PORT, &GPIO_InitStructure);
GPIO_SetBits(IIC_SCL_PORT,IIC_SCL_PIN);
}
void startIIC(void)
{
IIC_SDA_OUT();
IIC_SCL_H();
IIC_SDA_H();
Delay_us(IIC_SPEED);
IIC_SDA_L();
Delay_us(IIC_SPEED);
IIC_SCL_L();
}
void stopIIC(void)
{
IIC_SDA_OUT();
IIC_SDA_L();
IIC_SCL_H();
Delay_us(IIC_SPEED);
IIC_SDA_H();
Delay_us(IIC_SPEED);
IIC_SCL_L();
}
void sendIICByte(u8 byte)
{
u8 i;
IIC_SDA_OUT();
for(i=0;i<8;++i)
{
if(byte & 0x80)
{
IIC_SDA_H();
}else
{
IIC_SDA_L();
}
byte <<= 1;
IIC_SCL_H();
Delay_us(IIC_SPEED);
IIC_SCL_L();
Delay_us(IIC_SPEED);
}
}
u8 receiveIICByte(void)
{
s8 i;
u8 byte = 0;
IIC_SDA_IN();
Delay_us(IIC_SPEED);
for(i=7;i>=0;--i)
{
IIC_SCL_H();
Delay_us(IIC_SPEED);
if(GPIO_ReadInputDataBit(IIC_SDA_PORT,IIC_SDA_PIN))
{
byte |= 0x01<<i;
}else
{
byte |= 0x00<<i;
}
IIC_SCL_L();
Delay_us(IIC_SPEED);
}
return byte;
}
void sendIICAck(void)
{
IIC_SDA_OUT();
IIC_SDA_L();
IIC_SCL_H();
Delay_us(IIC_SPEED);
IIC_SDA_H();
IIC_SCL_L();
}
void sendIICNAck(void)
{
IIC_SDA_OUT();
IIC_SDA_H();
IIC_SCL_H();
Delay_us(IIC_SPEED);
IIC_SCL_L();
}
IIC_ACK waitAck(void)
{
u8 i = 0;
IIC_SDA_IN();
IIC_SCL_H();
while(GPIO_ReadInputDataBit(IIC_SDA_PORT,IIC_SDA_PIN))
{
if(++i>50)
{
IIC_SCL_L();
return NACK;
}
Delay_us(1);
}
IIC_SCL_L();
return ACK;
}
font.h
#ifndef __OLEDFONT_H
#define __OLEDFONT_H
const unsigned char ANSIC0608[95][6] =
{
{
0x00,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x4C,0x40,0x00,0x00},
{
0x00,0x02,0x02,0x02,0x00,0x00},
{
0x20,0x7C,0x28,0x28,0x3E,0x20},
{
0x00,0x6C,0x4A,0x74,0x24,0x00},
{
0x0C,0x52,0x3C,0x7C,0x52,0x70},
{
0x30,0x4C,0x7A,0x6C,0x50,0x40},
{
0x00,0x02,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0x7C,0x82,0x00},
{
0x00,0x42,0x3C,0x00,0x00,0x00},
{
0x00,0x18,0x38,0x10,0x18,0x00},
{
0x00,0x00,0x10,0x18,0x10,0x00},
{
0x00,0xC0,0x00,0x00,0x00,0x00},
{
0x08,0x08,0x08,0x08,0x08,0x08},
{
0x00,0x40,0x00,0x00,0x00,0x00},
{
0x00,0x40,0x30,0x08,0x06,0x00},
{
0x00,0x7C,0x42,0x42,0x7C,0x00},
{
0x00,0x00,0x44,0x7C,0x00,0x00},
{
0x00,0x64,0x62,0x52,0x4C,0x00},
{
0x00,0x64,0x42,0x4A,0x7C,0x00},
{
0x00,0x10,0x28,0x7C,0x20,0x00},
{
0x00,0x6C,0x4C,0x4C,0x70,0x00},
{
0x00,0x7C,0x4A,0x4A,0x74,0x00},
{
0x00,0x04,0x64,0x1C,0x04,0x00},
{
0x00,0x7C,0x4A,0x52,0x7C,0x00},
{
0x00,0x5C,0x52,0x52,0x3C,0x00},
{
0x00,0x00,0x48,0x48,0x00,0x00},
{
0x00,0x00,0xC8,0x00,0x00,0x00},
{
0x00,0x18,0x28,0x24,0x42,0x00},
{
0x00,0x18,0x18,0x18,0x18,0x00},
{
0x00,0x42,0x24,0x28,0x18,0x00},
{
0x00,0x04,0x62,0x52,0x0C,0x00},
{
0x18,0x64,0x7A,0x56,0x6C,0x18},
{
0x40,0x30,0x1C,0x1C,0x70,0x00},
{
0x00,0x7C,0x54,0x54,0x5C,0x20},
{
0x18,0x64,0x42,0x42,0x42,0x24},
{
0x00,0x7C,0x44,0x44,0x24,0x18},
{
0x00,0x7C,0x54,0x54,0x44,0x00},
{
0x00,0x7C,0x14,0x14,0x1C,0x04},
{
0x38,0x44,0x42,0x42,0x64,0x00},
{
0x00,0x7C,0x10,0x10,0x7C,0x00},
{
0x00,0x00,0x7C,0x44,0x00,0x00},
{
0x80,0x80,0x80,0xFC,0x04,0x00},
{
0x00,0x7C,0x08,0x34,0x40,0x00},
{
0x00,0x7C,0x40,0x40,0x40,0x00},
{
0x70,0x4C,0x70,0x10,0x7C,0x00},
{
0x00,0x7C,0x08,0x10,0x3C,0x00},
{
0x18,0x64,0x42,0x42,0x44,0x38},
{
0x00,0x7C,0x14,0x14,0x0C,0x04},
{
0x38,0x44,0x62,0x42,0xC4,0x38},
{
0x00,0x7C,0x14,0x14,0x6C,0x00},
{
0x00,0x4C,0x4A,0x52,0x74,0x00},
{
0x04,0x04,0x7C,0x04,0x04,0x04},
{
0x00,0x7C,0x40,0x40,0x7C,0x00},
{
0x00,0x0C,0x30,0x30,0x0C,0x00},
{
0x00,0x3C,0x14,0x3C,0x1C,0x04},
{
0x00,0x44,0x28,0x38,0x44,0x00},
{
0x00,0x04,0x78,0x08,0x04,0x00},
{
0x00,0x64,0x54,0x4C,0x44,0x00},
{
0x00,0x00,0xFE,0x82,0x80,0x00},
{
0x00,0x06,0x08,0x30,0x40,0x00},
{
0x00,0x80,0x82,0xFE,0x00,0x00},
{
0x00,0x01,0x01,0x01,0x01,0x00},
{
0x80,0x80,0x80,0x80,0x80,0x80},
{
0x00,0x01,0x01,0x00,0x00,0x00},
{
0x00,0x60,0x58,0x58,0x70,0x40},
{
0x00,0x7E,0x48,0x48,0x70,0x00},
{
0x00,0x70,0x48,0x48,0x40,0x00},
{
0x00,0x70,0x48,0x48,0x7E,0x40},
{
0x00,0x70,0x68,0x68,0x50,0x00},
{
0x00,0x08,0x7C,0x0C,0x0C,0x00},
{
0x00,0xF0,0xE8,0xE8,0xD8,0x08},
{
0x00,0x7E,0x08,0x08,0x70,0x00},
{
0x00,0x08,0x78,0x40,0x00,0x00},
{
0x00,0x80,0x80,0x88,0x7A,0x00},
{
0x00,0x7E,0x10,0x38,0x48,0x00},
{
0x00,0x00,0x7E,0x40,0x00,0x00},
{
0x78,0x48,0x48,0x70,0x48,0x70},
{
0x08,0x78,0x08,0x08,0x70,0x00},
{
0x00,0x70,0x48,0x48,0x70,0x00},
{
0x08,0xF8,0x48,0x48,0x70,0x00},
{
0x00,0x70,0x48,0x48,0xF0,0x00},
{
0x08,0x48,0x70,0x08,0x08,0x00},
{
0x00,0x50,0x58,0x68,0x68,0x00},
{
0x00,0x08,0x7C,0x48,0x48,0x00},
{
0x08,0x78,0x40,0x40,0x78,0x40},
{
0x08,0x18,0x20,0x20,0x18,0x00},
{
0x08,0x38,0x28,0x38,0x38,0x08},
{
0x00,0x48,0x38,0x38,0x48,0x00},
{
0x00,0x98,0xA0,0x60,0x18,0x08},
{
0x00,0x48,0x68,0x58,0x48,0x00},
{
0x00,0x00,0x00,0x7E,0x80,0x00},
{
0x00,0x00,0x00,0xFF,0x00,0x00},
{
0x00,0x80,0x7E,0x00,0x00,0x00},
{
0x00,0x01,0x01,0x02,0x02,0x00}
};
const unsigned char ANSIC0816[95][16] =
{
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00},
{
0x00,0x10,0x0C,0x02,0x10,0x0C,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00},
{
0x00,0x70,0x88,0x88,0xFC,0x08,0x30,0x00,0x00,0x18,0x20,0x20,0xFF,0x21,0x1E,0x00},
{
0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00},
{
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x2C,0x19,0x27,0x21,0x10},
{
0x00,0x12,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},
{
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},
{
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},
{
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x70,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00},
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},
{
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00},
{
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},
{
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00},
{
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F