打印
[应用相关]

STM32G070RB探测16-OLED显示

[复制链接]
511|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

今天主要对上边的一个模块进行操作,就是这个OLED模块,就是使用I2C驱动0.96’OLED屏幕,因为不习惯用ST的硬件IIC,所以我直接是用了软件模拟IIC配置IIC端口

添加库文件

我们这里直接使用现成的库,因为是模拟IIC,所以只用修改GPIO驱动即可(驱动在**末尾可以下载)

我们需要4个文件oled.c,oled.h,bmp.h,oledfont.h oled.c:IIC驱动,OLED初始化函数以及显示函数 oled.h:GPIO操作的宏定义 bmp.h:图片取的模 oledfont.h:字模

修改GPIO驱动

view plaincopy to clipboardprint?

  • #define OLED_SCLK_Clr() HAL_GPIO_WritePin(SCL_GPIO_Port,SCL_Pin,GPIO_PIN_RESET) //SCL
  • #define OLED_SCLK_Set() HAL_GPIO_WritePin(SCL_GPIO_Port,SCL_Pin,GPIO_PIN_SET)
  • #define OLED_SDIN_Clr() HAL_GPIO_WritePin(SDA_GPIO_Port,SDA_Pin,GPIO_PIN_RESET); //SDA
  • #define OLED_SDIN_Set() HAL_GPIO_WritePin(SDA_GPIO_Port,SDA_Pin,GPIO_PIN_SET)

编写函数

首先main函数中以用头文件

view plaincopy to clipboardprint?

  • #include "oled.h"
  • #include "bmp.h"

然后初始化OLED屏,添加一个变量和一个数组,让OLED显示变量

view plaincopy to clipboardprint?

  • OLED_Init();
  • uint8_t num = 0;
  • uint8_t buf[3];

然后while(1)中编写程序

view plaincopy to clipboardprint?

  • num++;
  • OLED_Fill(0x00);
  • OLED_ShowCHinese(0u,0u,0);
  • OLED_ShowCHinese(16u,0u,1);
  • OLED_ShowCHinese(32u,0u,2);
  • OLED_ShowCHinese(48u,0u,3);
  • OLED_ShowCHinese(64u,0u,4);
  • OLED_ShowCHinese(80u,0u,5);
  • OLED_P8x16Str(16u,2u,(uint8_t *)"EEPW & STM32");
  • OLED_P8x16Str(0u,4u,(uint8_t *)"variable:");
  • sprintf(buf,"%d",num);
  • OLED_P8x16Str(73u,4u,(uint8_t *)buf);
  • HAL_Delay(5000);
  • OLED_Fill(0x00);
  • Draw_BMP(0u,0u,128u,8u,BMP1);
  • HAL_Delay(5000);

效果如下

下边写一下如何取字模

首先到网上下载这个软件

下载打开

修改选项

点生成字模,生成的字模复制到oledfont.h中Hzk数组里

view plaincopy to clipboardprint?

  • char Hzk[][32]={
  • {0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00},
  • {0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00},/*"电",0*/
  • /* (16 X 16 , 宋体 )*/
  • {0x80,0x82,0x82,0x82,0x82,0x82,0x82,0xE2,0xA2,0x92,0x8A,0x86,0x82,0x80,0x80,0x00},
  • {0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"子",1*/
  • /* (16 X 16 , 宋体 )*/
  • {0x00,0x04,0x84,0x84,0x94,0xE4,0x85,0x86,0x84,0xC4,0xB4,0x84,0x84,0x84,0x80,0x00},
  • {0x80,0x60,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"产",2*/
  • /* (16 X 16 , 宋体 )*/
  • {0x00,0x00,0x00,0x7E,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x00},
  • {0x00,0xFE,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0xFE,0x00,0x00},/*"品",3*/
  • /* (16 X 16 , 宋体 )*/
  • {0x20,0x20,0x20,0xFE,0x20,0x20,0xFF,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x00},
  • {0x00,0x00,0x00,0x7F,0x40,0x40,0x47,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x00,0x00},/*"世",4*/
  • /* (16 X 16 , 宋体 )*/
  • {0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00},
  • {0x08,0x08,0x04,0x84,0x62,0x1E,0x01,0x00,0x01,0xFE,0x02,0x04,0x04,0x08,0x08,0x00},/*"界",5*/
  • /* (16 X 16 , 宋体 )*/
  • };

然后按顺序显示即可

view plaincopy to clipboardprint?

  • OLED_ShowCHinese(0u,0u,0);
  • OLED_ShowCHinese(16u,0u,1);
  • OLED_ShowCHinese(32u,0u,2);
  • OLED_ShowCHinese(48u,0u,3);
  • OLED_ShowCHinese(64u,0u,4);
  • OLED_ShowCHinese(80u,0u,5);


使用特权

评论回复
沙发
onlycook| | 2021-3-3 15:20 | 只看该作者
代码写的非常不错哦

使用特权

评论回复
板凳
内政奇才| | 2021-3-3 15:20 | 只看该作者
是个不错的器件

使用特权

评论回复
地板
麻花油条| | 2021-3-3 15:21 | 只看该作者
学到了 确实不错的

使用特权

评论回复
5
豌豆爹| | 2021-3-3 15:22 | 只看该作者
感谢分享

使用特权

评论回复
6
heimaojingzhang| | 2021-4-2 11:14 | 只看该作者
这是一个多大的屏啊

使用特权

评论回复
7
keaibukelian| | 2021-4-2 11:15 | 只看该作者
屏显效果很不错啊

使用特权

评论回复
8
labasi| | 2021-4-2 11:20 | 只看该作者
iic运行的稳定吗

使用特权

评论回复
9
paotangsan| | 2021-4-2 11:24 | 只看该作者
需要多大的字库啊

使用特权

评论回复
10
renzheshengui| | 2021-4-2 11:26 | 只看该作者
封装起来蛮不错的

使用特权

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

本版积分规则

2055

主题

7458

帖子

10

粉丝