本帖最后由 jinglixixi 于 2021-1-25 21:25 编辑
板载的外设资源稍显单薄,为此首要的任务是为它建立一个人机交互的窗口,这里是使用Arduino接口来接入一个I2C接口的单色OLED 屏。由于显示屏的引脚与Arduino接口存在差异,故将OLED屏的方向做了180度的旋转,以免连线的麻烦,OLED 屏的显示效果如下图所示。 显示效果图 OLED 屏与MCU的连接关系为: SCL---PB9 SDA---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[j]!='\0')
{
OLED_ShowChar(x,y,chr[j],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屏的显示功能,后边的数值显示任务就全交给它了!
|