C宏可开启或关闭引脚

时间:2018-11-21 23:48:25

标签: c

我知道似乎以前有人问过这个问题,但是我花了几个小时寻找和测试东西,却找不到解决方案。

我要替换这个:

#define LED_ON PORTA|=(1<<6)
#define LED_OFF PORTA&=~(1<<6)

具有如下功能:

#define ON 1
#define OFF 0
#define LED(x) if (x==ON) PORTA|=(1<<6) else if (x==OFF) PORTA&=~(1<<6)

那么什么是正确的方法(或最好的方法?)?

2 个答案:

答案 0 :(得分:5)

喜欢吗?

#define LED(x) (x==ON) ? (PORTA|=(1<<6)) : (PORTA&=~(1<<6))

编辑:轻微错误,对不起。这是你要去的吗?

答案 1 :(得分:0)

您也可以使用三元运算符。

#define ON 1
#define OFF 0
#define LED(X)  (X)?(PORTA|=(1<<6)):(PORTA &= ~(1<<6));

您可以通过将引脚号替换为以下内容来使其更通用:

#define ON 1
#define OFF 0
#define LED(STATE, PIN) (STATE)?(PORTA|=(1<<PIN)):(PORTA &= ~(1<<PIN));

此外,您可以将PortName替换为:

#define ON 1
#define OFF 0
#define LED(STATE, PORT, PIN)   (STATE)?(PORT|=(1<<PIN)):(PORT&=~(1<<PIN));