你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
jinglixixi 发布时间:2020-8-18 14:09
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

收藏 评论0 发布时间:2020-8-18 14:09

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版