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

【感知层备赛训练题】CC2530开发基础-灯光亮度等级控制

任务要求

选择找到一块国赛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;
    }
  }
}
赞(32)
未经允许不得转载:小蜜蜂笔记 » 【感知层备赛训练题】CC2530开发基础-灯光亮度等级控制

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

联系我们精品小店