历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2021年02月09日 | msp430单片机实现常按键和短按键加去抖功能

2021-02-09 来源:eefocus

通过P1口的中断开启定时器,然后利用定时器中断不断扫描相应的端口状态,判断按键的


//定时器设置

void TimerA1Init()

{   

  _UINT  data = 0 ; 

  TA1CTL = data ;//clear all ,diaable interrupt , claer ifg 

  TA1CTL |= TASSEL__ACLK | ID_0 | TACLR  ;  // ACLK, stop mode, ,div:1 ,clear TAR  

  //TA0CTL |= MC__UP ;//启动定时器  

  TA1CCTL0 = CCIE ; //ccr0  比较中断允许 

  TA1CCR0 = 327 ;  //ccr0 compare mode , ie disable , ifg clear  

}


//P1端口中断程序

#pragma vector = PORT1_VECTOR

__interrupt void Port1ADISR( void )

  P1IFG &= 0x0f; 

  switch(P1IFG)

  {

    case Key_Sel:


      TA1CTL |= MC__UP;   //启动定时器

      Key_Tmp = Key_Sel; 


      break;

    case Key_Menu:


      TA1CTL |= MC__UP;   //启动定时器

      Key_Tmp = Key_Menu;


      break;

  }

  P1IFG &= 0x00;


}



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

函数名称:__interrupt void Timer_A1_Count (void) 

函数功能:

入口参数:无 

出口参数:无 

备   注: 

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

#pragma vector = TIMER1_A0_VECTOR

__interrupt void Timer_A1_Count(void)

{  

  static _UINT i = 0;

  _UBYTE P1_Value;

  P1_Value = P1IN;


  P1_Value &= 0x06;

  switch(Key_Tmp)

  {

  case Key_Menu:

    {

      if( (P1_Value & BIT2) == 0)    //按键按下

      {

        i++;

        if(i >= 300)   //常按键处理

        {


          BUZZER_ON;

          i = 0;


          //定时器停止

          TimerA1_Stop; 

        }

      }

      else if((P1_Value & BIT2) != 0)//按键释放

      {


        if( (i >= 5) && (i < 300) )  //短按键

        {


          LCD_B1_RT_ON;

          TimerA1_Stop;

          i= 0;

        }

        else

        {

          i = 0;  //否则认为是抖动;

        }

      }


      break;

    }

  case Key_Sel:

    {

      if( (P1_Value & BIT1) == 0)       //按键按下

      {

        i++;

      }

      else if( (P1_Value & BIT1) != 0)  //按键释放

      {


        if(i > 5)                       //短按键处理

        {

          LCD_B1_RT_OFF;

          TimerA1_Stop;

          i = 0;

        }

        else

        {

          i = 0;   //否则认为是抖动;

        }

      }


      break;

    }

  }

}


推荐阅读

史海拾趣

FILTRONIC公司的发展小趣事

FILTRONIC公司成立于上世纪90年代初,正值通信技术快速发展的时期。公司初创时便聚焦于滤波器技术的研发与生产,针对当时市场对高性能滤波器的迫切需求,FILTRONIC的研发团队通过不断试验与优化,成功开发出了一款具有创新性的高性能滤波器产品。这款滤波器在频率选择性和插入损耗方面表现出色,迅速获得了市场的认可,为FILTRONIC在电子行业中站稳脚跟奠定了坚实的基础。

Advanced_Linear_Devices_Inc.公司的发展小趣事

随着全球市场的不断扩大,ALD积极推进国际化战略。公司通过与全球各地的OEM制造商建立合作关系,将产品销往世界各地。同时,ALD还积极参与国际电子展会和论坛,展示其最新技术和产品,与全球同行交流合作。这些举措不仅提升了ALD的国际知名度,还为公司带来了更多的商机和发展空间。

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

为了进一步提升技术实力,金宇半导体积极与国内外知名高校和科研机构建立合作关系。2010年,公司与某顶尖大学联合成立了“先进半导体技术研究中心”,共同开展前沿技术的研发。通过产学研的紧密合作,金宇半导体在先进制程工艺、芯片封装测试等领域取得了重大突破,成功推出了多款具有自主知识产权的高端芯片产品,进一步巩固了其在行业内的领先地位。

American Custom Components公司的发展小趣事

American Custom Components公司自创立之初,就致力于电子元器件的创新研发。在一次技术研讨会上,公司的研发团队发现了一种新型的半导体材料,具有出色的导电性和稳定性。经过数月的实验和验证,团队成功地将这种材料应用于新产品中,推出了一款性能卓越的集成电路。这一创新技术不仅提升了公司的产品质量,还赢得了市场的广泛认可,为公司的发展奠定了坚实基础。

Blue Creation公司的发展小趣事

作为一家有社会责任感的企业,Blue Creation公司始终关注环保和可持续发展。公司积极采用环保材料和节能技术,努力降低生产过程中的环境影响。同时,公司还积极参与公益事业,捐资助学、扶贫济困,回馈社会。这些举措不仅提升了Blue Creation的企业形象,也为其赢得了社会各界的广泛赞誉。

以上五个故事分别从不同角度展现了Blue Creation公司在电子行业发展的历程和成就。虽然这些故事是虚构的,但它们所蕴含的企业发展理念和经验对于现实中的企业来说仍具有一定的借鉴意义。

Electro-Term/Hollingsworth公司的发展小趣事

在快速发展的过程中,Electro-Term公司始终重视人才培养和团队建设。公司建立了完善的人才选拔和培训体系,为员工提供广阔的发展空间和良好的福利待遇。同时,公司还鼓励员工积极参与创新实践和技术交流,营造了浓厚的学术氛围和团队合作精神。这些举措为公司的发展提供了有力的人才保障。

问答坊 | AI 解惑

运动控制新技术

1 引言   信息时代的高新技术流向传统产业,引起后者的深刻变革。作为传统产业之一的机械工业,在这场新技术革命冲击下,产品结构和生产系统结构都发生了 质的跃变,微电子技术、微计算机技术的高速发展使信息、智能与机械装置和动力设备相结合, ...…

查看全部问答>

wince中如何定时重启??

各位大侠,我想让系统在每天的某个时间重启,环境是wince。不知道如何实现??…

查看全部问答>

关于8259A中断屏蔽字

大家好,在做数字钟实验的时候,要求按下A键停止记数,按下B键恢复记数 我是这样想的:在按下A键的时候,给8259A的IR0的中断屏蔽位置1,按下B键的时候恢复置0 问题是,按下A键给8259A的IR0的中断屏蔽位置1的时候,确实IR0的中断被屏蔽掉了,从而I ...…

查看全部问答>

RFID天天谈

本人不才,搞销售的,略懂技术。 近年,关于无线传输的技术虽多,但谈不上突飞猛进,希望通过我们的互动,共同促进。每天一论,大家要鼓励呀! 我们先从挑错开始把!大家看看,下面这句话有什莫毛病(不是广告): 速联科技超级Zigbee无线模块, ...…

查看全部问答>

12864液晶屏的串行、并行口驱动程序(已验证),注:晶振为7.3728MHz

 //********************************************************** //*  文件名:   12864.c   // //*  液晶屏:   128*64    // //*  设计者:    ...…

查看全部问答>

本人初学,求帮忙调试下程序错误在哪里,谢谢!

本人新手,想用定时器来扫描的方式,动态显示数码管,让前两位显示从1到99计数,但是总是停止在\"00\",希望懂的老师帮忙看看程序错在哪里了,感谢! #include #define uint unsigned int #define uchar unsigned char sbit wei=P2^1; sbit du ...…

查看全部问答>

精密旋变数字转换器测量角位置和速度

精密旋变数字转换器测量角位置和速度 …

查看全部问答>

51单片机的串口现时代有意义吗?

现在的电脑主板几乎都没有了 串口  现在下载程序都是用USB的 那单片机的串口应用还有意义吗?IC与IC 不是有I平方2总线? 求高手解答  小弟新手自学 买的2007年 郭天祥的实验板 可以现在的电脑都没有有串口 这个问题很郁闷啊? ...…

查看全部问答>

【新生求助】头文件自定义问题

今天老师给了一个示例自定义程序,但是其中有很多疑问,麻烦各位知道的能解答下嘛,万分感谢!其中一开始是这么定义的 ram定义和rom定义的主要区别在哪里呢? ;---------------------------------------- #define rom_reg_adr     ...…

查看全部问答>