物联网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();
    }
}

​
posted @ 2024-10-14 21:00  行醒  阅读(109)  评论(0编辑  收藏  举报