目录
一:原理图
按键S1 对应IO口:P2.1
按键S2 对应IO口:P1.1
使用时,应该使能P2.1/P1.1的电阻接高电平。未按下按键时,端口电压为高电平。按下按键时,端口为低电平。
二:初始化
S1初始化,对应IO口:P2.1
/*S1~P2.1,按下按键端口变为低电平*/
P2DIR &= ~BIT1; //初始化按键S1的IO口P2.1,设置为输入
P2REN |= BIT1; //使能P2.1的电阻
P2OUT |= BIT1; //选择上拉电阻
S2初始化,对应IO口:P1.1
/*S2~P1.1*/
P1DIR &= ~BIT1; //初始化按键S2的IO口P1.1,设置为输入
P1REN |= BIT1; //使能P1.1的电阻
P1OUT |= BIT1; //选择上拉电阻
三:使用
判断P2.1/P1.1端口的电平,按下为低电平,未按下未高电平
P2端口值未按下时为xxxx xx1x。若按键按下,P2.1处的“1”变为“0”,端口电压则变为xxxx xx0x。
BIT1 = 0000 0010,若按键按下,P2IN & BIT1 = 0000 0000 = 0,若按键未按下,P2IN & BIT1 = 0000 0010 = 2。
判断按键按下,若按下,则执行if内部代码:
if( (P2IN & BIT1) == 0 )//按键按下了
{
}
三:实现功能
按下按键S1,LED1亮。松开S1,LED1熄灭
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
P1DIR |= BIT0; //初始化LED1的IO口P1.0,设置为输出
P1OUT &= ~BIT0; //设置P1.0初始为低电平
P2DIR &= ~BIT1; //初始化按键S1的IO口P2.1,设置为输入
P2REN |= BIT1; //使能P2.1的电阻
P2OUT |= BIT1; //选择上拉电阻
while(1)
{
if((P2IN & BIT1) == 0)
{
P1OUT |= BIT0; //点亮LED1
}
else
{
P1OUT &= ~BIT0;
}
}
}