mbed学习之Digital IO (一)
mbed的IO操作非常灵活,常见的关于Digital IO操作整理如下表 ,其中蓝色字体是构造函数,绿色字体的是操作符重载,使用时只要创建对象,就可以调用对应的方法来操作,并且每种都提供了操作符重载,使用上更加灵活
DigitalIn | DigitalIn (PinName pin) | 构造函数,创建连接到指定Pin的DigitalIn对象 |
DigitalIn (PinName pin, PinMode mode) | 构造函数,同上,指定了PinMode | |
int read () | 读Pin状态,返回0 or 1 | |
void mode (PinMode pull) | 设定PinMode(PullUp, PullDown, PullNone, OpenDrain) | |
int is_connected () | ||
operator int () | 操作符重载,效果等同于 read() | |
DigitalOut | DigitalOut (PinName pin) | 构造函数,创建连接到指定Pin的DigitalOut对象 |
DigitalOut (PinName pin, int value) | 构造函数,同上,指定了初始值 | |
void write (int value) | 写值到Pin | |
int read () | 读Pin状态,返回0 or 1 | |
int is_connected () | ||
DigitalOut & operator= (int value) | 操作俯重载,效果等同于 write() | |
operator int () | 操作符重载,效果等同于 read() | |
PortIn | PortIn (PortName port, int mask=0xFFFFFFFF) | mask用来标记需要操作哪些Pin |
int read () | ||
void mode (PinMode mode) | ||
operator int () | 操作符重载,效果等同于 read() | |
PortOut | PortOut (PortName port, int mask=0xFFFFFFFF) | mask用来标记需要操作哪些Pin |
void write (int value) | ||
int read () | ||
PortOut & operator= (int value) | 操作俯重载,效果等同于 write() | |
operator int () | 操作符重载,效果等同于 read() |
#include "mbed.h" DigitalOut myled(LED1); PortOut myleds(PortB,0x700); // PB8,PB9,PB10 DigitalIn mybutton(USER_BUTTON); PortIn button(PortA,0x100); // PA8 Serial pc(USBTX,USBRX); int main() { unsigned long i; while(1) { myled.write(1); i = button; if (mybutton == 0) { myled = !myled; //利用操作符重载,这里不需要myled.read()和myled.write() } if (button != 0x100) { myleds = 0; } else { myleds = 0x600; } pc.printf("button = %x \r\n",i); } }
从上面的代码中我们可以发现,运用了操作符重载之后,创建的对象可以直接进行读值和赋值,非常方便,熟悉51的朋友应该更喜欢,多数情况下不在需要调用read()和write()方法
除了上面的类型,和提供了 DigitalInOut 类,相当于DigitalIn和DigitalOut的合体,使用中可以根据需要随时切换模式