有了上面的对OLED发送命令和写入显示数据到OLED的函数,我们就很可以随心所欲的操作OLED了:
首先我们将OLED到LPC1343的控制线和数据线都设置为输出状态。OLED里面的数据我不关心(里面数据乱了顶多重写),所以RDB的线我直接接高电平。
其次:初始化OLED。
最后:把OLED整屏刷成白色,验证OLED是否正常顺便检查一下有没有坏点。有兴趣的朋友还可以刷成其他颜色。修改最后的FOR循环就可以了。
初始化代码如下:
void oledinit(void)
{
//初始化GPIO口,让CSI、CSV、A0、RSB、WRB都为输出(DIR位=1)IO2_0:5为输出
//CSI=1、CSV=1、A0=0、RSB=1、WRB=1;
LPC_IOCON->PIO2_0=0x50;
LPC_IOCON->PIO2_1=0x50;
LPC_IOCON->PIO2_2=0x50;
LPC_IOCON->PIO2_3=0x50;
LPC_IOCON->PIO2_4=0x50;
LPC_IOCON->PIO2_5=0x50;
LPC_GPIO[2]->DIR |= 0x3f; //对应位为1输出
LPC_GPIO[2]->MASKED_ACCESS[0x3f] = 0x00; //data=0,OLED命令模式,这是安全的GPIO设置
LPC_IOCON->JTAG_TMS_PIO1_0=0xd1; //数字上拉,IO口
LPC_GPIO[1]->DIR |= 1; //对应位为1输出
LPC_GPIO[1]->MASKED_ACCESS[0x01] = 0x00; //A0=0,OLED命令模式,这是安全的GPIO设置
LPC_IOCON->JTAG_TDO_PIO1_1=0xd1; //数字上拉,IO口
LPC_GPIO[1]->DIR |= 2; //对应位为1输出
LPC_GPIO[1]->MASKED_ACCESS[0x02] = 0x02; //CSV=1,取消选中OLEDV,这是安全的GPIO设置}
LPC_IOCON->PIO1_5=0x50;
LPC_GPIO[1]->DIR |= 0x20; //对应位为1输出
LPC_GPIO[1]->MASKED_ACCESS[0x20] = 0x20; //WRB=1,不写,这是安全的GPIO设置
LPC_IOCON->PIO1_8=0x50;
LPC_GPIO[1]->DIR |= 0x100; //对应位为1输出
LPC_GPIO[1]->MASKED_ACCESS[0x100] = 0x100; //RSB=1,不写,这是安全的GPIO设置
LPC_IOCON->PIO3_0=0x50;
LPC_GPIO[3]->DIR |= 0x01; //对应位为1输出
LPC_GPIO[3]->MASKED_ACCESS[0x01] = 0x01; //CSI=1,取消选中OLEDI,这是安全的GPIO设置
//初始化显示OLED
//standby on/off
//LPC_GPIO[1]->MASKED_ACCESS[0x100] = 0x00;
//delay1(1000);
//LPC_GPIO[1]->MASKED_ACCESS[0x100] = 0x100;
//delay1(1000);
cmd(0x03);
data(0x00); //off
//-----------------------------------------------------------------
// Panel Condition Set
//-----------------------------------------------------------------
//画面大小
cmd(0x07);
data(0x00);
data(0x00); //00
data(0x07);
data(0x0F); //127
data(0x02);
data(0x00); //32 //D-IC Change : 128128 IC -> 128160 IC
data(0x09);
data(0x0F); //159 //D-IC Change : 128128 IC -> 128160 IC
//write direction
cmd(0x05);
data(0x00);
//frame frequency
cmd(0x04);
data(0x01); //75Hz
//row overlap scan
cmd(0x1F);
data(0x00);
//internal regulator
cmd(0x30);
data(0x13); //internal regulator enable 80%
//-----------------------------------------------------------------
// Drive Condition Set
//-----------------------------------------------------------------
//precharge time
cmd(0x1C);
data(0x00);
data(0x04); //4?
//peak width
cmd(0x1D);
data(0x07); //red
data(0x08); //green
data(0x07); //blue
//output current
cmd(0x0E);
data(0x08);
data(0x02); //red
data(0x04);
data(0x0E); //green
data(0x03);
data(0x02); //blue
//-----------------------------------------------------------------
// Memory Data Write
//-----------------------------------------------------------------
//interface
cmd(0x08);
data(0x00); //=> 6bit 262k
//xbox size
cmd(0x0A);
data(0x00);
data(0x00); //00
data(0x07);
data(0x0F); //127
data(0x02);
data(0x00); //32
data(0x09);
data(0x0F); //159
//data write
cmd(0x0C);
//full white pattern write => 6bit 262k
int i,j;
for(i=0;i<128;i++)
{
for(j=0;j<128;j++)
{
data(0); //data write
data(0);
data(0);
}
}
}
|