打印
[STM32U0]

STM32U083测评】测评之五:驱动OLED测评

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






    根于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 区别不大。



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

static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  

  /*Configure GPIO pins : SDA_Pin SCL_Pin */
  GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH ;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
       
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);

/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}

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

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

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

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

                HAL_Init();


                SystemClock_Config();


                MX_GPIO_Init();
    HAL_Delay(100);
                OLED_Init();                        //初始化OLED  
   HAL_Delay(100);
                OLED_Clear()  ;       
       
                t=' ';
                OLED_ShowCHinese(0,0,0);//
                                OLED_ShowCHinese(18,0,1);//
                OLED_ShowCHinese(36,0,2);//
                OLED_ShowCHinese(54,0,3);//
                OLED_ShowCHinese(72,0,4);//
                OLED_ShowCHinese(90,0,5);//
                OLED_ShowCHinese(108,0,6);//

  while (1)
  {
                OLED_Clear();
                OLED_ShowCHinese(0,0,0);//
                OLED_ShowCHinese(18,0,1);//
                OLED_ShowCHinese(36,0,2);//
                OLED_ShowCHinese(54,0,3);//
                OLED_ShowCHinese(72,0,4);//
                OLED_ShowCHinese(90,0,5);//
                OLED_ShowCHinese(108,0,6);//
                OLED_ShowString(6,3,"I LOVE 21IC TOO",16);
                //OLED_ShowString(8,2,"ZHONGJINGYUAN");  
         //        OLED_ShowString(20,4,"2014/05/01");  
                OLED_ShowString(0,6,"ASCII:",16);  
                OLED_ShowString(63,6,"CODE:",16);  
                OLED_ShowChar(48,6,t,16);//显示ASCII字符          
                t++;
                if(t>'~')t=' ';
                OLED_ShowNum(103,6,t,3,16);//显示ASCII字符的码值        
                HAL_Delay(300);
                HAL_Delay(300);

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






使用特权

评论回复
沙发
纠结的那些年| | 2024-8-31 16:18 | 只看该作者
OLED 显示器中的每个像素点都是独立发光的,因此不需要背光源。这使得 OLED 屏幕可以更薄,并且在黑色或深色显示时,能提供更高的对比度。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

83

主题

156

帖子

3

粉丝