用運算符重載的方法模擬C51編程中的sbit

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章