RA4M2-SENSOR开发板是一款近于最小系统的开发板,通过添加相应的外设,可丰富其功能。
这里就为它配置一个I2C接口的OLED屏,驱动OLED屏的方式有2种,即软件方式和硬件方式。
其中软件方式的特点是易于实现并不受引脚的限制,而硬件方式则更能体现对硬件资源的利用和发挥。
这里是采用软件的驱动方式,为后续改为硬件驱动,其引脚连接关系为:
SCL ---P100
SDA---P101
在程序设计前,需使用RASC对所用引脚加以配置,以使其作为GPIO口来使用。

图1 引脚配置
为实现高低电平的输出其语句定义为:
#define OLED_SCLK_Set() R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_00, BSP_IO_LEVEL_HIGH)
#define OLED_SDIN_Set() R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_HIGH)
#define OLED_SCLK_Clr() R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_00, BSP_IO_LEVEL_LOW)
#define OLED_SDIN_Clr() R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_LOW)
模拟I2C发送字节数据的函数为:
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;
m=m&0x80;
if(m==0x80)
{OLED_SDIN_Set();}
else
OLED_SDIN_Clr();
da=da<<1;
delay_us(3);
OLED_SCLK_Set();
delay_us(3);
OLED_SCLK_Clr();
delay_us(3);
}
}
对显示屏的初始化函数为:
void OLED_Init(void)
{
Write_IIC_Command(0xAE);
Write_IIC_Command(0x40);
Write_IIC_Command(0xb0);
Write_IIC_Command(0xc8);
Write_IIC_Command(0x81);
Write_IIC_Command(0xff);
Write_IIC_Command(0xa1);
Write_IIC_Command(0xa6);
Write_IIC_Command(0xa8);
Write_IIC_Command(0x1F);
Write_IIC_Command(0xd3);
Write_IIC_Command(0x00);
Write_IIC_Command(0xd5);
Write_IIC_Command(0xf0);
Write_IIC_Command(0xd9);
Write_IIC_Command(0x22);
Write_IIC_Command(0xda);
Write_IIC_Command(0x02);
Write_IIC_Command(0x8d);
Write_IIC_Command(0x14);
Write_IIC_Command(0xdb);
Write_IIC_Command(0x49);
Write_IIC_Command(0xaf);
}
实现清除屏幕的函数为:
void OLED_Clear(void)
{
uint8_t i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD);
OLED_WR_Byte (0x00,OLED_CMD);
OLED_WR_Byte (0x10,OLED_CMD);
for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
}
}
显示字符串的函数为:
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
unsigned char j=0;
while (chr[j]!='\0')
{ OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
实现显示测试的主程序为:
void hal_entry(void)
{
R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_00, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&IOPORT_CFG_CTRL, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_HIGH);
OLED_Initd();
OLED_Clear();
OLED_ShowString(0,0,"RA4M2-SENSOR",16);
OLED_ShowString(0,2,"jinglixixi",16);
while(1);
}
经程序的编译和下载,其显示效果如图2所示,说明功能正常。

图2 显示效果