单片机学习小组
直播中

贾虎世

7年用户 1671经验值
私信 关注

STM32F103的IIC接口该怎样去实现呢

OLED是什么?有哪些基本参数呢?
STM32F103的IIC接口该怎样去实现呢?

回帖(1)

夏焕丽

2022-1-21 15:08:31
一、OLED简介

1、简介

2、模型

3、参数

4、接口

二、STM32F103的IIC接口实现

1、任务要求:
(1)显示自己的学号和姓名;
(2)显示AHT20的温度和湿度;
(3)上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。(最好使用硬件刷屏模式)
2、代码获取

3、打开百度网盘下载的文件解压后


打开工程后如图

4、代码修改
(1)打开oledfont.h文件(HARDWARE文件夹里面)

(2)字模生成
打开文件包里的PCtoLCD2002软件
先进行设置

生成需要的字模块

(3)把生成的模块复制到oledfont.h文件相应的地方

5、植入AHT20温湿度模块
(1)AHT20工程库分享

(2)解压后把HARDWARE里面这两个文件夹复制到OLED文件夹模块里面HARDWARE文件夹下

(3)添加到oled工程

(4)添加头文件路径

(5)重定义函数修改(改myiic.c和temhum.c文件里的)

  void IIC_Start(void)改为void IIC_Start1(void)
void IIC_Stop(void)改为void IIC_Stop1(void)
u8 IIC_Wait_Ack(void)改为u8 IIC_Wait_Ack1(void)
temhum.c里面引用的这三个函数都要修改!
6、控制硬件ssd1306实现字体滑动
(2)有参数可知,该OLED自带ssd1306硬件
(3)在ssd1306初始化函数里面加滑动函数

在该函数最后面加

    OLED_WR_Byte(0x2e,OLED_CMD);//关滚动
OLED_WR_Byte(0x2A,OLED_CMD);//29向右,2a向左
OLED_WR_Byte(0x00,OLED_CMD);//A:空字节
OLED_WR_Byte(0x00,OLED_CMD);//B:水平起始页
OLED_WR_Byte(0x00,OLED_CMD);//C:水平滚动速度
OLED_WR_Byte(0x01,OLED_CMD);//D:水平结束页
OLED_WR_Byte(0x2f,OLED_CMD);//开滚动


  注意:发送开始滚屏(2f)前要先传输好显示数据,如果在滚屏的时候传输显示数据RAM中的内容可能被损坏。
7、main.c函数修改
(1)名字、学号输出代码模块

        OLED_ShowCHinese(36,3,0);//鲜
OLED_ShowCHinese(56,3,1);//露
OLED_ShowString(16,6,"631807030226",16);
delay_ms(5000);
OLED_Clear(0);


(2)温湿度输出模块
  
AHT20_Read_CTdata(CT_data);       //²»¾­¹ýCRCУÑ飬ֱ½Ó¶ÁÈ¡AHT20µÄζȺÍʪ¶ÈÊý¾Ý
hum = CT_data[0]*100*10/1024/1024;  //¼ÆËãµÃµ½Êª¶ÈÖµ£¨·Å´óÁË10±¶£©
tem = CT_data[1]*200*10/1024/1024-500;//¼ÆËãµÃµ½Î¶ÈÖµ£¨·Å´óÁË10±¶£©
OLED_ShowCHinese(0,2,0);//ʪ
OLED_ShowCHinese(16,2,1);//¶È
OLED_ShowCHinese(32,2,0);//:
OLED_ShowNum(48,2,hum/10,2,16);
OLED_ShowChar(62,2,'%',16);
OLED_ShowCHinese(0,4,0);//ÎÂ
OLED_ShowCHinese(16,4,1);//¶È
OLED_ShowCHinese(32,4,0);//:
OLED_ShowNum(48,4,tem/10,2,16);
OLED_ShowChar(62,4,'C',16);
delay_ms(5000);
OLED_Clear(0);
(3)滑动字模块

OLED_ShowCHinese(0,3,2);
OLED_ShowCHinese(16,3,3);
OLED_ShowCHinese(32,3,4);
OLED_ShowCHinese(48,3,5);
OLED_ShowCHinese(64,3,6);
OLED_ShowCHinese(80,3,7);
OLED_ShowCHinese(96,3,8);
OLED_ShowCHinese(112,3,9);
OLED_ShowCHinese(128,3,10);
OLED_ShowCHinese(144,3,11);
OLED_ShowCHinese(160,3,12);
OLED_ShowCHinese(176,3,13);
OLED_ShowCHinese(192,3,14);
    delay_ms(5000);
OLED_Clear(0);


  注意定义数组和变量

8、连接oled和stm32核心板(IIC接口),再通过串口转接线连接电脑,烧录即可。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分