C51的程序經都會遇到這樣的代碼,Px口第n位的引腳定義寫作 Px^n
然後 ,對引腳的讀寫操作,是跟變量一樣的。
sbit LED1 =P3^4;
sbit LED2 =P3^5;
sbit KEY1 =P3^0;
sbit KEY2 =P3^1;
//。。。。。。
if(KEY1 ==0 ) { LED1 = 0; }
if(KEY2 ==0 ) { LED2 = 0; }
//。。。。。。
arduino用的順手,移植但是arduino 編程並沒有 sbit這個鬼,引腳多修改會有些繁瑣,爲了快速我門寫個類模擬一下 sbit,當然除了執行效率,在代碼上的確可以節省很多替換的工作量的。
直接源碼
//定義一個類
class sbit{
int x;
public:sbit(int i=0){x=i;}
void I(bool pullup=false){pullup?pinMode(x,INPUT_PULLUP):pinMode(x,INPUT);}
void O(){pinMode(x,OUTPUT);}
void operator=(int v) {digitalWrite(x,v);}
bool operator==(int v) {return v==digitalRead(x);}
};
//定義針腳
sbit led(13);
//
void setup() {
Serial.begin(9600);
}
int n=0;
void loop() {
//設置爲輸出
led.O();
//引腳賦值
led=n%2;
delay(1000);
//設置爲輸入
led.I();
//讀取比較
Serial.println(led==1);
n++;
}
主要原理就是用運算符重載的方法模擬sbit 的 =賦值和==比較。
參考
C 程序設計(譚浩強完整版)運算符重載
https://wenku.baidu.com/view/b4a40bb35ff7ba0d4a7302768e9951e79b8969c5.html
c 運算符重載總結
https://wenku.baidu.com/view/be73037b42323968011ca300a6c30c225901f081.html