基于msp430的按键实时控制LED灯
程序员文章站
2022-06-08 22:57:55
...
基于msp430的按键实时控制LED灯
相信玩过430的人都知道它的P1、P2口除了具有普通IO口的功能外,还具有中断功能。
所以那我们就利用它的中断功能来实现一个小项目吧!
那就是通过按键来点亮LED灯
项目大体框架
- 初始化相应的IO端口:比如我们要用的P1_0—–P1_3来连接按键,然后通过P6口输出.所有,我们要设置P1口的低四位为第二功能引脚,方向为输入,P6为普通引脚,方向为输出。
- 设置好P1端口低四位的中断触发方式,如下降沿;打开相应的中断控制位,和打开总中断。
- 然后编写函数,下载到电路,调试,实现。
开发板介绍
- 8个LED一端连在P6口上,一端与VCC相连,共阳。
- 四个独立按键一端分别连在P1口的低四位,一端接地。
代码
/*********主函数main************/
/************************************************************
*作者:风儿与沙
*版本:1.0
*时间:2018/7/4
*功能:通过四个独立按键,产生外部中断,来控制4组LED发亮
*MCU: msp430F149
*************************************************************/
#include <msp430x14x.h>
#include "Config.h" //引入开发板硬件配置文件
#include "irq_port.c" //引入端口初始化源文件
//相关宏
#define LED8 P6OUT
#define LED8DIR P6DIR
/*************************************************************
* 主函数
*************************************************************/
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗定时器
Port_init(); //端口初始化
while(1);
}
//**********************************************************************
// P1口中断服务程序,需要判断
//**********************************************************************
#pragma vector = PORT1_VECTOR
__interrupt void P1_IRQ(void)
{
switch(P1IFG&0x0F)
{
case 0x01: LED8 = 0xFC;P1IFG=0x00;break; // 引脚0对应S1中断,必须手动清标志位,点亮D1D2
case 0x02: LED8 = 0xF3;P1IFG=0x00;break; // 引脚1对应S2中断,必须手动清标志位,点亮D3D4
case 0x04: LED8 = 0xCF;P1IFG=0x00;break; // 引脚2对应S3中断,必须手动清标志位,点亮D5D6
case 0x08: LED8 = 0x3F;P1IFG=0x00;break; // 引脚3对应S4中断,必须手动清标志位,点亮D7D8
}
}
/////////////////////////////////////////////////////////////////////////
IQR_PORT源文件
////////////////////////////////////////////////////////////////////////
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
P1SEL = 0x00; //P1普通IO功能
P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻
P1IE = 0x0F; //开启P1低四位中断
P1IES = 0x0F; //下降沿触发中断
P1IFG = 0x00; //软件清零中断标志寄存器
_EINT(); //打开总中断
LED8DIR |= 0xFF; //P6口输出模式
LED8 |= 0xFF; //先关闭所有LED
}
附上局部电路图
搞定!
有待更新,改正,,,,,,,,,,
上一篇: bootloader系列四——时钟初始化
下一篇: 8086微处理器
推荐阅读