stm32驱动lcd1602至少要几个io口

stm32驱动lcd1602至少要几个io口?
oled呢?
什么时候采用OLED更合适

STM32驱动LCD1602至少需要几个IO口?

STM32驱动LCD1602时,最少需要6个IO口。其中:

4个数据线(D4,D5,D6,D7)
1个寄存器选择线(RS)
1个使能线(EN)
这种配置即为4位模式。若采用8位模式,则需使用10个IO口。

OLED屏需要多少个IO口?

对于OLED显示器驱动,主要依赖以下两种通信协议:

I2C:至少需要2个IO口(SDA和SCL)
SPI:至少需要3个IO口(MOSI, SCK, CS),如果需要控制DC信号,需要加一个IO口(共4个)
什么时候采用OLED更合适?

OLED相较于LCD具有以下优势:

更高的对比度和更宽的视角
更快的响应速度
能更好地在低温环境下工作
更薄,更轻巧
低功耗
因此,在对显示质量、对比度、低温性能、快速响应以及轻巧程度有较高要求的场景下,采用OLED会更合适。

  • 看下这篇博客,也许你就懂了,链接:基于STM32实现OLED屏显(显示数据、温湿度、滚动长字符)
  • 除此之外, 这篇博客: 基于STM32的0.96寸OLED屏显示学号姓名和滚动显示中的 (三)姓名中文的点阵(16*16) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.由于程序并不需要显示所有的中文,所以将对应需要的文字添加到程序就可以了。

    在这里插入图片描述.2.名字对应的储存格式
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    使用STM32驱动LCD1602需要4个IO口,分别是RS、RW、E和D0-D7。

    当使用OLED时,需要2个IO口,分别是SCL(时钟线)和SDA(数据线)。

    选择OLED比较合适的情况是需要显示更精细的图形、需要更高的分辨率和更广的视角、需要更低的耗电量和更小的尺寸。此外,OLED还具有响应速度快、颜色鲜艳、对比度高等优点。

    以下是使用STM32驱动LCD的代码:

    #include "stm32f10x.h"
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_tim.h"
    #include "stm32f10x_usart.h"
    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    
    #define RS_Pin GPIO_Pin_0 
    #define RW_Pin GPIO_Pin_1
    #define E_Pin GPIO_Pin_2
    
    void GPIO_Configuration(void)
    {
      GPIO_InitTypeDef GPIO_InitStructure;
    
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
      //配置RS RW E引脚
      GPIO_InitStructure.GPIO_Pin = RS_Pin | RW_Pin | E_Pin;         
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;           
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
      GPIO_Init(GPIOA, &GPIO_InitStructure);
    
      //配置D0-D7引脚
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 |
                                    GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
      GPIO_Init(GPIOB, &GPIO_InitStructure);
    }
    
    void LCD_Init(void)
    {
      GPIO_SetBits(GPIOA, RW_Pin); //RW = 1
      GPIO_SetBits(GPIOA, E_Pin);  //E = 1
    
      Delay(20); //延时等待>
    
      GPIO_SetBits(GPIOA, RS_Pin); //RS = 1
    
      GPIO_ResetBits(GPIOB, GPIO_Pin_13); //D7 = 0
      GPIO_ResetBits(GPIOB, GPIO_Pin_12); //D6 = 0
      GPIO_ResetBits(GPIOB, GPIO_Pin_11); //D5 = 0
      GPIO_ResetBits(GPIOB, GPIO_Pin_10); //D4 = 0
    
      GPIO_ResetBits(GPIOA, E_Pin); //E = 0
    
      Delay(20); //延时等待>
    
      GPIO_SetBits(GPIOA, E_Pin); //E = 1
    
      GPIO_SetBits(GPIOB, GPIO_Pin_10); //D4 = 1
    
      GPIO_ResetBits(GPIOA, E_Pin); //E = 0
    
      Delay(10); //延时等待>
    
      //执行显控函数场
    
      //清屏函数
    }
    
    void LCD_WriteCmd(uint8_t cmd)
    {
      GPIO_ResetBits(GPIOA, RW_Pin); //RW = 0
      GPIO_ResetBits(GPIOA, RS_Pin); //RS = 0
    
      GPIOB->ODR = (GPIOB->ODR&0x00FF) | (cmd<<8);
    
      GPIO_SetBits(GPIOA, E_Pin); //E = 1
      GPIO_ResetBits(GPIOA, E_Pin); //E = 0
    
      Delay(10); //延时等待>
    }
    
    void LCD_WriteData(uint8_t data)
    {
      GPIO_ResetBits(GPIOA, RW_Pin); //RW = 0
      GPIO_SetBits(GPIOA, RS_Pin); //RS = 1
    
      GPIOB->ODR = (GPIOB->ODR&0x00FF) | (data<<8);
    
      GPIO_SetBits(GPIOA, E_Pin); //E = 1
      GPIO_ResetBits(GPIOA, E_Pin); //E = 0
    
      Delay(10); //延时等待>
    }
    
    void LCD_Clear(void)
    {
      LCD_WriteCmd(0x01);
      Delay(10); //延时等待>
    }
    
    void LCD_SetCursor(uint8_t row, uint8_t col)
    {
      uint8_t addr = 0x80;
    
      if(row == 0) addr += col;
      else if(row == 1) addr += col + 0x40;
    
      LCD_WriteCmd(addr);
    }
    
    void LCD_WriteString(uint8_t row, uint8_t col, char* str)
    {
      LCD_SetCursor(row, col);
    
      while(*str)
      {
        LCD_WriteData(*str++);
      }
    }
    
    int main(void)
    {
      RCC_Configuration();
      GPIO_Configuration();
    
      LCD_Init();
    
      LCD_WriteString(0, 0, "Hello, World!");
    
      while(1)
      {
    
      }
    }
    

    以下是使用OLED的代码:

    #include "stm32f10x.h"
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    #include "OLEDFont.h"
    #include "OLED.h"
    
    int main(void)
    {
      OLED_Init();
    
      OLED_Clear();
    
      OLED_ShowCHinese(0, 0, 0, 1);//显示中文“姓”
      OLED_ShowCHinese(18, 0, 1, 2);//显示中文“名”
    
      OLED_ShowString(1, 0, "Hello, World!");
    
      while(1)
      {
    
      }
    }