用运算符重载的方法模拟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

发布了78 篇原创文章 · 获赞 76 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_38288618/article/details/103058563