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

【CC2530应用开发05】多按键联合控制灯光开关

教学内容与重难点

【内容01】实训项目:多按键联合控制灯光开关。
——–先讲解项目的思考方向,再由同学们独立完成,阶段性随堂考查。
【内容02】专创融合专题。

【重点】独立完成项目: 多按键联合控制灯光开关 。
【难点】按键状态的标志和按键制约的处理。

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

实训案例:多按键联合控制灯光开关

新建工程,编写代码,在XMF09B/XMF09C开发套件上,完成以下任务:
1-D4为总开关指示灯,D6和D5为照明灯,SW1为总开关,SW2为照明控制开关。系统上电后,4个LED灯处于关闭状态。
2-按下SW1松开后,总开关打开,D4灯点亮,这时SW2按下有效;再次按下SW1松开后,总开关关闭,D4、D6、D5灯熄灭,SW2按下无效。
3-当总开关打开时,SW2有效,第1次按下松开后,点亮D6,第2次按下松开后,点亮D5,第3次按下松开后,关闭D6和D5灯,如此往复。

【注】本题考核,不提供关键代码分析,网络学员如果需要,可通过邮件索取:ohy3686@qq.com

【视频教程】:外部中断控制LED灯开关

//引入CC2530的头文件与引脚宏定义
#include "ioCC2530.h"

#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
//设计普通延时函数
void Delay(unsigned int t)
{
  while(t--);
}
//设计端口初始化函数
void Init_Port()
{
  //设置端口的功能
  P1SEL &= ~0x1B;
  //设置端口的方向
  P1DIR |= 0x1B;
  //关闭LED灯
  P1 &= ~0x1B;
}
//外部中断初始化函数设计
void Init_INTP1()
{
  P1IFG = 0x00;
  //使能P1端口组中断
  IEN2 |= 0x10;   // 0001 0000
  //使能P1引脚的中断 P1_2
  P1IEN |= 0x04;  // 0000 0100
  //选择外部中断信号的触发类型
  PICTL |= 0x02;
  //使能总中断
  EA = 1;
}
//外部中断服务函数设计
#pragma vector = P1INT_VECTOR
__interrupt void Service_INTP1()
{
  if((P1IFG & 0x04) == 0x04)              // xxxx x0xx & 0000 0100 
  {
    D5 = ~D5;
  }
  P1IFG = 0x00;
  P1IF = 0;
}
//主函数的编写
void main()
{
  Init_Port();
  Init_INTP1();
  while(1)
  {
    D4 = 1;
    Delay(60000);
    Delay(60000);
    D4 = 0;
    Delay(60000);
    Delay(60000);
  }
}

课后作业

在国赛Zigbee黑色模块或XMF09B开发板上,完成以下任务:
【1】启动后,D4灯循环闪烁,其他三个LED灯熄灭。
【2】SW1按键,即P1_2引脚外部中断设置为下降沿触发。
【3】SW2按键,即P0_1引脚外部中断设置为上升沿触发。
【4】设计P0端口中断服务函数,外部中断响应后,将D5灯的开关状态翻转。
【5】设计P1端口中断服务函数,外部中断响应后,将D3灯的开关状态翻转。

赞(18)
未经允许不得转载:小蜜蜂笔记 » 【CC2530应用开发05】多按键联合控制灯光开关

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

联系我们精品小店