bootgames 发表于 2012-9-5 09:19:01

请解释下这几个C语句谢谢

if ((PINA&(1<<PA2))==0)//语句1
{
PORTB=~BIT(3); //语句2
}


PORTB &=~BIT(4); //语句3

这三条语句所描述的意思是?
portA是按键
portB是LED。

tanguicaicai 发表于 2012-9-5 09:23:37

第一句是,读回PA2上引脚的电平,为0
第二句那个BIT(3)取反,,,不过我觉得这句好像不什么对哦,
第后一名是BIT(4)输出0

newselect 发表于 2012-9-5 09:27:13

if ((PINA&(1<<PA2))==0) 这条相当于 if ((PINA&0x04) == 0), (1<<PA2)=0x04(假设PA2的宏定义为2)

PORTB=~BIT(3); 这条BIT()估计是个宏,BIT(3)=1<<3, 即PORTB = ~0x08;

PORTB &=~BIT(4); 类似 PORTB= PORTB& 0x10; BIT(4) = 0x10;

楼主多看看C语言的书吧!

kevinstar888 发表于 2012-9-5 09:28:37

if ((PINA&(1<<PA2))==0)//PINA脚和PA2左移一位后做位与运算,如果条件为假,则运行括号内的语句。


PORTB=~BIT(3); //PORTB等于BIT(3)函数运行结果取反
PORTB &=~BIT(4); //PORTB和BIT(4)运行取反结果做位与运算。
不知道你能不能看明白

bootgames 发表于 2012-9-5 09:29:35

tanguicaicai 发表于 2012-9-5 09:23 static/image/common/back.gif
第一句是,读回PA2上引脚的电平,为0
第二句那个BIT(3)取反,,,不过我觉得这句好像不什么对哦,
第后一 ...

首先。。。多谢!

语句2 就是这样 例程上的

语句三如果输出为1呢
portB &= Bit(4)
这样写对吗?

bootgames 发表于 2012-9-5 09:33:05

为何要有这么复杂的表述呢
其实这个功能的实现可以哦你个很简单的语句就能写出来

tanguicaicai 发表于 2012-9-5 09:34:37

bootgames 发表于 2012-9-5 09:29 static/image/common/back.gif
首先。。。多谢!

语句2 就是这样 例程上的


也就是你要取反是不,
好像PORBA^=(1<<3);这就可以吧。不什么用,不记得多少了
你试验一下

zhikunWang 发表于 2012-9-5 09:40:01

if ((PINA&(1<<PA2))==0)//语句1
在AVR自有的头文件里已经定义了#define PA22
这样增加了可读性,即看PA2引脚是否为0
页: [1]
查看完整版本: 请解释下这几个C语句谢谢