MSP430按键控制LED闪烁频率

发布者:数据之翼最新更新时间:2019-09-06 来源: eefocus关键字:MSP430  按键控制  LED  闪烁频率 手机看文章 扫描二维码
随时随地手机看文章

MCU为430F149,编译环境为IAR,主时钟使用频率的800KHz,内部DCO。LED->P2.0, KEY1->P1.0, KEY2->P1.1。亲测可用。


/**********************************************

*程序描述:单片机的P1.0,P1.1连接两个独立按键,P1.0->KEY1,P1.1->kEY2,由外部中断下触发。P2.0->LED,MCLK = DCO 800KKHz

*          按键1按下每秒闪一下,按键2按下闪烁频率降低一半

*作者    :Zhenhua Liu

*时间    :2017.10.29  20:00

***********************************************/

#include

#define keyin (P1IN & 0X0F) //用于读取按键接口的电平,延时消抖和松手检测

unsigned int KeyVal = 0;   // 键值位全局变量,0表示异常,1,2分别为两个按键按下

 

void DelayXms(unsigned int i);

void keyInit(void);   //键盘设置的初始化

int main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;

  keyInit();         //键盘初始化

  P2DIR |= BIT0;     //led口方向为输出

  while(1){

     P2OUT |= BIT0;  //LED高电平

     if(KeyVal==1)DelayXms(1000);   //按键1按下延时1s

     if(KeyVal==2)DelayXms(2000);   //按键2按下延时2s

     P2OUT &= ~BIT0;               //LED低电平

     if(KeyVal==1)DelayXms(1000);  //按键1按下延时1s

     if(KeyVal==2)DelayXms(2000);  //按键1按下延时2s

  }

  return 0;

}

/****************************************************************************

*函数名: PORT1_ISR()                                                         /

*作用  :外部中断服务函数                                                   /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :Zhenhua Liu                                                              / 

*时间  :2017.10.29                                                          / 

*****************************************************************************/

#pragma vector = PORT1_VECTOR

__interrupt void PORT1_ISR(void){

  if(P1IFG&0x0f){

  switch(P1IFG){

      case 0x01:

         if(keyin==0x0e)

         {

            DelayXms(5);            //延时消抖

            while(keyin==0x0e);     //松手检测

            KeyVal = 1;             //键值为1

            P1IFG = 0;              //中断标志清零

            return;

          } 

      case 0x02:

         if(keyin==0x0d)

         {

            DelayXms(5);          //延时消抖

            while(keyin==0x0d);   //松手检测

            KeyVal = 2;           //键值为2     

            P1IFG = 0;            //中断标志清零

            return;

         } 

    

      default:

       {

            KeyVal = 0;

            LPM0_EXIT;

            P1IFG = 0;

         

       }

    }

  } 

}

/****************************************************************************

*函数名: DelayXms()                                                           /

*作用  :800KHz的MCLK下,延时大约1s                                           /

*返回值:无                                                                  /

*参数  :无                                                                 /

*作者  :Zhenhua Liu                                                         / 

*时间  :2017.10.29                                                          /               

*****************************************************************************/

void DelayXms(unsigned int i){

    unsigned int j;

    for( ; i>0; i--){

      for(j=0;j<200;j++); 

    }

  

}

/****************************************************************************

*函数名: keyInit()                                                           /

*作用  :设置与四个独立按键相关的IO的配置,包括输入输出方向,中断触发方式    /

*返回值:无                                                                  /

*参数  :无                                                                  /

*作者  :huasir                                                              / 

*时间  :2017.10.28                                                          /               

*****************************************************************************/

void keyInit(void){

  P1DIR &= ~(BIT0+BIT1+BIT2+BIT3);//设置四个按键的接受口为输入,注意,使用外部中断并不属于第二功能

  P1IES |= BIT0+BIT1+BIT2+BIT3;  //设置四个按键的中断触发方式为下降沿触发

  P1IE  |= BIT0+BIT1+BIT2+BIT3;  //打开四个按键的外部中断

   _EINT();                      //打开总中断

}



关键字:MSP430  按键控制  LED  闪烁频率 引用地址:MSP430按键控制LED闪烁频率

上一篇:msp430ADC程序
下一篇:MSP430F149按键检测程序

推荐阅读最新更新时间:2024-11-08 11:44

MSP430F2274 LCD1602显示模块
/********************************************************************************************************** * 功能: 实现LCD1602显示 Welcome to! 字符 * * 描述: LCD1602三根控制引脚由NPN三极管反向控制,D0~D7直接与MSP430相连接 * * 禁止 LCD1602读操作.三极管C极接LCD三根控制引接,三极管E极接地,三 * * 极管B极由口线控制.如此实现 3V 反向控制 5V.
[单片机]
TinyOS在MSP430F2618上移植(三)之LCD
本节记录串口TFT LCD在TinyOS上的移植。1.8寸LCD显示屏采用ST7735控制器,使用SPI接口实现控制、显示数据的传输。 总体架构:分为3层结构,最底层位于相应的platforms中chips目录下,实现在特定平台上控制引脚连接,SPI接口连接,以及SPI配置。中间层实现了LCD基本操作,LCD初始化,提供给上层模块连接的接口,以及资源管理。最上层提供应用层模块连接的接口。 在本架构中,中间层和最高层提供相同的接口LCD16,该接口提供的实现方法有english_string,clear,single_color等,以及写完成事件writeDone。不同的是在最高层提供的接口LCD16中,并没有真正实现接口
[单片机]
2013年LED照明驱动方案的四个趋势
2012 根据麦肯锡的市场研究报告《Lighting the Way》,LED球泡灯价格以每个季度9%左右的速度下跌。为了弥补价格上下降损失,IC元器件厂商会采用高集成策略来强化驱动IC的功能,目前很多厂商采用集成MOSFET的策略,集成200V(500V)或者400V(600V) MOSFET并提供完备的保护方案,可以让LED方案更轻巧,可靠性也有提升,目前PI的方案是集成650V和725V的高压MOSFET. 趋势四:无电解电容方案走向成熟 自从LED照明逐渐走热以来,关于电解电容在照明方案中的使用争议不断,反对的人认为电解电容是led灯具寿命杀手,认为电解电容严重影响了LED灯具的寿命,而支持的人则认为,电解电容在滤除
[电源管理]
诠释LED灯条的灯数、色温、亮度
灯数 15灯、30灯、60灯是指LED灯带每米长度上焊接了多少颗LED元件,一般来说1210规格灯带是每米60颗LED,5050规格灯带是每米30颗LED,特殊的有每米60颗LED。不同LED数量的LED灯带价格是不同的,这也是区分LED灯带价格的一个重要因素。 色温 是指将一标准黑体加热,温度升高到一定程度时颜色开始由深红 - 浅红 - 橙黄 - 白 - 蓝,逐渐改变,某光源与黑体的颜色相同时,我们将黑体当时的绝对温度称为该光源之色温。 一般来说色温不作为考核LED灯带的一个指标,只是国外很多客户因为使用环境的关系,会做一个特别的要求。 光源色温不同,光色也不同: 色温在 3300K 以下,光色偏红给以温暖的感觉;有
[电源管理]
MSP430单片机的位操作
  MSP430单片机属于RISC(Reduced Instruction Set Computer)型处理器。与普通的51单片机的复杂指令集相区别。普通51单片机执行一条指令最少需要12个时钟周期,而RISC单片机最少仅需1个时钟周期。RISC处理器带来的最大不同就是不能进行位操作,内存寻址只能到字不能到位。打个比方,一栋楼只有一个邮政编码,快递员送东西只能送到楼,显然比送到户要快,但具体是那户人家的,就得想想办法了。 1、写位操作。   对某字节使用 = 进行写操作时,所有位的值都将被改变。如果先将字节读出来,再使用 按位 操作符对原字节进行赋值,则可 等效 对单个位进行操作。   需要特别指出的是,采用 按位 操作并不意味
[单片机]
LED开关电源的PCB设计分析
在开关电源设计中PCB板的物理设计都是最后一个环节,如果设计方法不当,PCB可能会辐射过多的电磁干扰,造成电源工作不稳定,以下针对各个步骤中所需注意的事项进行分析:   一、从原理图到PCB的设计流程 建立元件参数- 输入原理网表- 设计参数设置- 手工布局- 手工布线- 验证设计- 复查- CAM输出。   二、参数设置相邻导线间距必须能满足电气安全要求,而且为了便于操作和生产,间距也应尽量宽些。最小间距至少要能适合承受的电压,在布线密度较低时,信号线的间距可适当地加大,对高、低电平悬殊的信号线应尽可能地短且加大间距,一般情况下将走线间距设为8mil。   焊盘内孔边缘到印制板边的距离要大于1mm,这样可以避免加工时导致
[电源管理]
单色LED的检测测试方法
一、主体思路: 因为发光二极体具有单向导电性,所以我们使用 R × 10k 档可测出其正、反向电阻。一般正向电阻应小於 30k 欧姆,反向电阻应大於 1M 欧姆。若正、反向电阻均为零,说明内部击穿短路。若正、反向电阻均为无穷大,证明内部开路。需要说明两点:第一,对於同种材料的管芯,由於所掺杂质的不同,发光顏色亦不同;第二, LED 属於电流控制型器件, VF 随 IF 而变化,所标 VF 值仅供参考。 二、区分电极 根据外形可以区分发光二极体的正、负极。早期生產的管子带金属管座,上面罩有光学透镜,管侧有一突起,靠近突起的是正极。目前生產的 LED ,全部用透明或半透明的环氧树脂封装而成,并且利用环氧树脂构成透镜,起放大和聚焦作用
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved