【瑞萨RA2系列开发板体验】OLED屏的显示驱动
RA2L1开发板是一款面向低功耗的开发板,若要为其配置显示功能,用一个数码管显然是不合适的。为此,将目光投到了oled屏的身上,相较于数码管其显示的信息更丰富,此外它还不同于液晶显示屏的放射光显示模式,它是通过靠自发光来显示的,因此在黑暗的环境下也可进行显示。 此外还不仅如此,在使用I2C接口器件的情况下,还能有效地减少GPIO口的占用,可谓优点多多。 鉴于开发板上配有I2C接口,便打算用它来驱动一个0.91寸的OLED屏,无奈的是一直没有效果,于是进行深入的测试,结果发现其它的引脚多不存在问题,使用板上的I2C接口却无效。
图1 I2C接口
有了前面的基础,决定改用其它引脚来驱动OLED屏。 OLED屏与开发板的连接关系为: SCL----P400 SDA----P401 为使用GPIO口来模拟I2C通讯,对这2个引脚输出高低电平的语句定义为: #define OLED_SCLK_Clr() R_PORT4->PODR &= ~(1 << 0); #define OLED_SCLK_Set() R_PORT4->PODR |= (1 << 0);
#define OLED_SDIN_Clr() R_PORT4->PODR &= ~(1 << 1); #define OLED_SDIN_Set() R_PORT4->PODR |= (1 << 1);
此外,为保证信号的有效工作,特配置了一个极短的延时函数,其内容如下:
- void us_delay(int n)
- {
- while(n--);
- }
复制代码 相应的I2C启停函数为:
- void IIC_Start()
- {
- OLED_SCLK_Set();
- us_delay(2);
- OLED_SDIN_Set();
- us_delay(2);
- OLED_SDIN_Clr();
- us_delay(2);
- OLED_SCLK_Clr();
- us_delay(2);
- }
- void IIC_Stop()
- {
- OLED_SCLK_Set();
- us_delay(2);
- OLED_SDIN_Clr();
- us_delay(2);
- OLED_SDIN_Set();
- us_delay(2);
- }
复制代码 为了进行字符及字符串的显示,所配的相关函数为:
- void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
- {
- unsigned char c=0,i=0;
- c=chr-' ';
- IF(x>Max_Column-1){x=0;y=y+2;}
- if(Char_Size ==16)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
- OLED_Set_Pos(x,y+1);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i+8],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')
- {
复制代码
实现图4显示效果的主程序为:
- int main(void)
- {
- R_PORT1->PDR |= (1 << 3);
- R_PORT1->PDR |= (1 << 4);
- R_PORT0->PDR &= ~ (1 << 15);
- R_PORT4->PDR |= (1 << 0);
- R_PORT4->PDR |= (1 << 1);
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(20,0,"RA2L1",16);
- OLED_ShowString(20,2,"OLED test",16);
- while(1)
- {
- R_PORT1->PODR |= (1 << 3);
- R_PORT1->PODR |= (1 << 4);
- delay();
- R_PORT1->PODR &= ~(1 << 3);
- R_PORT1->PODR &= ~(1 << 4);
- delay();
- }
- }
复制代码 经程序编译,其结果如图5所示,说明程序没有语法性错误,并生成了相应HEX目标文件。
在使用工具软件Renesas FlashProgrammer下载后,即可得到预期的显示效果。 有了OLED屏作显示工具,再有信息及数据显示的问题就交由它来解决了! 通过以GPIO口对OLED屏的驱动,对GPIO的使用对其又有了进一步的认识,后面是解决GPIO口的输入与状态判别问题,从而能以按键来控制LED,进而能驱动相应的数字式传感器来进行检测。
|