STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)

您所在的位置:网站首页 OLED显示屏模块库 STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)

STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)

2024-06-03 07:36| 来源: 网络整理| 查看: 265

STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库

文章目录 STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库一、OLED简单介绍二、CubeMx设置二、加入OLED屏幕驱动1.生成User文件夹2.添加OLED相关文件 三、结果展示

一、OLED简单介绍

1,.OLED是有机发光二极管,由于其具备自发光,不需要背光的特点,被认为是下一代的平面显示器新兴应用技术 2.0.96寸的OLED显示屏幕分辨率为128*64 3.引脚:

GND 电源地VCC 电源正(3~5.5V)SCL OLED 的 D0 脚,在 IIC 通信中为时钟管脚,本篇文章中接PB6SDA OLED 的 D1 脚,在 IIC 通信中为数据管脚,本篇文章中接PB7 二、CubeMx设置

1.选择芯片 在cubemx中选择芯片 2.在RCC中选择外部晶振 在这里插入图片描述 3.在SYS中设置如下 在这里插入图片描述

4.时钟设置为自己的芯片对应的频率(c8t6是72Hz) 在这里插入图片描述

5.I2C设置 配置普通I2C即可 在这里插入图片描述 6.引脚 在这里插入图片描述 根据引脚连接IIC通信的OLED显示屏幕

7.生成代码 在project中生成MDK代码 在这里插入图片描述

在这里插入图片描述 设置完毕后生成即可

二、加入OLED屏幕驱动 1.生成User文件夹

在这里插入图片描述 在这里插入图片描述 点击小方块图标生成新的文件夹

在这里插入图片描述 同时在文件目录下建立同样的文件夹以免混淆

2.添加OLED相关文件

oled.c

#include "oledfont.h" #include "oled.h" #define OLED_ADD 0x78 static void oled_cmd(uint8_t i2c_cmd) { uint8_t *cmd; cmd = &i2c_cmd; HAL_I2C_Mem_Write(&hi2c1, OLED_ADD, 0x00, I2C_MEMADD_SIZE_8BIT, cmd, 1, 100); } static void oled_data(uint8_t i2c_data) { uint8_t *data; data = &i2c_data; HAL_I2C_Mem_Write(&hi2c1, OLED_ADD, 0x40, I2C_MEMADD_SIZE_8BIT, data, 1, 100); } static void oled_origin(uint8_t x, uint8_t y) { oled_cmd(0xb0+y); oled_cmd(((x&0xf0)>>4)|0x10); oled_cmd((x&0x0f)|0x01); } void oled_clear() { uint8_t i,n; for(i=0;i uint8_t m,n; for(m=0;m oled_data(data); } } } void oled_init(void) { HAL_Delay(100); oled_cmd(0xAE); //display off oled_cmd(0x20); //Set Memory Addressing Mode oled_cmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid oled_cmd(0xb0); //Set Page Start Address for Page Addressing Mode,0-7 oled_cmd(0xc8); //Set COM Output Scan Direction oled_cmd(0x00); //---set low column address oled_cmd(0x10); //---set high column address oled_cmd(0x40); //--set start line address oled_cmd(0x81); //--set contrast control register oled_cmd(0xff); //áá?èμ÷?ú 0x00~0xff oled_cmd(0xa1); //--set segment re-map 0 to 127 oled_cmd(0xa6); //--set normal display oled_cmd(0xa8); //--set multiplex ratio(1 to 64) oled_cmd(0x3F); // oled_cmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content oled_cmd(0xd3); //-set display offset oled_cmd(0x00); //-not offset oled_cmd(0xd5); //--set display clock divide ratio/oscillator frequency oled_cmd(0xf0); //--set divide ratio oled_cmd(0xd9); //--set pre-charge period oled_cmd(0x22); // oled_cmd(0xda); //--set com pins hardware configuration oled_cmd(0x12); oled_cmd(0xdb); //--set vcomh oled_cmd(0x20); //0x20,0.77xVcc oled_cmd(0x8d); //--set DC-DC enable oled_cmd(0x14); // oled_cmd(0xaf); //--turn on oled panel oled_full(0x00); } void oled_display_char(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size) { unsigned char c=0,i=0; c=chr-' ';//得到偏移后的值 if(x>128-1){x=0;y=y+2;} if(Char_Size == 16) { oled_origin(x,y); for(i=0;i uint8_t c = 0,i = 0,j = 0; switch(TextSize) { case 1: { while(ch[j] != '\0') { c = ch[j] - 32; if(x > 126) { x = 0; y++; } oled_origin(x,y); for(i=0;i c = ch[j] - 32; if(x > 120) { x = 0; y++; } oled_origin(x,y); for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3