#define ExButton1() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_14) #define ExButton2() GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_12) 程序这样写就会出错,PE12的值读上来一直是1! if(ExButton1()==0) //启动紧急开门1,并记录日志 { q_doorcmd = DOOR_STATE_OPEN; trig_openstyle = R_TRIG_EXBTN1OPEN; RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//表示应急开门1 } if(ExButton2()==0) //启动应急开门2,并记录日志 { q_doorcmd = DOOR_STATE_OPEN; trig_openstyle = R_TRIG_EXBTN2OPEN; RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//52='4',表示应急开门2 } 程序这样写,读PE12的值就是0 if((ExButton1()==0) || (ExButton2()==0)) { Door1Open(1); } 郁闷了.....不知道怎么回事,有人遇到类似的问题吗?我上面是通用的硬件,其它程序都没有占用IO,正确的是PE12读上来为0 ! |
if(ExButton1())
{}
else
{
q_doorcmd = DOOR_STATE_OPEN;
trig_openstyle = R_TRIG_EXBTN1OPEN;
RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//表示应急开门1
}
if(ExButton2())
{}
else
{
q_doorcmd = DOOR_STATE_OPEN;
trig_openstyle = R_TRIG_EXBTN2OPEN;
RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//52='4',表示应急开门2
}
首先感谢你的回答,其次可能是我表达方式不好....
if(条件1或者条件2)这种,实际运行的时候,不管是条件1触发还是条件2触发,都能通过寄存器看出来!!!另外,条件2就是PE12这个IO口,你的意思是PE12接地后,PE12读回的还是高电平,是PE14变低了所以这个判断才成立,门开了??
PE14和PE12都是有上拉的,不需要调,读回的就应该是高电平,只有按键按下了,读回的才是低电平好吗,PE14和PE12是两个独立的IO,硬件上接的是两个独立按键的,这样的表述是不是就明白了?
以前是这样写的
if((ExButton1()==0) || (ExButton2()==0)) 这两个按钮用于触发开门操作,不管是那个按下,都可以控制开门,没有任何问题!
但是我现在
ifi((ExButton1()==0)
{
开门
记录按钮1触发开门!
}
ifi((ExButton2()==0)
{
开门
记录按钮2触发开门!
}
这样就不行了,按钮2读到的电平时钟为高电平!!!
第二个是正确相应的,主要是第一个出错
正解啊。
看来我表述的不好,if(||)这种是没问题的,有问题的是if()。。。if()。。。
上拉下拉都试过了,就是读回来的是1.。。。
谢谢,同样的程序配置,自然都使能 了时钟,配置了输入模式。。。。。
差别只是用两个if判断还是if(条件1 || 条件2),同样的板子。。。怀疑是keil的问题或者单片机的bug。。。
你想用的是if....else吧?
....谢谢关心,可是似乎大家都没仔细看我的问题。。。。。
(GPIOE>IDR & GPIO_Pin_14)
这样试试,我读都是这样的 ,好像没有出现过问题