求教一个关于MSP430 G2 Launchpad按键程序的问题

2019-07-15 16:09发布

在给Launchpad写程序的时候发现一个比较有意思的问题。如下图
P1.3为一个按键
P1.0 P1.6分别是两个LED
QQ截图20151124172048.png

参照一下官方给出的原理图

1.png 2.png


然后......我就撸出了这么一段代码:
  1. #include "msp430g2553.h"

  2. void main(void)
  3. {
  4.     WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  5.     P1DIR|= BIT0+BIT6;
  6.     P1DIR&=~BIT3;

  7.         P1REN=BIT3;
  8.         while(1)
  9.         {
  10.                 if(P1IN&BIT3)
  11.                         P1OUT=BIT0;
  12.                 else
  13.                         P1OUT=BIT6;
  14.         }
  15. }
复制代码然而不管我怎么按都没变化。
然后我就在网上找找别人的程序看看了,我发现有一点不同,就是我看到某位同学,他把P1OUT的BIT3也给置为1了。
然后,我就加上这个BIT3
  1. #include "msp430g2553.h"

  2. void main(void)
  3. {
  4.     WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  5.     P1DIR|= BIT0+BIT6;
  6.     P1DIR&=~BIT3;

  7.         P1REN=BIT3;
  8.         while(1)
  9.         {
  10.                 if(P1IN&BIT3)
  11.                         P1OUT=BIT0+BIT3;
  12.                 else
  13.                         P1OUT=BIT6+BIT3;
  14.         }
  15. }
复制代码说来神奇,竟然就这么好了,这下可以按下键另外的LED亮了,松开就又回来了。
那么...问题来了,明明给P1.3的I/O模式设置为输入了,按我的理解来说,P1OUT中的BIT3应该对结果无影响才对,但是事实上又不是如此,难道说写按键程序的时候,I/O设置成输入,管脚悬空默认高阻态的情况下,P1IN会向P1OUT读取相应的值吗?
求各位替我解答下心中疑惑!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。