#申请原创# 今天用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);
复制代码 显示效果:
|