首先要知道IIC的原理:IIC基本原理
基于IIC的原理配置OLED源文件
#define OLED_SCLK_Clr() MAP_GPIOPinWrite(GPIO_OLED_SCLK_PORT_BASE,GPIO_OLED_SCLK_PIN,0) //OLED_SCL=0
#define OLED_SCLK_Set() MAP_GPIOPinWrite(GPIO_OLED_SCLK_PORT_BASE,GPIO_OLED_SCLK_PIN,0xFF) //OLED_SCL=1
#define OLED_SDIN_Clr() MAP_GPIOPinWrite(GPIO_OLED_DAT_PORT_BASE,GPIO_OLED_DAT_PIN,0) //OLED_SDIN=0
#define OLED_SDIN_Set() MAP_GPIOPinWrite(GPIO_OLED_DAT_PORT_BASE,GPIO_OLED_DAT_PIN,0xFF) //OLED_SDIN=1;
void delay_ms(unsigned int ms)
{
unsigned int a;
while (ms)
{
a = 1800;
while (a--)
;
ms--;
}
}
//发送一个字节
//向SSD1306写入一个字节。
//mode:数据/命令标志 0,表示命令;1,表示数据;
void IIC_Start()
{
OLED_SCLK_Set() ;
OLED_SDIN_Set();
OLED_SDIN_Clr();
OLED_SCLK_Clr();
}
void IIC_Stop()
{
OLED_SCLK_Set() ;
// OLED_SCLK_Clr();
OLED_SDIN_Clr();
OLED_SDIN_Set();
}
void IIC_Wait_Ack()
{
OLED_SCLK_Set() ;
OLED_SCLK_Clr();
}
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
OLED_SCLK_Clr();
for(i=0;i<8;i++)
{
m=da;
// OLED_SCLK_Clr();
m=m&0x80;
if(m==0x80)
{OLED_SDIN_Set();}
else OLED_SDIN_Clr();
da=da<<1;
OLED_SCLK_Set();
OLED_SCLK_Clr();
}
}
void Write_IIC_Command(unsigned char IIC_Command)
{
IIC_Start();
Write_IIC_Byte(0x78); //Slave address,SA0=0
IIC_Wait_Ack();
Write_IIC_Byte(0x00); //write command
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Command);
IIC_Wait_Ack();
IIC_Stop();
}
void Write_IIC_Data(unsigned char IIC_Data)
{
IIC_Start();
Write_IIC_Byte(0x78); //D/C#=0; R/W#=0
IIC_Wait_Ack();
Write_IIC_Byte(0x40); //write data
IIC_Wait_Ack();
Write_IIC_Byte(IIC_Data);
IIC_Wait_Ack();
IIC_Stop();
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
if(cmd)
{
Write_IIC_Data(dat);
}
else {
Write_IIC_Command(dat);
}
}
头文件:
#define OLED_ADDRESS 0x3C //通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78 0x3C = 0x78 >> 1
#define GPIO_OLED_DAT_PORT_BASE GPIO_PORTG_BASE //OLED屏D1连接端口
#define GPIO_OLED_DAT_PORT_SYSCTL SYSCTL_PERIPH_GPIOG
#define GPIO_OLED_DAT_PIN GPIO_PIN_0
#define GPIO_OLED_SCLK_PORT_BASE GPIO_PORTG_BASE //OLED屏D0连接端口
#define GPIO_OLED_SCLK_PORT_SYSCTL SYSCTL_PERIPH_GPIOG
#define GPIO_OLED_SCLK_PIN GPIO_PIN_1
#define u8 unsigned char
#define u32 unsigned int
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
//OLED模式设置
//0:4线串行模式
//1:并行8080模式
//此项目程序使用的是串行模式
#define OLED_MODE 0
#define SIZE 16
#define XLevelL 0x02
#define XLevelH 0x10
#define Max_Column 128
#define Max_Row 64
#define Brightness 0xFF
#define X_WIDTH 128
#define Y_WIDTH 64
其他配置只需简单更改即可。