前面介绍了I2C接口OLED屏的使用方法,这里再介绍一下SPI接口的OLED屏用法,当然使用的还是键盘端口(KPP)。 OLED屏与RT1052的连接关系如下: CS --P1.24 DC --P1.26 RST --P1.28 DIN --P1.27 D1 SCLK--P1.25 D0 使个引脚输出高低电平的定义如下: #define OLED_CS_Clr() GPIO_PinWrite(GPIO1, (24U), 0U); #define OLED_CS_Set() GPIO_PinWrite(GPIO1, (24U), 1U); #define OLED_DC_Clr() GPIO_PinWrite(GPIO1, (26U), 0U); #define OLED_DC_Set() GPIO_PinWrite(GPIO1, (26U), 1U); #define OLED_RST_Clr() GPIO_PinWrite(GPIO1, (28U), 0U); #define OLED_RST_Set() GPIO_PinWrite(GPIO1, (28U), 1U); #define OLED_SDIN_Clr() GPIO_PinWrite(GPIO1, (27U), 0U); #define OLED_SDIN_Set() GPIO_PinWrite(GPIO1, (27U), 1U); #define OLED_SCLK_Clr() GPIO_PinWrite(GPIO1, (25U), 0U); #define OLED_SCLK_Set() GPIO_PinWrite(GPIO1, (25U), 1U); 配置各引脚为输出端口的函数为: void LCD_GPIO_Cogfig(void) { gpio_pin_config_t led_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; GPIO_PinInit(GPIO1, (25U),&led_config); GPIO_PinInit(GPIO1, (27U),&led_config); GPIO_PinInit(GPIO1, (24U),&led_config); GPIO_PinInit(GPIO1, (26U),&led_config); GPIO_PinInit(GPIO1, (28U),&led_config); GPIO_PinInit(GPIO1, (30U),&led_config); GPIO_PinInit(GPIO1, (31U),&led_config); }
该OLED屏的初始化函数为: void OLED_Init(void) { LCD_GPIO_Cogfig(); OLED_RST_Set(); delay_ms(100); OLED_RST_Clr(); delay_ms(100); OLED_RST_Set(); OLED_WR_Byte(0xAE,OLED_CMD);//--turnoff oled panel OLED_WR_Byte(0x00,OLED_CMD);//---setlow column address OLED_WR_Byte(0x10,OLED_CMD);//---sethigh column address OLED_WR_Byte(0x40,OLED_CMD);//--setstart line address Set Mapping RAM OLED_WR_Byte(0x81,OLED_CMD);//--set contrastcontrol register OLED_WR_Byte(0xCF,OLED_CMD); //Set SEG Output Current Brightness OLED_WR_Byte(0xA1,OLED_CMD);//--SetSEG/Column Mapping OLED_WR_Byte(0xC8,OLED_CMD);//SetCOM/Row Scan Direction OLED_WR_Byte(0xA6,OLED_CMD);//--setnormal display OLED_WR_Byte(0xA8,OLED_CMD);//--setmultiplex ratio(1 to 64) OLED_WR_Byte(0x3f,OLED_CMD);//--1/64duty OLED_WR_Byte(0xD3,OLED_CMD);//-setdisplay offset OLED_WR_Byte(0x00,OLED_CMD);//-notoffset OLED_WR_Byte(0xd5,OLED_CMD);//--setdisplay clock divide ratio/oscillator frequency OLED_WR_Byte(0x80,OLED_CMD);//--setdivide ratio, Set Clock as 100 Frames/Sec OLED_WR_Byte(0xD9,OLED_CMD);//--setpre-charge period OLED_WR_Byte(0xF1,OLED_CMD);//SetPre-Charge as 15 Clocks & Discharge as 1 Clock OLED_WR_Byte(0xDA,OLED_CMD);//--setcom pins hardware configuration OLED_WR_Byte(0x12,OLED_CMD); OLED_WR_Byte(0xDB,OLED_CMD);//--setvcomh OLED_WR_Byte(0x40,OLED_CMD);//SetVCOM Deselect Level OLED_WR_Byte(0x20,OLED_CMD);//-SetPage Addressing Mode (0x00/0x01/0x02) OLED_WR_Byte(0x02,OLED_CMD);// OLED_WR_Byte(0x8D,OLED_CMD);//--setCharge Pump enable/disable OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10)disable OLED_WR_Byte(0xA4,OLED_CMD);//Disable Entire Display On (0xa4/0xa5) OLED_WR_Byte(0xA6,OLED_CMD);//Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD);//--turnon oled panel OLED_WR_Byte(0xAF,OLED_CMD);/*display ON*/ OLED_Clear(); OLED_Set_Pos(0,0); }
SPI 接口OLED屏显示效果
实现图示效果的主程序为: int main(void) { uint16_t i=0; gpio_pin_config_t led_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; BOARD_ConfigMPU(); BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); GPIO_PinInit(EXAMPLE_LED_GPIO,EXAMPLE_LED_GPIO_PIN, &led_config); delay(); OLED_Init(); OLED_Clear(); OLED_ShowString(8,0,"OK1052-C"); OLED_ShowString(8,2,"OLEDTEST"); OLED_ShowString(8,4,"JINGLIXIXI"); OLED_ShowString(8,6,"2018/11/8"); while(1); }
|