物联网cc2530按键长按短按分别控制亮灯亮灭(详细版)

一.在编辑程序之前搭建其基本框架,如下所示

#include <iocc2530.h>

void main(void)
{
    halBoardInit();
    while(1)
    {
   
    }
}

二.确定所使用的引脚后进行宏定义

#include <iocc2530.h>

#define P1_0 LED1
#define P1_1 LED2
#define P1_2 SW1


void main(void)
{
    halBoardInit();
    while(1)
    {
   
    }
}

三.编写端口初始化

#include <iocc2530.h>

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2


void Init_port()
{
  P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
  P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}


void main(void)
{
    halBoardInit();
    while(1)
    {
   
    }

四.编辑一个简单的延时函数

#include <iocc2530.h>

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量

void Init_port()
{
  P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
  P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}

void delay(unsigned int time)
{
  while(time--);
}

void main()
{
  while(1)
   {

   }
}

五.如何区分按键长按短按,需宏定义变量和计数变量,此处宏定义变量B  30,计数变量int型,再去编辑扫描代码

#include <iocc2530.h>

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量

void Init_port()
{
  P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
  P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}

void delay(unsigned int time)
{
  while(time--);
}
unsigned int count = 0;//设置计数变量
void Scan_SW1()
{
  if(SW1 == 0)
  {
    delay(50);//延时消抖
    if(SW1 == 0)
    {
      count = 0;//每次按下扫描重置count值
      while(SW1 == 0)
      {
        delay(10000);//继续延时
        count++;//让count值自加计算按下按键的时长
      }
      if(count < B)//如果比宏定义的值小实现短按效果
      {
        LED1 = ~LED1;
      }
      else//反之如果比宏定义的值大实现长按效果
      {
        LED2 = ~LED2;
      }
    }
  }
}

void main()
{
  while(1)
   {

   }
}

五.最后一步,完成主函数main的编辑(完全代码)

#include <iocc2530.h>

#define LED1 P1_0
#define LED2 P1_1
#define SW1 P1_2
#define B 15//宏定义变量

void Init_port()
{
  P1SEL &= ~0X03;//将P1_0和P1_1设置为通用输入输出
  P1DIR |= 0X03;//将P1_0和P1_1设置为输出
}

void delay(unsigned int time)
{
  while(time--);
}
unsigned int count = 0;//设置计数变量
void Scan_SW1()
{
  if(SW1 == 0)
  {
    delay(50);//延时消抖
    if(SW1 == 0)
    {
      count = 0;//每次按下扫描重置count值
      while(SW1 == 0)
      {
        delay(10000);//继续延时
        count++;//让count值自加计算按下按键的时长
      }
      if(count < B)//如果比宏定义的值小实现短按效果
      {
        LED1 = ~LED1;
      }
      else//反之如果比宏定义的值大实现长按效果
      {
        LED2 = ~LED2;
      }
    }
  }
}

void main(void)
{
    Init_port();
    while(1)
    {
      Scan_SW1();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值