利用软件循环查询方法编程实现:按下 MSP430F5529 LP 板上的按键 S1、 S2 分别控制LED1、LED2 点亮,再次按下时 LED1、LED2 熄灭。LED 指示灯模块原理图如图 2.1( a ) ,按键模块原理图如图 2.1 ( b )所示。
时间: 2024-02-01 08:02:09 浏览: 80
以下是 MSP430F5529 的按键控制 LED 的程序示例:
```c
#include <msp430.h>
#define LED1 BIT0
#define LED2 BIT7
#define S1 BIT1
#define S2 BIT2
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P1DIR |= LED1; // 配置 LED1 为输出
P4DIR |= LED2; // 配置 LED2 为输出
P1REN |= S1; // 配置 S1 为输入,启用上拉电阻
P1OUT |= S1; // 上拉电阻连接 VCC
P1IE |= S1; // 允许 S1 中断
P1IES |= S1; // 设置 S1 中断触发方式为下降沿
P1IFG &= ~S1; // 清除 S1 中断标志
P1REN |= S2; // 配置 S2 为输入,启用上拉电阻
P1OUT |= S2; // 上拉电阻连接 VCC
P1IE |= S2; // 允许 S2 中断
P1IES |= S2; // 设置 S2 中断触发方式为下降沿
P1IFG &= ~S2; // 清除 S2 中断标志
_BIS_SR(GIE); // 全局中断使能
while (1)
{
__no_operation(); // 空操作,保证程序不退出
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1_ISR(void)
{
if (P1IFG & S1) // 如果 S1 触发了中断
{
P1OUT ^= LED1; // 点亮或熄灭 LED1
P1IFG &= ~S1; // 清除 S1 中断标志
}
if (P1IFG & S2) // 如果 S2 触发了中断
{
P4OUT ^= LED2; // 点亮或熄灭 LED2
P1IFG &= ~S2; // 清除 S2 中断标志
}
}
```
该程序首先配置 LED1、LED2、S1、S2 的管脚方向和中断触发方式,并启用上拉电阻。然后进入一个无限循环,等待中断事件的发生。当 S1 或 S2 触发下降沿中断时,相应的中断服务程序将被调用,在其中切换 LED1、LED2 的状态,并清除中断标志。通过这种方式,就可以实现按下按键时点亮 LED,再次按下时熄灭 LED 的功能。
阅读全文