教学内容与重难点
【内容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灯的开关状态翻转。