基于I2C协议的OLED显示(利用U82G库)

一、实验目的:
1、了解I2C协议的基本原理和时序协议;
2、掌握0.96寸OLED屏的工作原理,汉字点阵显示原理;
3、掌握开源GUI库U82G在stm32上的移植编译方法,以及图形界面可视化技术。
二、具体过程
利用stm32f103的GPIO管脚、VCC和GND连接 OLED屏的I2C接口,采用cubemx设计一个HAL库程序框架,然后下载U82G源码,针对stm32f103和 0.96寸的I2C接口OLED屏,进行代码裁剪,然后移植到HAL程序程序中,完成OLED的各种显示,包括:
1)U82G的demo例程 2)显示你自己的学号和名字(或网名昵称) 3)掌握上下、左右滑动显示方法4)显示一个图案(比如你的头像肖像),最好有动态效果

test.c

#include "test.h"

#define SEND_BUFFER_DISPLAY_MS(u8g2, ms)\
  do {\
    u8g2_SendBuffer(u8g2); \
    HAL_Delay(ms);\
  }while(0);
 
void testFirst(u8g2_t *u8g2)
{
	int t = 1000;
	u8g2_ClearBuffer(u8g2);
			for (int i = 0; i < 128; i+=16)
		{
				u8g2_DrawStr(u8g2,i, 38, "632207060623");
	SEND_BUFFER_DISPLAY_MS(u8g2,200);
					u8g2_ClearBuffer(u8g2);
		}
					for (int i = 128; i >0 ; i-=16)
		{
				u8g2_DrawStr(u8g2,i, 38, "632207060623");
	SEND_BUFFER_DISPLAY_MS(u8g2,200);
					u8g2_ClearBuffer(u8g2);
		}
		
	SEND_BUFFER_DISPLAY_MS(u8g2,t);
		u8g2_ClearBuffer(u8g2);
	
	
	u8g2_SetFont(u8g2,u8g2_font_wqy12_t_chinese2);

					for (int i = 0; i < 128; i+=16)
		{
	u8g2_DrawUTF8(u8g2,36,i,"情歌");
	SEND_BUFFER_DISPLAY_MS(u8g2,200);
					u8g2_ClearBuffer(u8g2);
		}
							for (int i = 128; i >0 ; i-=16)
		{
	u8g2_DrawUTF8(u8g2,36,i,"情歌");
	SEND_BUFFER_DISPLAY_MS(u8g2,200);
					u8g2_ClearBuffer(u8g2);
		}

			u8g2_ClearBuffer(u8g2);
			u8g2_DrawXBM(u8g2,0, 16, 128, 48, bilibili);
	SEND_BUFFER_DISPLAY_MS(u8g2,t);	
	
}
 
void u8g2DrawTest(u8g2_t *u8g2)
{
	testFirst(u8g2);
}

test.h

#ifndef __TEST_H
#define __TEST_H
 
#include "main.h"
#include "u8g2.h"
 
void testFirst(u8g2_t *u8g2);
void u8g2DrawTest(u8g2_t *u8g2);
 
#endif

main.c

int main(void)
{
 /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */
  u8g2_t u8g2;
  u8g2Init(&u8g2);	
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
       u8g2_FirstPage(&u8g2);
       do
       {
				 draw(&u8g2);
				 u8g2DrawTest(&u8g2);
       } while (u8g2_NextPage(&u8g2));
  }

}

实物图:
请添加图片描述

三.总结

学习到了新东西

移植参考:https://blog.csdn.net/black_sneak/article/details/126312657

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值