[应用方案] 【新定义MCU开发板测评】SPI+OLED显示

[复制链接]
 楼主| 51xlf 发表于 2022-12-17 09:11 | 显示全部楼层 |阅读模式
<
LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示 OLED 效果要来得好一些。0.96 寸 OLED 有黄蓝,白,蓝三种颜色可选;其中黄蓝是屏上 1/4 部分为黄光,下 3/4 为蓝;而且是 固定区域显示固定颜色,颜色和显示区域均不能修改;白光则为纯白,也就是黑底白字
对于双色的OLED用来做显示屏只最好的选择,他的驱动方式是一样的,代码都一样就是地测不一样而已。
搜狗截图22年12月17日0904_1.png
这个就是看开发者自己的的选择了。我选择的是6PIN的OLED,使用SPI驱动的。
驱动芯片是SSD1306,使用的是中景园提供的代码。
这里直接定义使用的管脚,后面容易对代码进行移植操作。
使用的是P2的引脚
  1. #define LCD_SCLK_GPIO_Port GPIO2
  2. #define LCD_SCLK_Pin GPIO_PIN_0

  3. #define LCD_SDIN_GPIO_Port GPIO2
  4. #define LCD_SDIN_Pin  GPIO_PIN_1

  5. #define LCD_RES_GPIO_Port GPIO2
  6. #define LCD_RES_Pin   GPIO_PIN_2

  7. #define LCD_DC_GPIO_Port GPIO2
  8. #define LCD_DC_Pin GPIO_PIN_3
需要对每一个IO口进行操作,也是用的是宏定义。
  1. #define OLED_SCL_Clr() GPIO_WriteLow(LCD_SCLK_GPIO_Port,LCD_SCLK_Pin)//SCL
  2. #define OLED_SCL_Set() GPIO_WriteHigh(LCD_SCLK_GPIO_Port,LCD_SCLK_Pin)

  3. #define OLED_SDA_Clr() GPIO_WriteLow(LCD_SDIN_GPIO_Port,LCD_SDIN_Pin)//SDA
  4. #define OLED_SDA_Set() GPIO_WriteHigh(LCD_SDIN_GPIO_Port,LCD_SDIN_Pin)

  5. #define OLED_RES_Clr() GPIO_WriteLow(LCD_RES_GPIO_Port,LCD_RES_Pin)//RES
  6. #define OLED_RES_Set() GPIO_WriteHigh(LCD_RES_GPIO_Port,LCD_RES_Pin)

  7. #define OLED_DC_Clr() GPIO_WriteLow(LCD_DC_GPIO_Port,LCD_DC_Pin)//DC
  8. #define OLED_DC_Set() GPIO_WriteHigh(LCD_DC_GPIO_Port,LCD_DC_Pin)
还需要初始化IO口输出
  1. GPIO_Init(LCD_SCLK_GPIO_Port, LCD_SCLK_Pin, GPIO_MODE_OUT_PP); //
  2.         GPIO_Init(LCD_SDIN_GPIO_Port, LCD_SDIN_Pin, GPIO_MODE_OUT_PP); //
  3.         GPIO_Init(LCD_RES_GPIO_Port, LCD_RES_Pin, GPIO_MODE_OUT_PP); //
  4.         GPIO_Init(LCD_DC_GPIO_Port, LCD_DC_Pin, GPIO_MODE_OUT_PP); //
中景园提供的初始化寄存器的代码
  1. OLED_RES_Clr();
  2.     delay_ms(200);
  3.     OLED_RES_Set();

  4.     OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
  5.     OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
  6.     OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
  7.     OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  8.     OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
  9.     OLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current Brightness
  10.     OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  11.     OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  12.     OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
  13.     OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  14.     OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
  15.     OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  16.     OLED_WR_Byte(0x00,OLED_CMD);//-not offset
  17.     OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
  18.     OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  19.     OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
  20.     OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  21.     OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
  22.     OLED_WR_Byte(0x12,OLED_CMD);
  23.     OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
  24.     OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
  25.     OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  26.     OLED_WR_Byte(0x02,OLED_CMD);//
  27.     OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
  28.     OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
  29.     OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
  30.     OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7)
  31.     OLED_Clear();
  32.     OLED_WR_Byte(0xAF,OLED_CMD);
这里是main函数里面的代码
  1.   OLED_Init();
  2.         OLED_Clear();
  3.         //OLED_ShowStringCN(0,20,"Redfine",1);
  4.            OLED_ShowString(7,0,"Redfine",8,1); //表示x,y开始显示字符串
  5.                  OLED_Refresh();
这是自己写的联合中英文混合显示
  1. void OLED_ShowStringCN(u8 x,u8 y,u8 *chr,u8 mode)
  2. {   unsigned short k,x0;
  3.     unsigned char i,j;
  4.     while(*chr) {
  5.         if((*chr) < 128)
  6.         {
  7.             OLED_ShowChar(x,y,*chr,16,mode);
  8.             x+=8;
  9.             chr++;
  10.         } else {

  11.             for (k=0; k<hz16_num; k++)
  12.             {
  13.                 if ((hz16[k].Index[0]==*(chr))&&(hz16[k].Index[1]==*(chr+1)))
  14.                 {
  15.                     for(i=0; i<16; i++)
  16.                     {
  17.                         for(j=0; j<8; j++)
  18.                         {
  19.                             if(hz16[k].Msk[i*2]&(0x80>>j))        OLED_DrawPoint(x+j,y+i,mode);
  20.                             else {
  21.                                 OLED_DrawPoint(x+j,y+i,!mode);;
  22.                             }
  23.                         }
  24.                         for(j=0; j<8; j++)
  25.                         {
  26.                             if(hz16[k].Msk[i*2+1]&(0x80>>j))        OLED_DrawPoint(x+j+8,y+i,mode);
  27.                             else
  28.                             {
  29.                                 OLED_DrawPoint(x+j+8,y+i,!mode);;
  30.                             }
  31.                         }
  32.                     }
  33.                 }
  34.             }
  35.             chr+=2;
  36.             x+=16;
  37.         }

  38.     }
  39. }


pixhw 发表于 2023-1-5 11:30 | 显示全部楼层
最大的刷新速度是多少?              
nomomy 发表于 2023-1-5 12:37 | 显示全部楼层
这个OLED是否自带字库呢?              
mickit 发表于 2023-1-5 16:33 | 显示全部楼层
怎么显示汉字?              
janewood 发表于 2023-1-5 18:26 | 显示全部楼层
这个硬件spi吗?              
chenjun89 发表于 2023-1-5 23:19 来自手机 | 显示全部楼层
OLED的显示看起来更自然些
olivem55arlowe 发表于 2023-2-2 10:47 | 显示全部楼层
怎么移植gui到oled上呢?              
burgessmaggie 发表于 2023-2-4 20:21 | 显示全部楼层
这个可以驱动彩色的屏幕的吗?              
sdlls 发表于 2023-2-4 22:24 | 显示全部楼层
宏定义实现的官方的代码吧?              
mnynt121 发表于 2023-2-5 13:29 | 显示全部楼层
这个有硬件的spi的吗?              
 楼主| 51xlf 发表于 2023-2-5 14:26 | 显示全部楼层
SPI+OLED的驱动速度怎么样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

9919

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部

547

主题

9919

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部