×

将您的Arduino板变成16位IO端口

消耗积分:2 | 格式:zip | 大小:0.15 MB | 2022-12-07

mintsy

分享资料个

描述

用于 16 位 IO 端口的Arduino库

您的 Arduino 板变成 16 位 IO 端口

标题听起来很有趣?或者没有?

你们都会想知道,Arduino UNO 或 NANO(或其他类似的 arduino 板)有 ATMega328 板载微控制器,这是一个 8 位设备。那么它如何产生16位输出或接受16位输入呢?

我们也都知道,arduino使用“digitalWrite()”函数给出数字输出,通过“ digitalRead () ”函数获取数字输入但是使用这两个功能,它可以从任何一个引脚提供输出或获取输入——意味着一次它只能向单个引脚提供输出或从单个引脚获取输入。那么它如何同时从16个管脚输出或接受输入呢?

如果我们可以将 16 个 Arduino 板引脚组合(组合)在一起会怎么样?意味着,通过板载 8 位微控制器,arduino 可以提供 16 位输出和/或可以获得 16 位输入。

现在我觉得这听起来很有趣?

因此,在这里我介绍了 arduino 的 16 位 IO 端口(输入输出端口)库。使用这个库,可以将 16 位数据直接发送到配置为组合 16 位端口的任何 arduino 板引脚,或者可以从这些配置的引脚获得 16 位输入。该库将 arduino 的任意 16 个引脚组合在一起,作为 16 位 IO 端口。只需选择任意 16 个 arduino 引脚组合为 16 位端口,并将其数据方向配置为输入或输出。数据方向由输出字符“O”或输入字符“I”设置。

该库只有 5 个功能。有两个将创建端口对象的构造函数,一个将 16 位数字输出发送到端口引脚的函数,一个从端口引脚获取 16 位数字输入的函数和一个更改/设置端口 IO 方向的附加函数. 这里简要解释了所有 5 个函数,然后给出了一些示例和解释。

所以只需使用这个库来连接任何 16 位设备,如 ADC、DAC、MUX,或任何数字设备获得 16 位输入或提供 16 位输出

1. IO_Port_16bit(int pin1, intpin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8, int pin9, intpin10, int pin11, int pin12, int pin13, int pin14, int pin15, int pin16,字符目录)

这是构造函数。它将创建此类的对象,因此它将通过组合不同的 arduino 引脚来创建一个或多个 16 位端口。必须指定 16 个不同的 arduino 引脚组合为端口以及数据方向作为输入或输出 - 意味着端口既可以作为输入也可以作为输出。此构造函数中的最后一个参数 dir 将端口定义为输入或输出。如果 dir='O' 表示端口作为输出,如果 dir='I',端口作为输入。同一个端口不能同时或交替作为输入和输出。如果未选择数据方向,它也会指示错误

2. IO_Port_16bit(int pin1, intpin2, int pin3, int pin4, int pin5, int pin6, int pin7, int pin8, int pin9, intpin10, int pin11, int pin12, int pin13, int pin14, int pin15, int pin16)

这是另一个构造函数。它还将创建此类的对象,因此它将通过组合不同的 arduino 引脚来创建一个或多个 16 位端口。必须指定 16 个不同的 arduino 引脚组合为端口。但它没有指定数据方向是输入还是输出。使用此构造函数创建端口对象后,必须使用set_IO_direction函数设置端口方向。所以这个构造函数允许程序员使用这个构造函数在运行时改变端口数据方向,同一个端口可以作为输入或输出交替工作(但不是同时)

3. set_IO_direction(字符目录)

该函数指定端口的输入/输出方向。它有一个字符参数,可以是“I”表示端口作为输入或“O”表示端口作为输出。如果未选择数据方向,则在arduino的串口监视器上显示错误

4. send_16bit_data(unsigned int byt)

此函数将 16 位数据发送到指定的引脚。只需将 int 数据(必须 < 65535)作为直接提供给 16 个不同引脚的参数。如果数据 >65535,它会在 arduino 的串口监视器上显示错误。

5. get_16bit_data(无效)

该函数从指定的引脚获取 16 位数据。它通过读取16个不同引脚的状态返回16位unsigned int数据

1:取16位输入并显示在串口监视器上

#include

IO_Port_16bit my16bitport(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);

诠释我;

长输入双字节;

无效设置()

{

// 将你的设置代码放在这里,运行一次:

my16bitport.set_IO_direction('I');

序列号.begin(9600);

}

无效循环()

{

input_double_byte =my16bitport.get_16bit_data();

Serial.print("输入数据:");

Serial.println(input_double_byte);

延迟(1000);

}

范例二:16个LED追光程序

#include

IO_Port_16bitmy16bitport(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);

无效设置()

{

// 将端口方向声明为指定“O”的输出

my16bitport.set_IO_direction('O');

}

无效循环()

{

无符号整数我;

对于(i=1;i<65535;i*=2)

{

my16bitport.send_16bit_data(i); //发送数据为 2, 4, 8, 16

延迟(200);// 32,..,..,...65534

}

}


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !