ART-Pi开发板驱动彩色OLED屏
本帖最后由 jinglixixi 于 2020-12-11 22:20 编辑ART-Pi开发板在外设资源方面,尤其是人机交互方面急需补充,为此我们为它配置了一个彩色OLED屏来作为显示的窗口。该彩色OLED屏与MCU的连接关系为:SCLK---PH11SDA---PH12RST---PH13DC ---PH15CS ---PH7BLK ---PH9为便于进行快速的移植,这里采用I/O口模拟SPI通信的方式来进行驱动。在驱动时,相关引脚输出高低电平的引脚定义为:#define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_RESET)//CLK#define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_11,GPIO_PIN_SET)
#define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_RESET)//DIN#define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_12,GPIO_PIN_SET)
#define OLED_RST_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_RESET) //RES#define OLED_RST_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_13,GPIO_PIN_SET)
#define OLED_DC_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_RESET) //DC#define OLED_DC_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_15,GPIO_PIN_SET)
#define OLED_CS_Clr()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_RESET) //CS#define OLED_CS_Set()HAL_GPIO_WritePin(GPIOH,GPIO_PIN_7,GPIO_PIN_SET)
#define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_RESET) //BLK#define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOH,GPIO_PIN_9,GPIO_PIN_SET)
为使相关引脚配置为输出功能其功能函数为:void app_oled_init()
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOH_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_15;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Initure.Speed=GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOH,&GPIO_Initure);
}
使OLED屏显示图1和图2显示效果的主程序为:int main(void)
{
u8 i;
Cache_Enable();
HAL_Init();
Stm32_Clock_Init(160,5,2,4);
delay_init(400);
LED_Init();
Lcd_Init();
LCD_Clear(BLACK);
BACK_COLOR=BLACK;
LCD_ShowChinese(28,0,0,32,YELLOW);
LCD_ShowChinese(60,0,1,32,YELLOW);
LCD_ShowChinese(92,0,2,32,YELLOW);
LCD_ShowChinese(20,40,0,16,YELLOW);
LCD_ShowChinese(36,40,1,16,YELLOW);
LCD_ShowChinese(52,40,2,16,YELLOW);
LCD_ShowChinese(68,40,3,16,YELLOW);
LCD_ShowChinese(84,40,4,16,YELLOW);
LCD_ShowChinese(100,40,5,16,YELLOW);
LCD_ShowChinese(116,40,6,16,YELLOW);
LCD_ShowString(0,60,"0.96 TFT SPI",YELLOW);
delay_ms(1000);
LCD_Clear(BLACK);
LCD_ShowString(10,0,"LCD_W:",RED);
LCD_ShowNum(70,0,LCD_W,3,RED);
LCD_ShowString(10,20,"LCD_H:",RED);
LCD_ShowNum(70,20,LCD_H,2,RED);
for(i=0;i<4;i++)
{
LCD_ShowPicture(i*40,40,39+i*40,79);
}
delay_ms(1000);
while(1)
{
LED2(1);
delay_ms(500);
LED2(0);
delay_ms(500);
}
}图1 显示字符
图2 显示图案
在完成了OLED屏的显示驱动后,再有显示的问题就无需完全依赖串口通信了,况且它的表现形式也是串口所无法替代的。
页:
[1]