在掌握GPIO口的使用方法后,我们可以快速地完成GPIO口的输入/输出设置、高低电平的输出等。在此基础上,我们可以通过GPIO口来模拟I2C接口以驱动相应的OLED显示屏工作。 I2C_OLED屏是一种借由I2C接口工作的器件,共有4个引脚,故占用GPIO口资源极少。 为便于连接,这里选用的是板上的I2C 1接口,并使用插排来连接。 OLED屏与MCU的连接关系为: OLED_SCLK——PB13 OLED_SDIN——PC4 其余的两个引脚则接3.3V工作电源 定义GPIO口输出高低电平的语句为: #defineOLED_SCLK_Set() GPIO_SetPinLevel(GPIOB,GPIO_PIN13, GPIO_LEVEL_HIGH); // PB13 #defineOLED_SCLK_Clr() GPIO_SetPinLevel(GPIOB,GPIO_PIN13, GPIO_LEVEL_LOW); #defineOLED_SDIN_Set() GPIO_SetPinLevel(GPIOC,GPIO_PIN4, GPIO_LEVEL_HIGH); // PC4 #defineOLED_SDIN_Clr() GPIO_SetPinLevel(GPIOC,GPIO_PIN4, GPIO_LEVEL_LOW); 对GPIO的功能定义函数为: - void LCD_GPIO_Cogfig(void)
- {
- GPIO_SetFunc(GPIOC, GPIO_PIN4, GPIO_FUN0);
- GPIO_SetFunc(GPIOB, GPIO_PIN13, GPIO_FUN0);
-
- GPIO_SetDir(GPIOC, GPIO_PIN4, GPIO_OUT);
- GPIO_SetDir(GPIOB, GPIO_PIN13, GPIO_OUT);
- }
OLED屏的初始化函数为: - void OLED_Init(void)
- {
- LCD_GPIO_Cogfig();
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- mdelay(800);//delay_ms(800);
- OLED_WR_Byte(0xAE,OLED_CMD);//--display off
- 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
- OLED_WR_Byte(0xB0,OLED_CMD);//--setpage address
- OLED_WR_Byte(0x81,OLED_CMD);// contract control
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- OLED_WR_Byte(0xA1,OLED_CMD);//setsegment remap
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal/ reverse
- OLED_WR_Byte(0xA8,OLED_CMD);//--setmultiplex ratio(1 to 64)
- OLED_WR_Byte(0x3F,OLED_CMD);//--1/32duty
- OLED_WR_Byte(0xC8,OLED_CMD);//Comscan direction
- OLED_WR_Byte(0xD3,OLED_CMD);//-setdisplay offset
- OLED_WR_Byte(0x00,OLED_CMD);//
-
- OLED_WR_Byte(0xD5,OLED_CMD);//setosc division
- OLED_WR_Byte(0x80,OLED_CMD);//
-
- OLED_WR_Byte(0xD8,OLED_CMD);//setarea color mode off
- OLED_WR_Byte(0x05,OLED_CMD);//
-
- OLED_WR_Byte(0xD9,OLED_CMD);//SetPre-Charge Period
- OLED_WR_Byte(0xF1,OLED_CMD);//
-
- OLED_WR_Byte(0xDA,OLED_CMD);//setcom pin configuartion
- OLED_WR_Byte(0x12,OLED_CMD);//
-
- OLED_WR_Byte(0xDB,OLED_CMD);//setVcomh
- OLED_WR_Byte(0x30,OLED_CMD);//
-
- OLED_WR_Byte(0x8D,OLED_CMD);//setcharge pump enable
- OLED_WR_Byte(0x14,OLED_CMD);//
-
- OLED_WR_Byte(0xAF,OLED_CMD);//--turnon oled panel
- }
实现图示效果的主程序为: - int main(void)
- {
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"AC8710 TEST",16);
- OLED_ShowString(0,2,"OLED Display",16);
- OLED_ShowString(0,4,"jinglixixi",16);
- OLED_ShowString(0,6,"2020.6.6",16);
- while (1);
- }
OLED屏显示效果
|