【上海航芯 ACM32F070开发板+触控功能评估板测评】+OLED屏的显示驱动
[复制链接]
本帖最后由 jinglixixi 于 2022-10-10 19:28 编辑
尽管ACM32F070开发板配有段码LCD显示屏,其显示形式如图1所示。
用该显示屏进行显示具有节能的功效,也适合定向应用的需要,但在一定情况下,用它来显示还是受到一定限制的,例如要进行RTC计时值的显示,就稍感不足,无法一次性显示出全部内容。
图1 显示形式
为此,可利用开发板所提供的Arduino接口来配接一个I2C接口的OLED屏以扩展显示内容。
所用的引脚是PD4和PD5,见图2所示。
其中,SCL接PD4,SDA接PD5。
图2 Arduino接口
对PD4和PD5的引脚配置语句为:
GPIOD_Handle.Pin = GPIO_PIN_4|GPIO_PIN_5;
GPIOD_Handle.Mode = GPIO_MODE_OUTPUT_PP;
GPIOD_Handle.Alternate = GPIO_FUNCTION_0;
HAL_GPIO_Init(GPIOD, &GPIOD_Handle);
该显示屏的初始化函数为:
void OLED_Init(void)
{
OLED_WR_Byte(0xAE,OLED_CMD);
OLED_WR_Byte(0x02,OLED_CMD);
OLED_WR_Byte(0x10,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0x81,OLED_CMD);
OLED_WR_Byte(0xff,OLED_CMD);
OLED_WR_Byte(0xA1,OLED_CMD);
OLED_WR_Byte(0xC8,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xA8,OLED_CMD);
OLED_WR_Byte(0x3f,OLED_CMD);
OLED_WR_Byte(0xD3,OLED_CMD);
OLED_WR_Byte(0x00,OLED_CMD);
OLED_WR_Byte(0xd5,OLED_CMD);
OLED_WR_Byte(0x80,OLED_CMD);
OLED_WR_Byte(0xD9,OLED_CMD);
OLED_WR_Byte(0xF1,OLED_CMD);
OLED_WR_Byte(0xDA,OLED_CMD);
OLED_WR_Byte(0x12,OLED_CMD);
OLED_WR_Byte(0xDB,OLED_CMD);
OLED_WR_Byte(0x40,OLED_CMD);
OLED_WR_Byte(0x20,OLED_CMD);
OLED_WR_Byte(0x02,OLED_CMD);
OLED_WR_Byte(0x8D,OLED_CMD);
OLED_WR_Byte(0x14,OLED_CMD);
OLED_WR_Byte(0xA4,OLED_CMD);
OLED_WR_Byte(0xA6,OLED_CMD);
OLED_WR_Byte(0xAF,OLED_CMD);
OLED_WR_Byte(0xAF,OLED_CMD);
OLED_Clear();
OLED_Set_Pos(0,0);
}
实现字符串显示的函数为:
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++;
}
}
实现图3显示效果的主程序为:
int main(void)
{
System_Init();
app_OLED_Init();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"ACM32F070 TEST",16);
OLED_ShowString(0,2,"OLED Display",16);
while (1);
}
图3 显示效果
有了OLED屏的显示功能,再有相对多样的显示内容就不难解决了。
|