任务要求
选择找到一块国赛Zigbee小模块或者XMF09B开发板,由选手独立新建工程并编写、编译代码,实现按键控制灯光闪烁状态的变换,实现以下任务要求:
【1】程序开始运行:D4灯闪烁,D3、D5、D6灯熄灭。
【2】按下模块上的SW1按键松开后,实现D5、D6灯轮流闪烁。
【3】再次按下SW1按键,D5、D6灯灭。
【4】重复上述两个步骤。
参考源码
#include "ioCC2530.h"
#define D3 P1_0
#define D4 P1_1
#define D5 P1_3
#define D6 P1_4
#define SW1 P1_2
unsigned char stat = 0; //灯光状态标志
/*=======================简单的延时函数========================*/
void Delay(unsigned int t)
{
while(t--);
}
/*=======================端口初始化函数========================*/
void Init_Port()
{
P1SEL &= ~0x1b; //将P1_0,P1_1,P1_3,P1_4设置为通用I/O端口
P1DIR |= 0x1b; //将P1_0,P1_1,P1_3,P1_4设置为输出方向
P1 &= ~0x1b; //关闭4个LED灯
P1SEL &= ~0x04; //将P1_2设置为通用I/O端口
P1DIR &= ~0x04; //将P1_2设置为输入方向
P1INP &= ~0x04; //将P1_2设置为上拉/下拉
P2INP &= ~0x40; //将P1_2设置为上拉
}
/*=====================D4灯闪烁函数======================*/
void D4_Flicker()
{
D4 = 1;
Delay(60000);
D4 = 0;
Delay(60000);
}
/*=====================D5D6灯闪烁函数======================*/
void D5D6_Flicker()
{
D3 = 0;
D4 = 0;
D5 = 1;
Delay(60000);
D5 = 0;
Delay(60000);
D6 = 1;
Delay(60000);
D6 = 0;
Delay(60000);
}
/*=======================按键扫描函数=========================*/
void Scan_Keys()
{
if(SW1 == 0) //发现有SW1按键信号
{
Delay(100); //延时片刻,去抖动处理
if(SW1 == 0) //确认为SW1按键信号
{
if(stat == 0)
{
stat = 1;
}
else if(stat == 1)
{
stat = 2;
}
else if(stat == 2)
{
stat = 1;
}
while(SW1 == 0);
}
}
}
/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
while(1)
{
Scan_Keys(); //按键扫描
switch(stat)
{
case 0: //上电状态,D4闪烁
D4_Flicker();
break;
case 1: //运行状态1:D5和D6闪烁
D5D6_Flicker();
break;
case 2: //运行状态2:D3和D6熄灭
D5 = 0;
D6 = 0;
break;
}
}
}