OLED屏是一种能自发光的显示器件,故受环境光线的影响比较小。
为了进行GPIO口的测试,可通过OLED屏的显示驱动作为目标,并选取I2C方式工作的OLED来节省引脚的使用。
该OLED显示屏与开发板的连接关系为:
SCL---GPIO33
SDA--- GPIO32
图1 所用接口
为便于输出高低电平,所作的定义为:
#define SCL_high GpioDataRegs.GPBSET.bit.GPIO33= 1
#define SCL_low GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1
#define SDA_high GpioDataRegs.GPBSET.bit.GPIO32=1
#define SDA_lowGpioDataRegs.GPBCLEAR.bit.GPIO32 = 1
对使用引脚的配置函数为:
void InitOLED(void)
{
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO33= 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;
EDIS;
}
在GPIO模拟I2C的情况下,实现串行字节数据发送的函数为:
void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i;
unsigned char m,da;
da=IIC_Byte;
SCL_low;
for(i=0;i<8;i++)
{
m=da;
m=m&0x80;
if(m==0x80)
{
SDA_high;
}
else SDA_low;
da=da<<1;
SCL_high;
DELY();
SCL_low;
DELY();
}
}
对OLED屏的清除函数为:
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++;
}
}
实现字符串输出测试的主程序为:
int main(void)
{
uint32_t i;
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
InitKEY();
InitLED();
GpioDataRegs.GPBSET.bit.GPIO41 = 1;
InitOLED();
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"HX_DSC8034",16);
OLED_ShowString(20,2,"OLED Test",16);
while(1);
return 0;
}
经程序的编译与运行,其实现效果图2所示。
图2 显示效果
有了OLED屏的显示功能,再输出信息就会比数码管的显示功能强许多。