主要内容

使用串口控制四位七段显示

本示例向您展示如何在BeagleBone Black硬件上使用串行UART来控制四位七段显示器。

简介

BeagleBone Black硬件包括一个硬件串行UART端口。通过串口,可以将支持串口通信的设备直接连接到BeagleBone Black硬件。金宝app有各种各样的传感器,显示器,ADC, DAC等支持串行通信。金宝app通过使用这些设备,您可以向BeagleBone Black项目添加新的功能。

在本例中,我们将集中于通过串行端口控制四位七段显示器。我们将从提供一般的串行通信概述开始,然后重点介绍它所支持的串行通信接口的显示和细节。金宝app我们将学习串行通信设备的MATLAB命令接口,最后通过显示数字和简单字符完成示例。

先决条件

所需的硬件

要运行这个例子,你需要以下硬件:

  • BeagleBone黑色硬件

  • 面包板和跳线电缆

  • SparkFun的四位数七段显示器,带有串行接口

串行通信概述

BeagleBone Black上的串行端口实现了RS-232通信的一个版本,其中使用0/+3.3V TTL逻辑电平而不是+/-12V。RS-232是用于连接数据终端设备(DTE)和DCE数据电路终端设备(DCE)之间的串行二进制单端数据和控制信号的一系列标准。RS-232曾是个人电脑中常见的外围设备。它在很大程度上已被USB所取代。目前,RS-232的TTL逻辑级实现通常用于将低速外设连接到嵌入式系统。

BeagleBone Black硬件在扩展头上有一个暴露的串口。串口有两个信号。发射信号线TXD和接收信号线RXD。支持串行通信的外围设备连接到这些引脚上金宝app。还有其他信号线,如RTS/CTS,但这些很少使用。

RS-232通信没有时钟信号。时钟是由传入的波形推导出来的。传输以一个开始位开始,后面跟着一些数据位(通常是8位),以一个停止位结束。数据速率称为波特率,以比特/秒为单位指定信令速率。

四位数七段显示器概述

SparkFun的四位数七段显示器是具有TTL串行、SPI和I2C接口的四位数字母数字显示器。

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

连接显示

接口显示到BeagleBone黑色硬件,你需要做一些轻焊接。由于我们在本例中使用显示器的串行接口,因此将跳线焊接到显示器的RX、GND和VCC引脚上。您也可以选择焊接一些直男头,以便能够将显示器安装在面包板上进行原型设计。在进一步研究之前,您可能还希望遵循制造商的硬件组装指南。

按照下面所示的电路图将显示器连接到BeagleBone Black硬件。

显示数量

让我们从启用串口4开始。

BBB =小猎犬;enableSerialPort (bbb, 4)

注意,beaglebone对象的AvailableSerialPorts属性被设置为'/dev/ttyO4'。接下来,我们创建一个serialdev对象:

segmentDisp = serialdev(bbb, '/dev/ttyO4', 9600);

第二个参数'/dev/ttyO4'是串口的名称。我们打开这个串口,波特率为9600,这是显示器支持的默认波特率。金宝app根据显示的命令表,发送0 - 0xf范围内的字节将得到一个由要显示的字节表示的十六进制数。光标最初位于位置0(最左边的数字),每显示一个字符就前进一个位置。

写(segmentDisp 0);

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

写(segmentDisp 7);写(segmentDisp hex2dec (' a '));写(segmentDisp hex2dec (b));

执行上面的命令后,您应该在分段显示器上看到'07ab'。

清晰显示屏

要清除显示屏,我们将按照数据表发送'0x76'到显示屏。

写(segmentDisp hex2dec (' 76 '));

设置光标位置

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

write(segmentDisp, [hex2dec('79'), 3]);写(segmentDisp 9);

上面的命令将在显示的最右边的数字位置显示一个'9'。

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

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

clear segmentDisp sd = serialsegmentdisplay(bbb, '/dev/ttyO4');clr (sd);%清除丝网打印(sd, '112');print (sd,“死”);print (sd,“牛肉”);

注意,在创建类之前,我们清除了名为segmentDisp的原始serialdev对象。您可以为每个串行设备创建一个对象。segmentdisplay类在内部创建一个serialdev对象。因此,在实例化segmentdisplay之前,您需要清除MATLAB工作区中连接到display的任何serialdev对象。

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

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

总结

本例介绍了串行通信接口的工作流程。您学习了如何控制一个4位7段显示器来显示十六进制数。