“OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【上】

2024-02-10 14:52

本文主要是介绍“OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【上】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

"OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。"#IIC协议【上】

    • 前言
    • 预备知识
    • 1.IIC协议初识
      • 1.1 IIC协议概述
      • 1.2 IIC协议的特点
      • 1.3 IIC协议的构成
    • 2. IIC起始信号和终止信号
      • 2.1起始型号和终止信号时序图分析
      • 2.2起始信号函数和终止信号函数代码
      • 2.3完整程序代码
    • 3. IIC协议ACK函数封装
      • 3.1应答信号简介
      • 3.2应答信号时序图分析
      • 3.3应答信号函数代码
      • 3.4完成程序代码
    • 4. IIC协议发送一个字节的函数封装
      • 4.1 IIC协议发送时序图分析
      • 4.2 IIC协议发送一个字节的算法思想。
      • 4.3函数代码
      • 4.4完整程序代码
    • 5.OLED写入指令和数据
      • 5.1 OLED写入指令和数据手册详解
      • 5.2根据手册内容得OLED写指令和数据函数
    • 6. OLED显示一个点的思路
      • 6.1 OLED屏幕的组成
      • 6.2 OLDE屏幕地址结构图
      • 6.3 OLED单页地址结构体
      • 6.4 OLED的三种地址寻址模式
      • 6.5 OLED页地址模式选择
      • 6.6写入 0000 1000
    • 结束语

前言

  本篇博文介绍的是用51单片机的 IIC 协议【上】(OLED屏幕),包含IIC协议初识,IIC起始信号和终止信号,IIC协议ACK函数封装,IIC协议发送一个字节的函数封装,OLED写入指令和数据,OLED显示一个点的思路。看到这篇博文的朋友,可以先赞再看吗?

预备知识

  一、基本电路标识识别和接线,例如VCC,GND。
  二、电脑基本操作复制粘贴
  三、准备软件FastStone Capture,会简单操作(此软件需要的评论区评论)
  四、数字电子时序图的识别
  五、一点点专业英语积累
  六、C变量
  七、基本输入输出
  八、流程控制
  九、函数

  十、指针
  十一、字符串

  如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!

1.IIC协议初识

1.1 IIC协议概述

  IIC全称Inter-Integrated Circuit (集成电路总线)

  是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式

1.2 IIC协议的特点

  • 简单性和有效性。

  由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件

  • 多主控

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

1.3 IIC协议的构成

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

在这里插入图片描述

2. IIC起始信号和终止信号

2.1起始型号和终止信号时序图分析

在这里插入图片描述

2.2起始信号函数和终止信号函数代码

void IICStart()                  //IIC起始信号函数
{SCL = 1;                       //根据起始信号时序图,SCL一直为高电平SDA = 1;                       //根据起始信号时序图阴影部分,SDA先是高电平_nop_();                       //_nop_()寒素执行时间为5微秒,并不是1微秒,原因是调用函数时有进出栈操作//此时在这里,根据起始信号时序图可知需要延时》4.7微秒SDA = 0;                       //根据起始信号时序图阴影部分,SDA此时为低电平_nop_();                       //延时5微秒
}void IICStop()                   //IIC终止信号函数
{SCL = 1;                       //根据起始信号时序图,SCL一直为高电平SDA = 0;                       //根据起始信号时序图阴影部分,SDA先是低电平_nop_();                       //延时5微秒SDA = 1;                       //根据起始信号时序图阴影部分,SDA此时为高电平_nop_();                       //延时5微秒
}

2.3完整程序代码

#include "reg52.h"
#include "intrins.h"sbit SCL = P0^1;                   //把SCL接单片机P0.1口
sbit SDA = P0^3;                   //把SDA接单片机P0.3口void IICStart()                    //IIC起始信号函数
{SCL = 1;                       //根据起始信号时序图,SCL一直为高电平SDA = 1;                       //根据起始信号时序图阴影部分,SDA先是高电平_nop_();                       //_nop_()寒素执行时间为5微秒,并不是1微秒,原因是调用函数时有进出栈操作//此时在这里,根据起始信号时序图可知需要延时》4.7微秒SDA = 0;                       //根据起始信号时序图阴影部分,SDA此时为低电平_nop_();                       //延时5微秒
}void IICStop()                     //IIC终止信号函数
{SCL = 1;                       //根据起始信号时序图,SCL一直为高电平SDA = 0;                       //根据起始信号时序图阴影部分,SDA先是低电平_nop_();                       //延时5微秒SDA = 1;                       //根据起始信号时序图阴影部分,SDA此时为高电平_nop_();                       //延时5微秒
}void main()
{IICStart();IICStop();
}

3. IIC协议ACK函数封装

3.1应答信号简介

  发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位ACK,简称应答位),表示接收器已经成功地接收了该字节
  应答信号为高电平时,规定为非应答位NACK),一般表示接收器接收该字节没有成功

3.2应答信号时序图分析

在这里插入图片描述

3.3应答信号函数代码

char IIC_ACK()
{char flag;SDA = 1;                         //释放数据线_nop_();SCL = 1;_nop_();flag = SDA;_nop_();SCL = 0;_nop_();return flag;
}

3.4完成程序代码

#include "reg52.h"
#include "intrins.h"sbit SCL = P0^1;                   //把SCL接单片机P0.1口
sbit SDA = P0^3;                   //把SDA接单片机P0.3口char IIC_ACK()
{char flag;SDA = 1;                         //释放数据线_nop_();SCL = 1;_nop_();flag = SDA;_nop_();SCL = 0;return flag;
}void main()
{char i;i = IIC_ACK();
}

4. IIC协议发送一个字节的函数封装

4.1 IIC协议发送时序图分析

在这里插入图片描述

4.2 IIC协议发送一个字节的算法思想。

  从上面的时序图分析中可知是发送一个位的数据,那么发送一个字节也就是8位数据就需要发送8次一个位的数据。从高位开始发,每次发送的数据必须是当前数据的最高位。可以用与上0x80解决,但这又衍生出一个问题,0x80只能发送8位数据的最高位,那怎么办才能将数据往左边移动呢?这可以用移位运算解决。

  这样的算法思想便可以使通过IIC协议发送一个字节的数据。

4.3函数代码

void IICSendByte(char cdata)
{char i;for(i=0; i<8; i++ ){   	SCL = 0;                       //scl拉低,让sda做好数据准备SDA = cdata & 0x80;            //0x80 = 1000 0000获得cdata的最高位,给sda_nop_();                       //发送建立数据时间SCL = 1;                       //SCL被拉高开始发送数据_nop_();											 //数据发送时间SCL = 0;                       //发送完数据被拉低_nop_();cdata = cdata << 1;}
}

4.4完整程序代码

#include "reg52.h"
#include "intrins.h"sbit SCL = P0^1;                   //把SCL接单片机P0.1口
sbit SDA = P0^3;                   //把SDA接单片机P0.3口void IICSendByte(char cdata)
{char i;for(i=0; i<8; i++ ){   	SCL = 0;                       //scl拉低,让sda做好数据准备SDA = cdata & 0x80;            //0x80 = 1000 0000获得cdata的最高位,给sda_nop_();                       //发送建立数据时间SCL = 1;                       //SCL被拉高开始发送数据_nop_();											 //数据发送时间SCL = 0;                       //发送完数据被拉低_nop_();cdata = cdata << 1;}
}void main()
{char i;IICSendByte(i);
}

5.OLED写入指令和数据

5.1 OLED写入指令和数据手册详解

在这里插入图片描述

5.2根据手册内容得OLED写指令和数据函数

void OledWriteCmd(char Cmd)
{//1.startIICStart();//2.写入从机地址 b0111 1000 0x78IICSendByte(0x78);//3.ACKIIC_ACK();//4.cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IICSendByte(0x00);//5.ACKIIC_ACK();//6. 写入指令/数据IICSendByte(Cmd);//7.ACKIIC_ACK();//8.STOPIICStop();
}void OledWriteData(char Data)
{//1.startIICStart();//2.写入从机地址 b0111 1000 0x78IICSendByte(0x78);//3.ACKIIC_ACK();//4.cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IICSendByte(0x40);//5.ACKIIC_ACK();//6. 写入指令/数据IICSendByte(Data);//7.ACKIIC_ACK();//8.STOPIICStop();
}

6. OLED显示一个点的思路

6.1 OLED屏幕的组成

  OLED屏幕是由128×64像素点构成,也就是128×64个小灯珠构成。

6.2 OLDE屏幕地址结构图

在这里插入图片描述

  从地址结构图可知,OLED将128×64像素点分成了7个大组,每组为128×8个像素点。每组的名字被命名为*页。

6.3 OLED单页地址结构体

在这里插入图片描述

6.4 OLED的三种地址寻址模式

  • 页地址模式

在这里插入图片描述

  • 水平地址模式

在这里插入图片描述

  • 垂直地址模式(少用)

在这里插入图片描述

6.5 OLED页地址模式选择

在这里插入图片描述

  配置指令如下:

  图中有红框处前面的地址有两行。

  第一行命令为:0x20

  第二行命令为:0x02 (可不用配,默认就为页地址)

6.6写入 0000 1000

  • 一个字节负责一个Page的列显示
640 列1 列2 列3 列124 列125 列126 列127 列
Page0bit00行0
bit11行0
bit22行0
bit33行1
bit44行0
bit55行0
bit66行0
bit77行0
Page18到 15行
Page216到 23行
Page3
Page4
Page5
Page6

结束语

  很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!

这篇关于“OLED屏幕,色彩绚丽,画面清晰,让每一帧都生动无比。“#IIC协议【上】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697398

相关文章

笔记本电脑屏幕模糊?6招恢复屏幕清晰!

在数字化时代的浪潮中,笔记本电脑已成为我们生活、学习和工作中不可或缺的一部分。然而,当那曾经清晰明亮的屏幕逐渐变得模糊不清时,无疑给我们的使用体验蒙上了一层阴影。屏幕模糊不仅影响视觉舒适度,更可能对我们的工作效率和眼睛健康构成威胁。 遇到笔记本电脑屏幕模糊的情况时我们应该如何解决?本文将与大家分享6个简单易懂的解决方法。 方法一:调整Windows分辨率 电脑屏幕模糊显示不清晰怎

探索蓝牙协议的奥秘:用ESP32实现高质量蓝牙音频传输

蓝牙(Bluetooth)是一种短距离无线通信技术,广泛应用于各种电子设备之间的数据传输。自1994年由爱立信公司首次提出以来,蓝牙技术已经经历了多个版本的更新和改进。本文将详细介绍蓝牙协议,并通过一个具体的项目——使用ESP32实现蓝牙音频传输,来展示蓝牙协议的实际应用及其优点。 蓝牙协议概述 蓝牙协议栈 蓝牙协议栈是蓝牙技术的核心,定义了蓝牙设备之间如何进行通信。蓝牙协议

【杂记-浅谈DHCP动态主机配置协议】

DHCP动态主机配置协议 一、DHCP概述1、定义2、作用3、报文类型 二、DHCP的工作原理三、DHCP服务器的配置和管理 一、DHCP概述 1、定义 DHCP,Dynamic Host Configuration Protocol,动态主机配置协议,是一种网络协议,主要用于在IP网络中自动分配和管理IP地址以及其他网络配置参数。 2、作用 DHCP允许计算机和其他设备通

温湿度采集及OLED显示

目录 软件I2C和硬件I2C每隔2秒钟采集一次温湿度数据,显示到OLED上,同时通过串口发送到上位机的“串口助手”软件 软件I2C和硬件I2C "I2C"代表Inter-Integrated Circuit,是一种用于在数字电路之间进行通信的串行通信协议。软件I2C和硬件I2C是两种实现这种协议的方式。 软件I2C是通过软件来模拟I2C通信协议的实现方式。在这种情况下,微控制

33个jQuery与CSS3实现的绚丽鼠标悬停效果

只要你有创意,完全可以使用CSS3来实现漂亮的动效,当然如果配合jQuery,这样会更加强大,实现更多高级绚丽的动画效果。鼠标hover效果是很常用的,虽然很细微的东西,但网站的细节注定的网站的体验,所以也不要忽视这些小细节。 今天设计达人网整理了33个使用jQuery与CSS3实现绚丽的鼠标悬停效果,有些是纯CSS3的,这些效果你完全可以用在你的网页上,让网站获得更好的体验。 Anim

视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享

目录 一、视频监控平台介绍 (一)概述 (二)视频接入能力介绍 (三)功能介绍 二、JT/T905协议介绍 (一)概述 (二)主要内容 1、设备要求 2、业务功能要求 3、技术功能要求 4、性能要求 5、接口要求 6、设备通信协议与数据格式 三、代码和解释 (一)代码和注释 (二)函数功能说明 1. 头文件保护 2. 包含必要的头文件 3. 引入命名空间std

计算机网络协议常考点!!!

应用层协议 HTTP协议 基于TCP协议,是一种用于传输超文本和多媒体内容的协议,主要是为浏览器之前的通信而设计的; get请求和post请求区别 请求参数位置不同:get会将请求参数放在URL后面并通过&运算符连接,而post提交会将请求参数放在请求体里; 请求数据量不同:get的请求参数会受到浏览器对URL最大长度的限制,而post是将请求参数放在请求体中,可以请求大量数据; 安全

网络编程篇:HTTP协议

一.预备知识 在客户端访问服务端时,要用ip+port,但是在日常用户访问服务端的时候,并不会直接使用ip,而是使用域名,比如:百度(www.baidu,com)。                                                                                    在浏览器处理时,会将域名解析为对应的ip+port。

rtp与rtcp协议详解

目录: 1 RTP概述 1.1 是什么RTP1.2 RTP的应用环境 2 RTP详解 2.1 RTP的协议层次 2.1.1 传输层的子层2.1.2 应用层的一部分 2.2 RTP的封装2.3 RTCP的封装2.4 RTP的会话过程 3 相关的协议 3.1 实时流协议RTSP3.2 资源预定协议RSVP 4 常见的疑问5 实现方案6 参考资料 1 RTP概述 1.1 是什么RTP

RTSP协议,这个写的不错,赚了

1. RTSP连接的建立过程       RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话。       首先创建RTSP服务器(具体实现类是DynamicRTSPServer),在创建过程中,先建立Socket(ourSocket)在TCP的554端口进行监听,然后把连接处理函数句柄(RTSPSer