IIC协议初识及OLED写入指令、数据和显示的代码实现

本文详细介绍了IIC协议,包括其概述、起始和终止信号、应答信号以及数据发送的时序。此外,还讲解了如何通过IIC协议向OLED显示器写入指令和数据,以及实现OLED显示点和图片的方法。内容涵盖从理论到实践的完整流程。
摘要由CSDN通过智能技术生成

目录

一、IIC协议概述

二、IIC协议起始和终止信号 

三、应答信号

四、数据发送的时序

五、OLED写入指令和数据

六、OLED显示一个点的思路

七、OLED显示一个点的代码

八、OLED列地址

九、OLED显示图片


一、IIC协议概述

1、IIC概述

IIC(集成电路总线)是由飞利浦公司发明的通讯总线,用于连接微控制器及其外围设备,IIC属于半双工同步通信方式

IIC的数据线只有一根,就是SDA,同一时间不管发送还是接收,只能有一个方向进行操作

2、特点

(1)简单性和有效性

IIC的最大传输速率是10kbps(面试考点)

串口的最大传输速率是20kbps

(2)多主控

其中任何能够进行发送和接收的设备都可以成为主总线,一个主控能够控制信号的传输和时钟频率,当然,在任何时间点上只能有一个主控

3、构成

IIC串行总线一般有两根信号线,一根是双向的数据SDA,另一根是时钟线SCL,其中时钟信号是由主控器件产生,所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上,对于并联在一条总线上的每个IC都有唯一的地址

二、IIC协议起始和终止信号 

1、IIC屏幕

2、IIC屏幕与C51单片机的连接方式

IIC        单片机

GND     GND

VCC      5V

SCL      能正常收发数据的引脚(如P0^1)

SDA      能正常收发数据的引脚(如P0^3)

3、IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号

(1)起始信号、终止信号

起始、终止信号时序逻辑分析

起始信号:SDA信号从高电平下降到低电平

终止信号:SDA信号从低电平上升到高电平

起始信号时序逻辑分析                                       终止信号时序逻辑分析

SCL = 1;                                                             SCL = 1; 

SDA = 1;                                                             SDA = 0;

延时4.7μs                                                           延时4μs

SDA = 0;                                                             SDA = 1;

延时4μs                                                              延时4.7μs

三、应答信号

发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号

应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节

应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功

应答信号时序逻辑分析及函数封装 

char IIC_ACK(){

    char flag;
    sda = 1;   //释放数据线
    _nop_();
    scl = 1;   //高电平的状态
    _nop_();
    flag = sda;  //读取应答信号,若读取的信号为低电平时,说明是有效应答信号
    _nop_();
    scl = 0;   //低电平的状态
    _nop_();
    
    return flag;
}

四、数据发送的时序

当SCL = 1(高电平)时,进行数据传送,并且这时数据不允许翻转

当SCL = 0(低电平)时,数据允许翻转

发送字节的函数封装

void IIC_Send_Byte(char dataSend){  //发送字节的函数

	int i;
	for(i=0;i<8;i++){           //发送的一个字节等于8个bit,所以要循环8次
		scl = 0;                //scl拉低,让sda做好数据准备
		sda = dataSend & 0x80;  //0x80 = 1000 0000 获得dataSend的最高位,给sda
		_nop_();                //发送数据建立时间  
		scl = 1;                //scl拉高进行数据传输
		_nop_();                //数据发送的时间
		scl = 0;                //数据发送完毕,scl拉低
		_nop_();
		dataSend = dataSend << 1;    //每发送完一个数据,dataSend的数据就向左移动一位
	}
}

五、OLED写入指令和数据

写命令/数据的代码

1、start()

2、写入 b0111 1000 0x78

3、ACK

4、Control byte:(0)(0) 000000写入命令     (0)(1) 000000写入数据

5、ACK

6、写入指令/数据

7、ACK

8、stop

六、OLED显示一个点的思路

1、如何显示一个点

有三种方式:分别为页地址模式、水平地址模式和垂直地址模式,可以通过下表格进行配置

下面重点说一下页地址模式:

页地址模式也是默认配置的地址模式

选择页地址模式的配置命令:

1、发送cmd:0x20;

2、发送cmd:0x02;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值