小蜜蜂笔记
嵌入式开发与物联网应用教育践行者

【CC2530应用开发14】基于定时器的长按与短按

教学内容与重难点

【内容01】按键长按与短按的实现原理。
【内容02】实训项目:基于定时器的长按与短按。
——–学生实践实操,老师讲解演示。
【内容03】前后台程序设计思维模式。
【内容04】专创融合专题。

【重点】 实训项目:基于定时器的长按与短按。
【难点】 前后台程序设计思维模式。

教学单元核心内容与学习资源

长按与短按的实现原理

【基本原理】判断按键长按与短按,实际上就是测量按键按下的时间,根据这个时间参数来决定按键按下的状态。
【实现过程】:在后台程序中,扫描按键状态,按下和松开时分别标志不同的变量,对按键的按下时间进行判断,决定按键是长按还是短按。在前台程序中,进行0.1的的不间断定时,当发现有按键按下,开始计算按键按下的时间,按键松开,结束该时间的计算。

实训案例:基于定时器的长按与短按

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务: 
1-选择内部16MHz时钟的128分频作为计数器1的计数信号。
2-以模模式启动定时器1,进行0.1秒的间隔定时。
3-当SW2按键长按松开后,切换D4灯的开关状态,当SW2按键短按松开后,切换D6灯的开关状态。
注:按键按下时间大于0.5秒,定义为长按,反之为短按。

#define D4 P1_1
#define D6 P1_4
#define SW2 P0_1
unsigned int count = 0;
unsigned char F_key = 0;
/*=====================定时器1初始化函数=======================*/
void Init_Timer1()
{
  //1-设置最大计数值 0x30D4,16MHz时钟下定时100ms
  T1CC0L = 0xD4;
  T1CC0H = 0x30;
  //2-开启通道0的比较模式
  T1CCTL0 |= 0x04;
  //3-使能定时器相应中断控制
  T1IE = 1;
  EA = 1;
  //4-启动定时器1
  T1CTL = 0x0E;   //0000 1110
}
/*====================定时器1中断服务函数======================*/
#pragma vector = T1_VECTOR
__interrupt void Service_Timer1()
{
  if(F_key == 1)
  {
    count++;                //0.1秒定时配给
  }
}
/*=======================按键扫描处理函数======================*/
void Scan_Keys()
{
  if(SW2 == 0)
  {
    Delay(200);             //去抖动处理
    if(SW2 == 0)            //确认按键按下
    {
      count = 0;            
      F_key = 1;            //启动0.1秒定时累计
      while(SW2 == 0);      //等待按键松开
      F_key = 0;            //停止0.1秒定时累计
      
      if(count > 5)         //如果按键按下时间 > 0.5秒,长按
      {
        D4 = ~D4;           //切换D4灯的开关状态
      }
      else                  //否则为短按
      {
        D6 = ~D6;           //切换D6灯的开关状态
      } 
    }
  }
}
/*==========================主函数============================*/
void main()
{
  Init_Port();              //端口初始化
  Init_Timer1();            //定时器1初始化
  while(1)
  {
    Scan_Keys();            //循环扫描按键
  }
}

【视频教程】:基于定时器的长按与短按

前后台的程序设计思维模式

【前台系统】:一般指中断级程序,即中断服务函数
【后台系统】:一般指任务级程序,即死循环中的主函数
【实现逻辑】:中断服务函数中的逻辑处理受到主函数运行的制约,主函数中的某些功能又取决于中断服务函数中的变量,两者相互关联,相互制约,协同运行。

【视频教程】: 前后台程序设计思维模式与应用

课后拓展

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
【1】程序开始运行时,4个LED灯闪烁2下后熄灭此时SW1按键和SW2按键均处于锁定状态,即单击这两个按键均不能控制任何LED灯的开关状态。
【2】D5为开关指示灯,D3D4为照明灯。
【2】在按键锁定的状态下,长按SW1按键松开后,D5灯点亮SW1按键和 SW2按键 处于解锁状态。
【3】在按键解锁状态下,单击SW1按键,可切换D3的开关状态;单击SW2按键,可切换D4的开关状态。
【4】在按键解锁的状态下,长按SW1按键松开后,关闭灯光系统,D5指示灯熄灭,D3D4不管处于什么状态均熄灭SW1按键和SW2按键重新回到锁定状态。

赞(5)
未经允许不得转载:小蜜蜂笔记 » 【CC2530应用开发14】基于定时器的长按与短按

小蜜蜂笔记 更专业 更方便 更高效

联系我们精品小店