在ESP32-S2-Kaluga-1 套件中配有LCD显示屏,可用于人机交互的需要,但在使用例程进行编译和下载过程中一种报错无法进行正常使用。
为此,先自行完成一个OLED屏的显示驱动以为后续的开发测试打下基础,然后再将完成的开发移到LCD屏来显示,从而不影响设计的进度。
这里所使用的OLED屏是采用I2C接口来工作,故占用引脚资源较少。
为减少对后续开发的影响,该OLED屏所用的引脚关系如下:
GPIO15---SCL
GPIO9---SDA
对所用引脚的配置函数为:
staticvoidconfigure_Oled(void)
{
gpio_reset_pin(SCL_GPIO);
gpio_set_direction(SCL_GPIO, GPIO_MODE_OUTPUT);
gpio_reset_pin(SDA_GPIO);
gpio_set_direction(SDA_GPIO, GPIO_MODE_OUTPUT);
}
该显示屏的初始化函数为:
static 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);
}
实现字符串显示的函数为:
voidOLED_ShowString(uint8_t x,uint8_ty,char *chr,uint8_tChar_Size)
{
unsignedchar j=0;
while (chr[j]!='\0')
{
OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
实现如下显示效果的主程序为:
voidapp_main(void)
{
configure_Oled();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"ESP32-S2-Kaluga",16);
OLED_ShowString(16,2,"OLED Display",16);
OLED_ShowString(16,6,"by:jinglixixi",16);
while (1);
}
显示效果图
|