IIC协议——OLED屏幕

news/2024/10/25 19:30:09/

1.IIC协议介绍

IIC全称Inter-Integrated Circuit (集成电路总线)  简称I2C
是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式

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

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

构成

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

 2.项目效果

在OLED屏幕上显示字符或者图像

3.IIC协议

就是根据IIC的时序对相应的寄存器写入数据,进行操作。

IIC总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。
起始位,停止位,数据位,速度
这些信号中,起始信号是必需的,结束信号和应答信号

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

 数据发送的时序

4.OLED写命令

 4.1 OLED的寻址模式

寻址模式的寄存器

 页地址模式

 水平地址模式

 行地址(page x)选择

 列地址选择 (分低位设置和高位设置)

主函数最后 用while(1)  卡主,不然会一直设置OLED的屏幕,一直刷新。

5.代码实现- 图

需要配合 字膜提取软件+画图工具(自带)  转换为分辨率位128x64的bmp图像。

#include "reg52.h"	
#include "intrins.h"sbit sda=P0^3;
sbit scl=P0^1;void i2c_start(void);   
void i2c_stop(void);
char ack(void);
void send_messege_i2c(char messege);
void w_cmd_i2c(char cmd);
void w_data_i2c(char data1);
void init_i2c(void);
void clear_oled(void);code char tx[]={
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x01,0x03,0x03,0x03,0x07,0x07,0x05,0x07,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,
0x05,0x0F,0x0F,0x0F,0x07,0x05,0x07,0x05,0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x0F,
0x0F,0x4F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x0F,0x0F,0x1F,0x1F,0x1F,0x1F,
0x1F,0x3F,0x1F,0x1F,0x7F,0x1F,0x1F,0x9F,0x9F,0x3F,0x7F,0x6F,0x6F,0x5F,0x9F,0xBF,
0xBF,0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x1F,0x1F,0x1F,0x3F,0x3F,0x1F,
0xCF,0xEF,0xF7,0xD7,0xDF,0xFB,0xFF,0x9F,0x9E,0x9F,0x8F,0x8F,0x9F,0x9F,0x9F,0xBF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xFC,0xFC,
0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC,0xE0,0xC0,0x80,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x0C,0x44,0x60,0xF5,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xD8,0xFE,0xE7,0xE5,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0x80,0x80,0x00,0x08,0x08,
0xC8,0x98,0x98,0x88,0x80,0x80,0xC0,0x81,0x81,0xC7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xDF,0x87,0x87,0xC3,0xC3,0xA3,0x91,0x91,0x11,0x11,0x19,0x99,0x89,0x09,0x09,
0x01,0x83,0xC3,0xC2,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x37,0x3D,0xBF,0xBF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x20,0x40,0x40,0x40,0x40,0x06,0x06,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x3E,0x7C,0x70,0xE0,0xC3,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,
0x7F,0x7F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x40,0x70,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xC0,0xA0,0xC0,0xC0,0x00,0xC5,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0xC0,0xC0,0x00,0xC0,0xC0,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xDF,0x9F,0x9F,0x1F,0x1F,0x1E,0x9E,0xDE,0xDE,0xDE,0xDE,0xDE,
0xDE,0x1E,0x1C,0x1C,0x1F,0x1F,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,
0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x40,0x40,0x00,0x00,0x00,0x00,0x30,0x08,0x08,0x03,0x80,0x80,0x80,0xF8,0xF8,0xFE,
0xEF,0xC7,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFD,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0xE0,0xEF,0xE0,0xEF,0xE0,0x80,0x0F,0x6F,0x60,0xCF,0xAF,0xBF,
0x23,0x84,0xC0,0xA0,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
0x02,0x04,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x07,0x0F,0x1F,0x3F,0x3F,0x7F,0x7C,0x7C,0xF8,0xF9,0xFB,0xFB,0xFB,0xFB,0xF9,
0xF9,0x78,0x78,0x7C,0x3E,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xE1,0xFF,0xFF,0xFE,0xFE,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x9F,0xBF,0xDF,0xFF,0xFF,0xEF,0xE0,0x98,0x98,0x9A,0x87,0xA7,
0xA7,0x8F,0x8F,0x9F,0x9F,0x9A,0x9E,0x9C,0xFF,0xFB,0xFA,0xFC,0xFC,0xFC,0xEC,0xE8,
0xF8,0xF0,0xB0,0xB0,0xA0,0xE0,0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x20,
0x00,0x00,0x00,0x40,0xC0,0xC0,0x44,0x04,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,
0xE0,0xD0,0xB0,0xF0,0xF8,0xF8,0xB8,0x9C,0xDC,0xDC,0x7E,0xFC,0xE4,0xEC,0xEC,0xF4,
0xF8,0xF8,0xFC,0xFC,0xF4,0xFE,0xFE,0xFE,0xFE,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};    //这是page7的内容void main(void)
{	unsigned char i;unsigned int j;/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/init_i2c();clear_oled();   //清屏函数w_cmd_i2c(0x20);  //选择页寻址模式w_cmd_i2c(0x02);//w_cmd_i2c(0xB0);  //选择page  1011 0xxx//w_cmd_i2c(0x00);    //设置起始地址  低位//w_cmd_i2c(0x10);    //设置起始地址  高位//w_data_i2c(0x80);  //发送数据for(i=0;i<8;i++){w_cmd_i2c(0xB0+i);    //变换page  共有0-7 8个w_cmd_i2c(0x00);    //设置起始地址  低位w_cmd_i2c(0x10);    //设置起始地址  高位//i=3;for(j=128*i; j<(128*(i+1)); j++){   //变换的是tx中的数据w_data_i2c(tx[j]);  //tx中的数据  }}while(1){}
}  
//下面是函数封装void clear_oled(void)
{char i;  int j;for(i=0;i<8;i++){w_cmd_i2c(0xB0+i);    //变换pagew_cmd_i2c(0x00);    //设置起始地址  低位w_cmd_i2c(0x10);    //设置起始地址  高位for(j=0;j<128;j++){w_data_i2c(0x00);  //写0就行  }}}void init_i2c(void)
{w_cmd_i2c(0xAE);//--display offw_cmd_i2c(0x00);//---set low column addressw_cmd_i2c(0x10);//---set high column addressw_cmd_i2c(0x40);//--set start line address w_cmd_i2c(0xB0);//--set page addressw_cmd_i2c(0x81); // contract controlw_cmd_i2c(0xFF);//--128 w_cmd_i2c(0xA1);//set segment remapw_cmd_i2c(0xA6);//--normal / reversew_cmd_i2c(0xA8);//--set multiplex ratio(1 to 64)w_cmd_i2c(0x3F);//--1/32 dutyw_cmd_i2c(0xC8);//Com scan directionw_cmd_i2c(0xD3);//-set display offsetw_cmd_i2c(0x00);//w_cmd_i2c(0xD5);//set osc divisionw_cmd_i2c(0x80);//w_cmd_i2c(0xD8);//set area color mode offw_cmd_i2c(0x05);//w_cmd_i2c(0xD9);//Set Pre-Charge Periodw_cmd_i2c(0xF1);//w_cmd_i2c(0xDA);//set com pin configuartionw_cmd_i2c(0x12);//w_cmd_i2c(0xDB);//set Vcomhw_cmd_i2c(0x30);//w_cmd_i2c(0x8D);//set charge pump enablew_cmd_i2c(0x14);//w_cmd_i2c(0xAF);//--turn on oled panel
}void w_cmd_i2c(char cmd)
{i2c_start();send_messege_i2c(0x78);ack();send_messege_i2c(0x00);ack();send_messege_i2c(cmd);ack();i2c_stop();
}void w_data_i2c(char data1)
{i2c_start();send_messege_i2c(0x78);ack();send_messege_i2c(0x40);ack();send_messege_i2c(data1);ack();i2c_stop();
}void i2c_start(void)
{scl=1;sda=0;	sda=1;  //我的  /*scl=0;  //老师的sda=1;scl=1;*/_nop_();   //sda=0;_nop_();   //scl=0;
}void i2c_stop(void)
{scl=0;sda=0;scl=1;_nop_();   //sda=1;_nop_();   //sda=0;  //老师不要这个
}char ack(void)      //应答信号
{char flag;sda=1;//_nop_();  //老师要的scl=1;_nop_();flag=sda;//_nop_();  //老师要的scl=0;_nop_();return flag;
}void send_messege_i2c(char messege)
{char i;for(i=0;i<8;i++){scl=0;_nop_();   //必要sda= messege & 0x80 ;	//_nop_();  //老师要的scl=1;_nop_();scl=0;messege=messege<<1;}
}

6.编译的注意事项

其中的data 、xdata为ram的中的数据,可以随程序执行变化。
code中为rom中数据,调用后更改不了。5中的图片点阵太大,也不需要更改,编码在code中即可 


http://www.ppmy.cn/news/237041.html

相关文章

把 AI 装进即时通讯,会发生什么?

今年以来&#xff0c;AIGC 技术以“天”为单位快速进化&#xff0c;刷足了存在感。科技公司迅速将 AI 嵌入自家的产品中&#xff0c;追逐 AI 带来的生产力变革&#xff0c;解决日益复杂的需求。从文学到音乐&#xff0c;从绘画到编程&#xff0c;无一领域不受其影响。 在这些领…

【Kubernetes 架构】了解 Kubernetes 网络模型

Kubernetes 网络使您能够在 k8s 网络内配置通信。它基于扁平网络结构&#xff0c;无需在主机和容器之间映射端口。 Kubernetes 网络支持容器化组件之间的通信。这种网络模型的主要优点是不需要在主机和容器之间映射端口。然而&#xff0c;配置 Kubernetes 网络模型并不是一件容…

随机过程与排队论(四)

设有2个红球&#xff0c;4个白球&#xff0c;先将它们分放到甲、乙两个盒子中去&#xff0c;各方3个。设X为甲盒中的红球数&#xff0c;然后再在甲、乙两盒各取一个进行交换。设Y为此时甲盒中的红球数。 求X的分布律。已知X的条件下求Y的分布律。求Y的分布律。 概率空间(Ω…

Web Audio API实现简单变声效果

前言 想在网页中实现实时音频变声效果该如何实现呢&#xff0c;之前遇到这种处理音视频的需求&#xff0c;可能会想到需要借助C代码实现。但是现在随着浏览器性能的提升、web API的丰富&#xff0c;通过浏览器原生的API也可以操作音频数据实现很多复杂的效果&#xff0c;为web音…

AI 提示词工程师:新兴职业的崛起与挑战

AI 提示词工程师&#xff1a;新兴职业的崛起与挑战 随着人工智能技术的飞速发展&#xff0c;越来越多的新兴职业应运而生&#xff0c;尤其是与AI相关的岗位。近年来&#xff0c;一个名为AI 提示词工程师的新兴职业引起了广泛关注。本文将详细介绍这一职业的起源、职责、技能要…

推荐 5 个好玩儿的小项目

近期&#xff0c;每日的开源项目热榜都是 ChatGPT 相关、AI 相关的。说实话&#xff0c;老逛看的也头疼&#xff0c;本期推荐几个不一样的&#xff0c;好玩的小项目。 本期推荐开源项目目录&#xff1a; 1. 在你的 Windows 养小猫 2. 把你的图片生成 ASCII 3. 中国制霸生成器 4…

千兆宽带网接入电脑电脑却只有百兆

解决方法&#xff1a;右键此电脑选择管理 打开设备管理器-网络适配器-Realtek PCle GbE Family Controller 选择高级 将连接速度与双工模式 改为 1.0Gbps 全双工 再将 网络唤醒和关机连接速度改为 不降速 然后点击确定即可。 如何查看是否已改为千兆网 右键桌面右下角网络图标…

阿里云加1M带宽多少钱?加100G硬盘多少钱?

前言 新人买 阿里云 的 云服务器ECS 的时候&#xff0c;发现活动机器的配置非常固定&#xff0c;经常会采用的办法就是先用好新用户身份买配置接近的活动机器&#xff0c;然后深入各级到自己实际需要的配置。这种做法非常好&#xff0c;可以省下一笔开支&#xff01;因为…