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

【CC2530应用开发07】按键控制跑马灯的运行与暂停

教学内容与重难点

【内容01】理解时间片的程序设计思维。
【内容02】掌握按键控制时间片运行的程序设计思路。
【内容03】完成实训项目:按键控制跑马灯的运行与暂停。
——–学生实践实操,老师讲解演示。
【内容04】专创融合专题。

【重点】实训项目:按键控制跑马灯的运行与暂停 。
【难点】按键控制时间片运行的程序设计思路 。

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

实训案例:按键控制跑马灯的运行与暂停

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
1-设计LED灯检测函数,同时点亮4个LED灯,延时,然后同时关闭4个LED灯。灯光检测完成后,开始进入跑马灯。
2-跑马灯过程为:D4灯亮,其余熄灭,延时,D3灯亮,其余熄灭,延时,D6灯亮,其余熄灭,延时,D5灯亮,其余熄灭,延时…如此反复。
3-按下SW2松开后,跑马灯暂停保留当前状态;再次按下SW2松开后 ,从当前状态处继续运行跑马灯,当SW2按下时,不能打断跑马灯运行。

#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW2 P0_1
unsigned char F_LED = 1;
unsigned int count = 0;
/*========================跑马灯控制函数=======================*/
void LED_Running()
{
  Delay(300);                 //时间片间隔
  if(F_LED == 1)              //如果当前状态为:运行
  {
    count++;                  //时间片累计,跑马灯控制向前推进
  }
  if(count == 1)
  {
    D4 = 1;
    D3 = 0;
    D6 = 0;
    D5 = 0;
  }
  else if(count == 201)
  {
    D4 = 0;
    D3 = 1;
    D6 = 0;
    D5 = 0;
  }
  else if(count == 401)
  {
    D4 = 0;
    D3 = 0;
    D6 = 1;
    D5 = 0;
  }
  else if(count == 601)
  {
    D4 = 0;
    D3 = 0;
    D6 = 0;
    D5 = 1;
  }
  else if(count == 801)
  {
    count = 0;
  }
}
/*=======================按键扫描处理函数======================*/
void Scan_Keys()
{
  if(SW2 == 0)
  {
    Delay(200);             //去抖动处理
    if(SW2 == 0)            //确认按键按下
    {
      while(SW2 == 0)       //等待按键松开
      {
        LED_Running();      //在等待的过程中不打断跑马灯运行
      }
      
      if(F_LED == 0)        //如果当前为:暂停
      {
        F_LED = 1;          //将标志变量切换为:运行
      }
      else if(F_LED == 1)   //如果当前为:运行
      {
        F_LED = 0;          //将标志变量切换为:暂停
      }
    }
  }
}
/*==========================主函数============================*/
void main()
{
  Init_Port();              //端口初始化
  LED_Check();              //灯光检测
  while(1)
  {
    LED_Running();          //循环控制跑马灯
    Scan_Keys();            //循环扫描按键
  }
}

【视频教程】: 按键控制跑马灯的运行与暂停

课后拓展

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
【1】选择内部16MHz时钟的128分频作为计数器1的计数信号。
【2】在定时器1的模模式中实现0.1秒的间隔定时。
【3】在中断服务函数中,实现1秒的间隔定时,并翻转D4灯的开关状态,即D4灯亮1秒,灭1秒….
【4】在中断服务函数中,实现2秒的间隔定时,并翻转D3灯的开关状态,即D3灯亮2秒,灭2秒….
【5】在中断服务函数中,实现4秒的间隔定时,并翻转D6灯的开关状态,即D6灯亮4秒,灭4秒….
【6】在中断服务函数中,实现8秒的间隔定时,并翻转D5灯的开关状态,即D5灯亮8秒,灭8秒….

赞(19)
未经允许不得转载:小蜜蜂笔记 » 【CC2530应用开发07】按键控制跑马灯的运行与暂停

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

联系我们精品小店