在掌握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屏显示效果
|