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的合體,使用中可以根據需要隨時切換模式