STM32F103外接I2C SSD1306 64x32 LCD仅半屏显示故障排查
64x32 SSD1306 LCD显示异常问题排查与解决
问题背景
将64x32分辨率的SSD1306 LCD通过I2C连接至STM32F103,尝试在屏幕上显示文本与线条时,仅能看到一半内容,怀疑初始化代码存在问题。
初始化代码
SSD1306_WRITECOMMAND(0xAE); //display off SSD1306_WRITECOMMAND(0x20); //Set Memory Addressing Mode SSD1306_WRITECOMMAND(0x00); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid SSD1306_WRITECOMMAND(0xB0); //Set Page Start Address for Page Addressing Mode,0-7 SSD1306_WRITECOMMAND(0xC0); //mirror vert SSD1306_WRITECOMMAND(0x40); //--set start line address SSD1306_WRITECOMMAND(0x81); //--set contrast control register SSD1306_WRITECOMMAND(0xFF); SSD1306_WRITECOMMAND(0xA0); //--set segment re-map 0 to 127 SSD1306_WRITECOMMAND(0xA6); //--set normal display SSD1306_WRITECOMMAND(0xA8); //--set multiplex ratio(1 to 64) SSD1306_WRITECOMMAND(0x1F); //32 active line on display SSD1306_WRITECOMMAND(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content SSD1306_WRITECOMMAND(0xD3); //-set display offset SSD1306_WRITECOMMAND(0x00); //-not offset SSD1306_WRITECOMMAND(0xD5); //--set display clock divide ratio/oscillator frequency SSD1306_WRITECOMMAND(0xF0); //--set divide ratio SSD1306_WRITECOMMAND(0xD9); //--set pre-charge period SSD1306_WRITECOMMAND(0x22); // SSD1306_WRITECOMMAND(0xDA); //--set com pins hardware configuration SSD1306_WRITECOMMAND(0x12); SSD1306_WRITECOMMAND(0xDB); //--set vcomh SSD1306_WRITECOMMAND(0x20); //0x20,0.77xVcc SSD1306_WRITECOMMAND(0x8D); //--set DC-DC enable SSD1306_WRITECOMMAND(0x14); // SSD1306_WRITECOMMAND(0xAF); //--turn on SSD1306 panel /* Clear screen */ SSD1306_Fill(SSD1306_COLOR_BLACK); /* Update screen */ SSD1306_UpdateScreen(); /* Set default values */ SSD1306.CurrentX = 0; SSD1306.CurrentY = 0;
主程序代码
char* strin3 = "01234567"; SSD1306_Init(); SSD1306_GotoXY(0,0); SSD1306_Puts(strin3, &Font_7x10, 1); SSD1306_UpdateScreen(); SSD1306_DrawLine(1,1,63,31,1); SSD1306_UpdateScreen();
故障现象
- 屏幕仅显示一半内容
- 发送0xA5指令(全屏点亮,忽略RAM内容)时屏幕可完全填充
- 调整垂直偏移、垂直镜像等参数,仅能改变显示位置,但无法让完整内容显示
最终解决方案
该小型显示屏的有效水平内存区域位于SSD1306默认128x64内存区域的中间,将所有显示数据输出到32至96列的内存区域后,屏幕显示恢复正常。
内容的提问来源于stack exchange,提问作者TeachmeDaddy
相关产品推荐
相关产品推荐

