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

【感知层备赛训练题】CC2530开发基础-按键控制流水灯运行

任务要求

选择找到一块国赛Zigbee小模块或者XMF09B开发板,由选手独立新建工程并编写、编译代码,实现按键控制流水灯运行,完成以下任务要求:
【1】程序开始运行时,D4、D3、D6、D5灯全亮一会,然后全灭一会,开始进入流水灯。
【2】流水灯的运行过程为:D4灯亮,其余熄灭,过一会,D3灯亮,其余熄灭,过一会,D6灯亮,其余熄灭,过一会,D5灯亮,其余熄灭,过一会…如此反复运行流水灯。
【3】按下SW1按键松开后,流水灯暂停保留当前状态;再一次SW1按键松开后,从当前状态保留处继续运行流水灯,在按下SW1按键时,不能打断流水灯的运行

参考源码

#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 F_LED = 0;    //流水淡运行标志
unsigned int count = 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_Running()
{
  Delay(100);             //定义时间片
  if(F_LED == 1)          //如果处于运行状态,则累加时间片
  {
    count++;
  }
  if(count < 1000)        //根据时间进行流水变换
  {
    D4 = 1;          D3 = 0;          D6 = 0;           D5 = 0;
  }
  else if(count < 2000)
  {
    D4 = 0;          D3 = 1;          D6 = 0;           D5 = 0;
  }
  else if(count < 3000)
  {
    D4 = 0;          D3 = 0;          D6 = 1;           D5 = 0;
  }
  else if(count < 4000)
  {
    D4 = 0;          D3 = 0;          D6 = 0;           D5 = 1;
  }
  else
  {
    count = 0;              //流水周期结束,时间片计数清零
  }
}
/*=======================按键扫描函数=========================*/
void Scan_Keys()
{
  if(SW1 == 0)            //发现有SW1按键信号
  {
    Delay(100);           //延时片刻,去抖动处理
    if(SW1 == 0)          //确认为SW1按键信号
    {
      while(SW1 == 0)
      {
        LED_Running();    //在按键按下时,不打断流水灯运行
      }
      if(F_LED == 0)
      {
        F_LED = 1;        //流水灯运行标志
      }
       else if(F_LED == 1)
      {
        F_LED = 0;        //流水灯暂停标志
      }
    }
  }       
}
/*==========================主函数============================*/
void main()
{
  Init_Port();            //端口初始化
  D4 = 1;                 //全亮
  D3 = 1;          
  D6 = 1;           
  D5 = 1;
  Delay(60000); 
  Delay(60000); 
  D4 = 0;                 //全灭
  D3 = 0;          
  D6 = 0;           
  D5 = 0;
  Delay(60000); 
  Delay(60000); 
  F_LED = 1;              //开启流水灯运行
  while(1)
  {
    Scan_Keys();          //按键扫描
    LED_Running();        //流水灯运行
  }
}
赞(76)
未经允许不得转载:小蜜蜂笔记 » 【感知层备赛训练题】CC2530开发基础-按键控制流水灯运行

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

联系我们精品小店