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

【CC2530应用开发10】外部中断控制跑马灯的运行与暂停

教学内容与重难点

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

【重点】实训项目:外部中断控制跑马灯的运行与暂停 。
【难点】外部中断信号控制时间片运行的程序设计思路 。

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

实训案例:外部中断控制跑马灯的运行与暂停

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
1-设计LED灯检测函数,同时点亮4个LED灯,延时,然后同时关闭4个LED灯。灯光检测完成后,开始进入跑马灯。
2-跑马灯过程为:D4灯亮,其余熄灭,延时,D3灯亮,其余熄灭,延时,D6灯亮,其余熄灭,延时,D5灯亮,其余熄灭,延时…如此反复。
3-初始化SW1按键,即P1_2引脚为外部中断,下降沿触发。
4-在外部中断的服务函数中,控制跑马灯的运行与暂停互相切换。

unsigned char F_LED = 1;
/*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
  while(t--)
  {
    while(F_LED == 0);            //延时暂停
  }
}
/*========================跑马灯控制函数=======================*/
void LED_Running()
{
  D4 = 1;
  D3 = 0;
  D6 = 0;
  D5 = 0;
  Delay(60000);
  D4 = 0;
  D3 = 1;
  D6 = 0;
  D5 = 0;
  Delay(60000);
  D4 = 0;
  D3 = 0;
  D6 = 1;
  D5 = 0;
  Delay(60000);
  D4 = 0;
  D3 = 0;
  D6 = 0;
  D5 = 1;
  Delay(60000);
}
/*=======================外部中断初始化函数====================*/
void Init_INTP1()
{
  IEN2 |= 0x10;             //使能P1端口组的外部中断
  P1IEN |= 0x04;            //使能P1_2引脚的外部中断
  PICTL |= 0x02;            //下降沿触发
  EA = 1;                   //使能总中断
}
/*=======================外部中断服务函数======================*/
#pragma vector = P1INT_VECTOR
__interrupt void Service_INTP1()
{
  //判断P1端口组中,是否为P1_2引脚产生的中断触发
  if((P1IFG & 0x04) == 0x04)
  {
    if(F_LED == 1)          //切换跑马灯的暂停与运行状态
    {
      F_LED = 0;
    }
    else
    {
      F_LED = 1;
    }
  }
  
  P1IFG = 0;
  P1IF = 0;
}
/*==========================主函数============================*/
void main()
{
  Init_Port();              //端口初始化
  LED_Check();              //灯光检测
  Init_INTP1();             //外部中断初始化
  while(1)
  {
    LED_Running();          //循环控制跑马灯
  }
}

【视频教程】: 外部中断控制跑马灯的运行与暂停

赞(4)
未经允许不得转载:小蜜蜂笔记 » 【CC2530应用开发10】外部中断控制跑马灯的运行与暂停

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

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

联系我们精品小店