任务要求
选择找到一块国赛Zigbee模块板或者XMF09B开发板,由选手独立新建工程并编写、编译代码,实现灯光亮度的等级控制,完成以下任务要求:
【1】程序开始运行时,全部LED灯熄灭。
【2】当第1次按下SW1按键松开后,所有LED灯微亮。
【3】当第2次按下SW1按键松开后,所有LED灯全亮。
【4】当第3次按下SW1按键松开后,所有LED灯不亮。
【5】重复运行步骤2到步骤4。
完成后,将该ZigBee班放在左实训工位桌面上,接上电源,待裁判评判。要求微亮和全亮的两次状态,两次的亮度要不一样,肉眼能够明显分辨的出来,否则当作亮度一样处理。
参考源码
#include "ioCC2530.h"
#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设置为上拉
}
/*=======================全部灯光微亮=========================*/
void LED_Half()
{
P1 |= 0x1b; //输出占空比为20%的PWM信号
Delay(200); //20%周期的高电平
P1 &= ~0x1b;
Delay(800); //80%周期的低电平
}
/*=======================全部灯光全亮=========================*/
void LED_On()
{
P1 |= 0x1b;
}
/*=======================全部灯光不亮=========================*/
void LED_Off()
{
P1 &= ~0x1b;
}
/*=======================按键扫描函数=========================*/
void Scan_Keys()
{
if(SW1 == 0) //发现有SW1按键信号
{
Delay(100); //延时片刻,去抖动处理
if(SW1 == 0) //确认为SW1按键信号
{
if(SW1 == 0)
{
stat++; //灯光等级状态切换
if(stat == 4)
{
stat = 1;
}
while(SW1 == 0) //等待按键松开
{
if(stat == 2)
{
LEDHalf(); //保证PWM脉宽信号输出不中断
}
}
}
}
}
}
/*==========================主函数============================*/
void main()
{
Init_Port(); //端口初始化
while(1)
{
Scan_Keys(); //按键扫描
switch(stat) //灯光等级判断
{
case 1:
LED_Half(); //微亮
break;
case 2:
LED_On(); //全亮
break;
case 3:
LED_Off(); //不亮
break;
}
}
}