天天看点

c语言if条件为函数,if条件判断语句,谁能帮我分析一下?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

测试平台是一个stm32f103zet6的ARM芯片,

我这里只是把它当作单片机来用,下面的程序是平台提供的,可以正常使用,有几个地方不能理解!

//mode为0是不支持连续按

//mode为1是支持连续按

//返回0表示无按键按下

//返回值在1~4内,则对应四个按键a,b,c,d

u8 key_a(u8 mode)

{

static u8 key_up=1;//按键按下标志

if(mode) key_up=1;//支持连按

if(key_up&&(a==0||b==0||c==0||d==1))

{

delay_ms(10);//消抖

key_up=0;

if(a==0) return=1;//a键按下

else if(b==0) return=2;//b键按下

rese if(c==0) return=3;//c键按下

rese if(d==1) return=4;//d键按下

if(key_up&&(a==1||b==1||c==1||d==0))

keu_up=1;//无按键按下

}

return 0;//无按键按下返回0

}

这是一个完整的按键判断程序,带返回值带一个参数!

当key_a(1);时支持连按(也就是按住按键不松手数值会一直往上加)

按键a,b,c是低电平触发,d按键是高电平触发!

这里有几个问题无法理解,

第一条语句static u8 key_up=1;中的static有什么用? 后面的u8. 是申明一个8位的无符号数据,同时初始值为1,

接着if(mode) key_up=1; 这里mode是1还是0好像没有什么用,因为key_up在上一条语句已经赋值为1了,

到了按键判断语句

if(key_up&&(a==0||b==0||c==0||d==1))

这里两个括号是不是先判断第二个括号里面的条件,然后再跟key_up判断如果为真就执行if里面的语句,

我不能理解的是怎么通过mode来判断支不支持连续按!