用51单片机IIC协议OLED显示汉字

接线如下:

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

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

 特点:

·简单性和有效性。

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

·多主控(multimastering)

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

构成:

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

传输数据:

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

时序图如下:

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

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

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

IIC数据发送时序:

 

OLED写入命令或数据 

 

OLED初始化:向OLDE写入下面指令

display off (0xae)

set low column address (0x00)

set high column address (0x10)

set start line address (0x40)

set page address (0xb0)

contract control (0x81)

send 0xff (多字节指令)

set segment remap (0xa1)

set normal/reverse (0xa6)

set multiplex ratio (1 to 64) (0xa8 )

set duty 1/32 (0x3f)

com scan direction (0xc8)

set display offset (0xd3)

send 0x00

set osc division (0xd5)

send 0x80

set area color mode off (0xd8)

send 0x05

set pre-charge period (0xd9)

send 0xf1

set com pin configuration (0xda)

send 0x12

set Vcomh (0xdb)

send 0x30

set charge pump enable (0x8d)

send 0x14

turn on oled panel(0xaf)

OLED屏行列分布:

OLED显示屏是一个128列*64行的点阵,垂直方向由8个PAGE控制,每个PAGE控制8个点阵。

选择PAGE时,向OLED写入指令0xBx(b1011 0xxx); 

列寻址:

由两个bit控制128列点阵

在头部显示:向OLED写入指令0x00

            向OLED写入指令0x10

在尾部显示:向OLED写入指令0x0F

            向OLED写入指令0x17

数据:(显示一个点)

 

 OLED的三种地址模式:

 

 

 

OLED清屏函数,解决雪花屏问题:

 附上源码和效果图

  • 13
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
51单片机iic协议oled代码可以通过以下步骤实现: 1. 首先,我们需要包含51单片机的头文件和对应的引脚定义,以便于程序中使用。 ```c #include <reg52.h> sbit SCL=P2^1; // 定义SCL引脚 sbit SDA=P2^0; // 定义SDA引脚 ``` 2. 然后,我们需要定义iic协议中的起始条件、停止条件和数据传输函数。 ```c void iic_start() // IIC起始条件 { SDA=1; SCL=1; Delay5us(); SDA=0; Delay5us(); SCL=0; } void iic_stop() // IIC停止条件 { SDA=0; Delay5us(); SCL=1; Delay5us(); SDA=1; } void iic_writebyte(unsigned char dat) // 写一个字节 { unsigned char i; for(i=0;i<8;i++) { SDA=(bit)(dat&0x80); dat<<=1; SCL=1; Delay5us(); // 调整延时时间,保证IIC操作正常 SCL=0; } SDA=1; SCL=1; Delay5us(); SCL=0; } ``` 3. 最后,我们可以示范如何使用iic协议oled屏幕进行通信,并将需要显示的内容写入oled屏幕的数据寄存器。 ```c void oled_write_cmd(unsigned char cmd) // 向OLED写控制命令 { iic_start(); iic_writebyte(0x78); // OLED I2C Write address iic_writebyte(0x00); // Control byte: Co = 0, D/C# (bit0 write command) iic_writebyte(cmd); // Write command iic_stop(); } void oled_write_data(unsigned char dat) // 向OLED写数据 { iic_start(); iic_writebyte(0x78); // OLED I2C Write address iic_writebyte(0x40); // Control byte: Co = 0, D/C# (bit0 write data) iic_writebyte(dat); // Write data iic_stop(); } ``` 通过以上代码,我们可以实现51单片机基于iic协议控制oled屏幕的显示,从而实现各种图形和文本的显示效果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值