在给Launchpad写程序的时候发现一个比较有意思的问题。如下图
P1.3为一个
按键
P1.0 P1.6分别是两个
LED
参照一下官方给出的
原理图
然后......我就撸出了这么一段代码:
- #include "msp430g2553.h"
- void main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
- P1DIR|= BIT0+BIT6;
- P1DIR&=~BIT3;
- P1REN=BIT3;
- while(1)
- {
- if(P1IN&BIT3)
- P1OUT=BIT0;
- else
- P1OUT=BIT6;
- }
- }
复制代码然而不管我怎么按都没变化。
然后我就在网上找找别人的程序看看了,我发现有一点不同,就是我看到某位同学,他把
P1OUT的BIT3也给置为1了。
然后,我就加上这个
BIT3:
- #include "msp430g2553.h"
- void main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
- P1DIR|= BIT0+BIT6;
- P1DIR&=~BIT3;
- P1REN=BIT3;
- while(1)
- {
- if(P1IN&BIT3)
- P1OUT=BIT0+BIT3;
- else
- P1OUT=BIT6+BIT3;
- }
- }
复制代码说来神奇,竟然就这么好了,这下可以按下键另外的LED亮了,松开就又回来了。
那么...问题来了,明明给P1.3的I/O模式设置为输入了,按我的理解来说,P1OUT中的BIT3应该对结果无影响才对,但是事实上又不是如此,
难道说写按键程序的时候,I/O设置成输入,管脚悬空默认高阻态的情况下,P1IN会向P1OUT读取相应的值吗?
求各位替我解答下心中疑惑!
一周热门 更多>