【AT-START-F407测评】+ OLED屏的显示驱动
本帖最后由 jinglixixi 于 2021-1-25 21:25 编辑板载的外设资源稍显单薄,为此首要的任务是为它建立一个人机交互的窗口,这里是使用Arduino接口来接入一个I2C接口的单色OLED 屏。由于显示屏的引脚与Arduino接口存在差异,故将OLED屏的方向做了180度的旋转,以免连线的麻烦,OLED 屏的显示效果如下图所示。 显示效果图OLED 屏与MCU的连接关系为:SCL---PB9SDA---PB8使相关引脚输出高低电平的语句定义如下:#define OLED_SCLK_Set()GPIOB->BSRE = GPIO_Pins_9#define OLED_SCLK_Clr()GPIOB->BRE = GPIO_Pins_9#define OLED_SDIN_Set()GPIOB->BSRE = GPIO_Pins_8#define OLED_SDIN_Clr()GPIOB->BRE = GPIO_Pins_8设置相关引脚为输出功能的配置函数为:void AT32_OLED_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = GPIO_Pins_8|GPIO_Pins_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
由于输出速度比较快,因此相关的辅助函数需添加一点的延时,否则将影响显示,以函数IIC_Start()为例,其修改后的内容为“”void IIC_Start()
{
OLED_SCLK_Set();
Delay_us(1);
OLED_SDIN_Set();
Delay_us(1);
OLED_SDIN_Clr();
Delay_us(1);
OLED_SCLK_Clr();
Delay_us(1);
}
实现字符串显示的函数为:void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
unsigned char j=0;
while (chr!='\0')
{
OLED_ShowChar(x,y,chr,Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}形成显示效果的主程序为:int main(void)
{
AT32_Board_Init();
AT32_OLED_Init();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"AT-START-F407",16);
OLED_ShowString(0,2,"OLED DISPLAY",16);
Delay_ms(1000u);
while(1);
} 有了OLED屏的显示功能,后边的数值显示任务就全交给它了!
这是仿真的I2C
页:
[1]