搜索
查看: 1782|回复: 0

[原创] 关于NUCLEO L496ZG的彩色0.96'OLED屏图片显示例程分享

[复制链接]

该用户从未签到

63

主题

1887

帖子

17

蝴蝶豆

论坛元老

最后登录
2023-2-2
发表于 2020-8-18 14:09:41 | 显示全部楼层 |阅读模式
OLED 屏有多种形式,既有单色、双色屏,也有彩色屏;既有I2C接口的,也有SPI接口的。
本次使用的是SPI接口的彩色屏,其分辨率是160*80点像素,16位色彩。
OLED 屏与AC7811的连接关系如下:
            SCL    ---PA5
             SDA    ---PA6
            RES    ---PA7
            DC    ---PD14
            CS     ---PD15
            BLK    ---F12


定义相关引脚输出高低电平的语句为:
#define OLED_SCLK_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_RESET) //CLK
#define OLED_SCLK_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_SET)

#define OLED_SDIN_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_RESET) //DIN
#define OLED_SDIN_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6, GPIO_PIN_SET)

#define OLED_RST_Clr()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7, GPIO_PIN_RESET) //RES
#define OLED_RST_Set()HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7, GPIO_PIN_SET)

#define OLED_DC_Clr()HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14, GPIO_PIN_RESET) //DC
#define OLED_DC_Set()HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14, GPIO_PIN_SET)

#define OLED_CS_Clr() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15, GPIO_PIN_RESET) //CS
#define OLED_CS_Set() HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15, GPIO_PIN_SET)

#define OLED_BLK_Clr() HAL_GPIO_WritePin(GPIOF,GPIO_PIN_12, GPIO_PIN_RESET) //BLK
#define OLED_BLK_Set() HAL_GPIO_WritePin(GPIOF,GPIO_PIN_12, GPIO_PIN_SET)


OLED屏的初始化函数为:
  1. void Lcd_Init(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStruct;

  4.   /* GPIO Ports Clock Enable */
  5.   __HAL_RCC_GPIOH_CLK_ENABLE();
  6.   __HAL_RCC_GPIOA_CLK_ENABLE();
  7.   __HAL_RCC_GPIOC_CLK_ENABLE();
  8.   __HAL_RCC_GPIOD_CLK_ENABLE();
  9.   __HAL_RCC_GPIOB_CLK_ENABLE();
  10.          __HAL_RCC_GPIOF_CLK_ENABLE();

  11.   /*Configure GPIO pin Output Level */
  12.   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);

  13.   /*Configure GPIO pin Output Level */
  14.   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_12, GPIO_PIN_SET);

  15.   /*Configure GPIO pin Output Level */
  16.   HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14|GPIO_PIN_15, GPIO_PIN_SET);

  17.   GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
  18.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  19.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  20.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  21.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  22.   GPIO_InitStruct.Pin = GPIO_PIN_12;
  23.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  24.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  25.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  26.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  27.   GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15;
  28.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  29.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  30.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  31.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  32.   OLED_RST_Clr();
  33.   HAL_Delay(200);
  34.   OLED_RST_Set();
  35.   HAL_Delay(200);
  36.         
  37.   LCD_WR_REG(0x11);
  38.   HAL_Delay(100);

  39.   LCD_WR_REG(0x21);

  40.   LCD_WR_REG(0xB1);
  41.   LCD_WR_DATA8(0x05);
  42.   LCD_WR_DATA8(0x3A);
  43.   LCD_WR_DATA8(0x3A);

  44.   LCD_WR_REG(0xB2);
  45.   LCD_WR_DATA8(0x05);
  46.   LCD_WR_DATA8(0x3A);
  47.   LCD_WR_DATA8(0x3A);

  48.   LCD_WR_REG(0xB3);
  49.   LCD_WR_DATA8(0x05);
  50.   LCD_WR_DATA8(0x3A);
  51.   LCD_WR_DATA8(0x3A);
  52.   LCD_WR_DATA8(0x05);
  53.   LCD_WR_DATA8(0x3A);
  54.   LCD_WR_DATA8(0x3A);

  55.   LCD_WR_REG(0xB4);
  56.   LCD_WR_DATA8(0x03);

  57.   LCD_WR_REG(0xC0);
  58.   LCD_WR_DATA8(0x62);
  59.   LCD_WR_DATA8(0x02);
  60.   LCD_WR_DATA8(0x04);

  61.   LCD_WR_REG(0xC1);
  62.   LCD_WR_DATA8(0xC0);

  63.   LCD_WR_REG(0xC2);
  64.   LCD_WR_DATA8(0x0D);
  65.   LCD_WR_DATA8(0x00);

  66.   LCD_WR_REG(0xC3);
  67.   LCD_WR_DATA8(0x8D);
  68.   LCD_WR_DATA8(0x6A);  

  69.   LCD_WR_REG(0xC4);
  70.   LCD_WR_DATA8(0x8D);
  71.   LCD_WR_DATA8(0xEE);

  72.   LCD_WR_REG(0xC5);  /*VCOM*/
  73.   LCD_WR_DATA8(0x0E);   

  74.   LCD_WR_REG(0xE0);
  75.   LCD_WR_DATA8(0x10);
  76.   LCD_WR_DATA8(0x0E);
  77.   LCD_WR_DATA8(0x02);
  78.   LCD_WR_DATA8(0x03);
  79.   LCD_WR_DATA8(0x0E);
  80.   LCD_WR_DATA8(0x07);
  81.   LCD_WR_DATA8(0x02);
  82.   LCD_WR_DATA8(0x07);
  83.   LCD_WR_DATA8(0x0A);
  84.   LCD_WR_DATA8(0x12);
  85.   LCD_WR_DATA8(0x27);
  86.   LCD_WR_DATA8(0x37);
  87.   LCD_WR_DATA8(0x00);
  88.   LCD_WR_DATA8(0x0D);
  89.   LCD_WR_DATA8(0x0E);
  90.   LCD_WR_DATA8(0x10);

  91.   LCD_WR_REG(0xE1);
  92.   LCD_WR_DATA8(0x10);
  93.   LCD_WR_DATA8(0x0E);
  94.   LCD_WR_DATA8(0x03);
  95.   LCD_WR_DATA8(0x03);
  96.   LCD_WR_DATA8(0x0F);
  97.   LCD_WR_DATA8(0x06);
  98.   LCD_WR_DATA8(0x02);
  99.   LCD_WR_DATA8(0x08);
  100.   LCD_WR_DATA8(0x0A);
  101.   LCD_WR_DATA8(0x13);
  102.   LCD_WR_DATA8(0x26);
  103.   LCD_WR_DATA8(0x36);
  104.   LCD_WR_DATA8(0x00);
  105.   LCD_WR_DATA8(0x0D);
  106.   LCD_WR_DATA8(0x0E);
  107.   LCD_WR_DATA8(0x10);
  108.   LCD_WR_REG(0x3A);
  109.   LCD_WR_DATA8(0x05);
  110.   LCD_WR_REG(0x36);
  111.   LCD_WR_DATA8(0x78);
  112.   LCD_WR_REG(0x29);
  113. }
复制代码

图片显示函数为:
  1. void LCD_ShowPicture1(u16 x1,u16 y1,u16 x2,u16 y2)
  2. {
  3.          int i;
  4.            LCD_Address_Set(x1,y1,x2,y2);
  5.            for(i=0;i<3808;i++)
  6.            {
  7.                             LCD_WR_DATA8(gImage_jsj[i*2]);
  8.                             LCD_WR_DATA8(gImage_jsj[i*2+1]);
  9.            }                     
  10. }

  11. void LCD_ShowPicture2(u16 x1,u16 y1,u16 x2,u16 y2)
  12. {
  13.            int i;
  14.            LCD_Address_Set(x1,y1,x2,y2);
  15.            for(i=0;i< 12800;i++)
  16.            {
  17.                             LCD_WR_DATA8(gImage_moled[i*2]);
  18.                             LCD_WR_DATA8(gImage_moled[i*2+1]);
  19.            }
  20. }
复制代码

实现显示测试的主程序为:
  1. int main()
  2. {
  3.          float t=0;
  4.          u8 i;
  5.          HAL_Init();
  6.          SystemClock_Config();
  7.          Lcd_Init();
  8.          LCD_Clear(0x043C);
  9.          LCD_ShowPicture1(0,0,55,67);
  10.          HAL_Delay(1000);
  11.          LCD_ShowPicture2(0,0,159,79);
  12.          while(1);
  13. }
复制代码

1.jpg
显示计算机图标

2.jpg
显示彩色图片

工程代码:

0.96_OLED.rar

3.77 MB, 下载次数: 3, 下载积分: ST金币 -1

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 08:28 , Processed in 0.147040 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表