[STM32U0] STM32U083测评】测评之五:驱动OLED测评

[复制链接]
 楼主| abner_ma 发表于 2024-4-28 17:18 | 显示全部楼层 |阅读模式
<
#申请原创#   今天用STM32U0驱动一款IIC 接口的OLED:OLED,即有机发光二极管( Organic Light Emitting Diode)。 OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。LCD 都需要背光,而 OLED 不需要,因为它是自发光的。这样同样的显示 OLED 效果要来得好一些。分辨率确可以做到很高。


1.png



    根于PCB定义: 本屏所用的驱动 IC 为 SSD1306;其具有内部升压功能;所以在设计的时候不需要再专一设计升压电路;SSD1306 的每页包含了128 个字节,总共 8 页,这样刚好是 128*64 的点阵大小。这点与 1.3 寸 OLED 驱动 IC SSD1106稍有不同,SSD1106 每页是 132 个字节,也是 8 页。所以在用 0.96 寸 OLED 移植 1.3 寸 OLED 程序的时候需要将 0.96 寸的显示地址向右偏移 2,这样显示就正常了;否则在用 1.3 寸的时候 1.3寸屏右边会有 4 个像素点宽度显示不正常或是全白,这点大家注意一下。其它的 SSD1306 和SSD1106 区别不大。
2.png

3.jpg
采用PB8 PB9作为IIC控制PIN
先用普通口模拟:

  1. static void MX_GPIO_Init(void)
  2. {
  3.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  4. /* USER CODE BEGIN MX_GPIO_Init_1 */
  5. /* USER CODE END MX_GPIO_Init_1 */

  6.   /* GPIO Ports Clock Enable */
  7.   __HAL_RCC_GPIOB_CLK_ENABLE();

  8.   /*Configure GPIO pin Output Level */
  9.   

  10.   /*Configure GPIO pins : SDA_Pin SCL_Pin */
  11.   GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
  12.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  13.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  14.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
  15.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  16.        
  17.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

  18. /* USER CODE BEGIN MX_GPIO_Init_2 */
  19. /* USER CODE END MX_GPIO_Init_2 */
  20. }

GPIO操作:
  1. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//RESET重置的意思   // GPIO_ResetBits(GPIOB,GPIO_Pin_10)//SCL
  2. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//RESET重置的意思 GPIO_SetBits(GPIOB,GPIO_Pin_10)

  3. #define OLED_SDIN_Clr()  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET);//GPIO_ResetBits(GPIOB,GPIO_Pin_11)//SDA
  4. #define OLED_SDIN_Set()  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET);//GPIO_SetBits(GPIOB,GPIO_Pin_11)
main
  1. void SystemClock_Config(void);
  2. static void MX_GPIO_Init(void);
  3. /* USER CODE BEGIN PFP */

  4. /* USER CODE END PFP */

  5. /* Private user code ---------------------------------------------------------*/
  6. /* USER CODE BEGIN 0 */

  7. /* USER CODE END 0 */

  8. /**
  9.   * [url=home.php?mod=space&uid=247401]@brief[/url]  The application entry point.
  10.   * @retval int
  11.   */
  12. int main(void)
  13. {
  14.                 u8 t;

  15.                 HAL_Init();


  16.                 SystemClock_Config();


  17.                 MX_GPIO_Init();
  18.     HAL_Delay(100);
  19.                 OLED_Init();                        //初始化OLED  
  20.    HAL_Delay(100);
  21.                 OLED_Clear()  ;       
  22.        
  23.                 t=' ';
  24.                 OLED_ShowCHinese(0,0,0);//
  25.                                 OLED_ShowCHinese(18,0,1);//
  26.                 OLED_ShowCHinese(36,0,2);//
  27.                 OLED_ShowCHinese(54,0,3);//
  28.                 OLED_ShowCHinese(72,0,4);//
  29.                 OLED_ShowCHinese(90,0,5);//
  30.                 OLED_ShowCHinese(108,0,6);//

  31.   while (1)
  32.   {
  33.                 OLED_Clear();
  34.                 OLED_ShowCHinese(0,0,0);//
  35.                 OLED_ShowCHinese(18,0,1);//
  36.                 OLED_ShowCHinese(36,0,2);//
  37.                 OLED_ShowCHinese(54,0,3);//
  38.                 OLED_ShowCHinese(72,0,4);//
  39.                 OLED_ShowCHinese(90,0,5);//
  40.                 OLED_ShowCHinese(108,0,6);//
  41.                 OLED_ShowString(6,3,"I LOVE 21IC TOO",16);
  42.                 //OLED_ShowString(8,2,"ZHONGJINGYUAN");  
  43.          //        OLED_ShowString(20,4,"2014/05/01");  
  44.                 OLED_ShowString(0,6,"ASCII:",16);  
  45.                 OLED_ShowString(63,6,"CODE:",16);  
  46.                 OLED_ShowChar(48,6,t,16);//显示ASCII字符          
  47.                 t++;
  48.                 if(t>'~')t=' ';
  49.                 OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值        
  50.                 HAL_Delay(300);
  51.                 HAL_Delay(300);

  52.                         HAL_Delay(300);
  53.                 HAL_Delay(300);
  54.                 HAL_Delay(300);
  55.                 OLED_DrawBMP(0,0,128,8,BMP1);  //图片显示(图片显示慎用,生成的字表较大,会占用较多空间,FLASH空间8K以下慎用)
  56.                 HAL_Delay(300);
  57.                 HAL_Delay(300);
  58.                 HAL_Delay(300);
  59.                 HAL_Delay(300);
显示效果:

4.jpg

5.jpg


纠结的那些年 发表于 2024-8-31 16:18 | 显示全部楼层
OLED 显示器中的每个像素点都是独立发光的,因此不需要背光源。这使得 OLED 屏幕可以更薄,并且在黑色或深色显示时,能提供更高的对比度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

95

主题

181

帖子

3

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