初学MSP430——按键中断控制小灯翻转
2015-02-06 10:53
134 查看
**
**
[code]/* * Copyright (c)... * All rights reserved. * * 文件名称:main.c * 文件标识:NO * 硬件描述:开发板上P1.3接按键,P1.0接了LED(用跳线帽连接)。 * 功能描述:每次按下按键后,控制P1.0、P1.6 LED闪烁情况 * * 当前版本:V1.0 * 作者:输入作者(或修改者)名字 * 完成日期:2015年2月6日 * * 取代版本:NO * 原作者:TI * 完成日期:2013-4-8 */ #include "MSP430G2553.h" //-----在main()函数前提前申明子函数----- void P1_IODect(); //P1口的外部中断事件检测函数 void P13_Onclick(); //P1.3按键的中断事件处理函数 void GPIO_Init(); //GPIO初始化函数 /* * 名 称:main() * 功 能:控制全局 * 输入参数:NO * 输出参数:NO * 返回值:NO * 说 明:NO * 范 例:NO */ void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗定时器 DCOCTL = CALDCO_8MHZ; BCSCTL1 = CALBC1_8MHZ;//设定DCO时钟为MCLK 8Mhz GPIO_Init(); //初始化GPIO _enable_interrupts(); //等同_EINT,使能总中断 while(1) { } } /* * 名 称:GPIO_Init() * 功 能:设定按键和LED控制IO的方向,启用按键IO的上拉电阻 * 输入参数:NO * 输出参数:NO * 返回值:NO * 说 明:NO * 范 例:NO */ void GPIO_Init() { //-----设定P1.0和P1.6的输出初始值----- P1DIR |= BIT0+BIT6; //设定P1.0为输出 P1OUT ^= ~(BIT0+BIT6); //设定P1.0初值 //-----配合机械按键,启用内部上拉电阻----- P1REN |= BIT3; //启用P1.3内部上下拉电阻 P1OUT |= BIT3; //将电阻设置为上拉 //-----配置P1.3中断参数----- P1DIR &= ~BIT3; // P1.3设为输入(可省略) P1IES |= BIT3; // P1.3设为下降沿中断 P1IE |= BIT3 ; // 允许P1.3中断 } /* * 名 称:PORT1_ISR() * 功 能:响应P1口的外部中断服务 * 输入参数:NO * 输出参数:NO * 返回值:NO * 说 明:P1.0~P1.8共用了PORT1中断,所以在PORT1_ISR()中必须查询标志位P1IFG才能知道 * 具体是哪个IO引发了外部中断。P1IFG必须手动清除,否则将持续引发PORT1中断。 * 范 例:NO */ #pragma vector = PORT1_VECTOR __interrupt void PORT1_ISR(void) { //-----启用Port1事件检测函数----- P1_IODect(); //检测通过,则会调用事件处理函数 P1IFG=0; //退出中断前必须手动清除IO口中断标志 } /* * 名 称:P1_IODect() * 功 能:判断具体引发中断的IO,并调用相应IO的中断事件处理函数 * 输入参数:NO * 输出参数:NO * 返回值:NO * 说 明:该函数兼容所有8个IO的检测,请根据实际输入IO激活“检测代码”。 * 本例中,仅有P1.3被用作输入IO,所以其他7个IO的“检测代码”没有被“激活”。 * 范 例:NO */ void P1_IODect() { unsigned int Push_Key=0; //-----排除输出IO的干扰后,锁定唯一被触发的中断标志位----- Push_Key=P1IFG&(~P1DIR); //-----延时一段时间,避开机械抖动区域----- __delay_cycles(10000); //消抖延时 //----判断按键状态是否与延时前一致----- if((P1IN&Push_Key)==0) //如果该次按键确实有效 { //----判断具体哪个IO被按下,调用该IO的事件处理函数----- switch(Push_Key) { // case BIT0: P10_Onclick(); break; // case BIT1: P11_Onclick(); break; // case BIT2: P12_Onclick(); break; case BIT3: P13_Onclick(); break; // case BIT4: P14_Onclick(); break; // case BIT5: P15_Onclick(); break; // case BIT6: P16_Onclick(); break; // case BIT7: P17_Onclick(); break; default: break; //任何情况下均加上default } } } /* * 名 称:P13_Onclick() * 功 能:P1.3的中断事件处理函数,即当P1.3键被按下后,下一步干什么 * 输入参数:NO * 输出参数:NO * 返回值:NO * 说 明:使用事件处理函数的形式,可以增强代码的移植性和可读性 * 范 例:NO */ void P13_Onclick() { //-----Change仅在P13_Onclick()中使用,但是又需要退出函数时不被清除----- static unsigned int Change = 0; // 静态全局变量的典型应用场合 //-----变量从0~3循环移位----- Change ++; if (Change > 3) { Change = 0; } //-----根据Change的值,改变p1.0、p1.6这两个端口的电平高低----- switch(Change) { case 0: P1OUT ^= BIT0; break; //P1.0 通过异或取反 case 1: P1OUT ^= BIT6; break; //P1.6 通过异或取反 case 2: P1OUT |= BIT6 + BIT0; break;//P1.0 、P1.6 均属出高电平 case 3: P1OUT &= ~(BIT6 + BIT0);break;//P1.0 、P1.6 均属出低电平 default: break; } }
**
相关文章推荐
- MSP430用按键中断控制定时器产生持续 1s 的周期信号
- 单片机TM4C123学习(二):中断与按键控制
- stm32 按键(中断)控制LED的亮灭,按一次亮,再按一次灭;
- 木其工作室(专业程序代写服务)[原]ok6410学习笔记(16.按键中断控制led驱动)
- 按键控制蜂鸣器--采用中断方式(3)
- TI CC2530基础实验(GPIO通用I/O中断操作——按键控制灯的亮灭)
- ok6410学习笔记(16.按键中断控制led驱动)
- 3.STM32中对EXTI_PE5_Config()函数的理解(自定义)之中断控制按键LED
- wince6.0 +S3C6410 中断处理例子(按键控制LED灯)
- 树莓派 Learning 003 — GPIO 003 中断模式 — 按键控制LED
- ZYNQ+Vivado2015.2系列(十四)按键中断控制LED亮灭
- STM32 学习总结2 ----利用中断来控制按键点灯、捕获功能练习
- msp430 launchpad 按键控制led亮灭
- STM32F401利用CubeMX实现按键中断翻转LED
- stm32初学之LED按键中断
- MSP430按键控制串口发送数据
- 外中断(按键)控制数码管显示
- 中断——按键控制LED状态
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )
- MSP430按键中断