主要内容

使用I2C控制四位数七段显示

这个例子向你展示了如何在Raspberry Pi®硬件上使用I2C外设来控制一个四位数的七段显示器。

介绍

树莓派硬件包括一个I2C外设。通过I2C外设,您可以将支持I2C协议的设备直接连接到Raspberry Pi硬件。金宝app有各种各样的传感器,显示器,ADC, DAC等支持I2C通信。金宝app通过使用这些设备,您可以为您的树莓派项目添加新的功能。

在本例中,我们将集中讨论通过I2C控制一个四位数的七段显示。我们将首先概述I2C通信,然后重点介绍它支持的I2C命令的显示和细节。金宝app我们将学习MATLAB用于I2C设备的命令界面,最后通过显示数字和简单的字符来完成示例。

先决条件

所需的硬件

要运行此示例,您将需要以下硬件:

  • 覆盆子π硬件

  • 一种至少具有1A输出的电源

  • 面包板电缆和跨接电缆

  • 来自SparkFun的带有I2C接口的四位七段显示器

I2C的概述

集成电路(I2C)是一种多主机串行单端通信协议,用于将低速外设连接到嵌入式系统。

I2C使用两条双向线路,串行数据线(SDA)和串行时钟(SCL)。这两条线都是用电阻拉上去的。I2C总线上的每个从设备被分配一个7位或10位地址。具有10位地址的I2C设备很少,并且不被树莓派硬件所支持。金宝app使用7位地址空间,最多可以将128个设备连接到I2C总线。I2C总线速度范围从慢速模式的100kbits /s到高速模式的400kbits /s。

树莓派硬件有两个I2C总线。根据您的电路板的型号和版本,可能有一个I2C总线不可用。2 × 13扩展引脚上的I2C引脚用1.8 KOhm电阻拉起。

查看可用的I2C总线

在缺省的Raspbian Linux映像中,I2C外设是使能的。您可以通过检查Raspberry Pi对象的AvailableI2CBuses属性来查找Raspberry Pi硬件上可用的I2C总线。

清晰的零售物价指数零售物价指数= raspi ();零售物价指数。AvailableI2CBuses

检查rpi的AvailableI2CBuses属性应该会在MATLAB命令提示符中列出至少一条I2C总线。

四位数七段显示概述

来自SparkFun的4位7段显示是一个带有TTL串行、SPI或I2C接口的4位字母数字显示。

该设备可以显示数字、大部分字母和少数特殊字符。支持小数点、撇号和冒号。金宝app显示亮度可调整。显示器有一个简单的控制接口,主设备(本例中是Raspberry Pi硬件)通过I2C总线向显示设备发出带有参数的命令。例如,要清除display master发送一个'0x76'的命令字节。为了将光标设置到特定的位置,master发送一个命令字节'0x79',后面跟着一个表示光标位置(0到3)的字节。下表显示了一个完整的命令列表。

连接显示

要将显示器接口到树莓派硬件,你需要做一些轻焊接。由于我们在本例中使用的是显示器的I2C接口,所以将跳线焊接到显示器的SDA、SCL、GND和VCC引脚。您也可以选择焊接一些直的公头,以便能够安装在面包板上的显示器的原型。在进一步之前,您可能还想遵循制造商的硬件组装指南。

按照下图所示的电路图将显示器连接到树莓派硬件。

扫描I2C总线

一旦将显示器连接到树莓派硬件,就可以测试树莓派硬件是否在I2C总线上看到它了。

清晰的零售物价指数零售物价指数= raspi ();i = 1:length(rpi. availablei2cbuses) scanI2CBus(rpi, rpi. availablei2cbuses {i})结束

scanI2CBus()方法扫描给定的I2C总线,并返回总线上设备地址的单元数组。如果你正确地将显示器连接到树莓派硬件,上面的MATLAB代码片段应该返回一个设备地址'0x71'。这是显示器的出厂默认地址。

显示一个号码

让我们从创建一个i2cdev对象开始,该对象将允许我们使用I2C与显示器对话。

segmentDisp = i2cdev(零售物价指数,' < I2C总线>”“0 x71”);

其中''是显示检测到的I2C总线的名称。记住,根据你的树莓派硬件的版本,总线名称可能会改变。因此,在构造segmentDisp对象时,请确保提供了正确的I2C总线。

根据显示的命令表,发送范围为0 - 0xf的字节将得到由要显示的字节表示的十六进制数。光标最初位于位置0,即最左边的数字,每次显示一个字符时向前移动一个位置。

写(segmentDisp 0);

这应该在显示的最左边的数字上显示一个'0'。让我们再显示几个字符。

写(segmentDisp 7);写(segmentDisp hex2dec (“一个”));写(segmentDisp hex2dec (“b”));

执行以上命令后,您应该会看到分段显示中显示了'07ab'。

清晰的显示屏幕

要清除显示屏幕,我们将跟踪数据表并将'0x76'发送到显示。

写(segmentDisp hex2dec (“76”));

设置光标位置

若要在特定光标位置显示特定字符,可能需要设置光标位置。

写(segmentDisp [hex2dec (“79”), 2);写(segmentDisp 9);

上面的命令将在显示的第二个数字位置显示一个'9'。

高级:创建一个用于段显示的MATLAB类

你可以把我们学到的关于分段显示的所有东西放在一起,并为它创建一个MATLAB类。这个MATLAB类具有设置光标位置、清除显示屏幕、打印数字等方法。例如,我们创建了这样一个类。下面是如何使用这个类的示例。

清晰的segmentDispsd = rpi .internal.segmentdisplay(rpi, )clr(sd);%清除屏幕打印(sd,“112”);打印(sd,“死”);打印(sd,“牛肉”);

注意,在创建类之前,我们清除了原始的i2cdev对象segmentDisp。允许为每个I2C设备创建单个对象。segmentdisplay类在内部创建一个i2cdev对象。因此,在实例化segmentdisplay之前,您需要从MATLAB工作区中清除连接到该显示器的任何i2cdev对象。

segmentdisplay类试图减少由于清除/重新显示数字而引起的闪烁。它通过缓存显示的字符并只更新那些不同的字符来做到这一点。并不是分段显示所支持的所有功能都实金宝app现了。您可以使用我们创建的MATLAB类作为您自己实现的起点。下面是一个实现向上计数器的MATLAB代码片段:

N = 1000;延迟= 0.01;clr (sd);print(sd,num2str(i));暂停(延迟);结束

总结

这个示例介绍了使用I2C接口的工作流。您学习了如何控制一个4位数的7段显示器来显示十六进制数。