本源码以cc2530单片机为例,SW1表示控制开关,0为按下,1为释放。根基单片机的频率和个人需要设置延迟delay变量的值
//0:释放 1:单击 2:双击 3:长按
int swstatus()
{
int delay=100;//判定延迟
int t=0;
if(SW1==1)
{
return 0;
}
if(SW1==0)
{
for(int i=delay;i>0;i--)
{
if(t==0)
{
for(int j=0;j<2000;j++)
{
if(SW1==1)
{
t=1;
break;
}
}
}
}
if(t==1)
{
for(int i=delay;i>0;0;i--)
{
for(int j=0;j<500;j++)
{
if(SW1==0)
{
while(!SW1);
return 2;
}
}
}
return 1;
}
else
{
return 3;
}
}
}
以下代码是该函数的一个应用:单击切换led灯,双击开启跑马灯,长按关闭开启所有led灯
#include "ioCC2530.h"
#include "stdio.h"
#define LED1 P1_0
#define LED2 P1_1
#define LED3 P1_3
#define LED4 P1_4
#define SW1 P1_2
void delay(unsigned int time)
{ unsigned int i;
unsigned char j;
for(i = 0; i < time; i++)
{ for(j = 0; j < 240; j++)
{ asm("NOP");
asm("NOP");
asm("NOP");
}
}
}
void light()
{
LED1 = ~LED1;
LED2 = ~LED2;
}
//get switch status,
int swstatus()
{
int delay=100;//判定延迟
int t=0;
if(SW1==1)
{
return 0;
}
if(SW1==0)
{
for(int i=delay;i>0;i--)
{
if(t==0)
{
for(int j=0;j<2000;j++)
{
if(SW1==1)
{
t=1;
break;
}
}
}
}
if(t==1)
{
for(int i=delay;i>0;i--)
{
for(int j=0;j<500;j++)
{
if(SW1==0)
{
while(!SW1);
return 2;
}
}
}
return 1;
}
else
{
return 3;
}
}
}
void main(void)
{
// P1SEL &= ~(0x01 << 0); // 设置P1.0为普通IO口,0为IO口,1为外设功能
// P1DIR |= 0x01<<0; // 设置为输出, P1DIR 为P1端口的方向寄存器,
// 0:I/O引脚切换成输入模式;1:I/O引脚切换成输出模式
// P1SEL &= ~0x07;
P1DIR |= 0x1B;
P1INP &=~0x04;
P2INP &=~0x40;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
int t=0;
while(1)
{
int swt = swstatus();
if(swt==1)
{
printf("切换灯\n");
switch(t)
{
case 0:LED1=0;LED2=1;LED3=0;LED4=0;t++;break;
case 1:LED1=0;LED2=0;LED3=1;LED4=0;t++;break;
case 2:LED1=0;LED2=0;LED3=0;LED4=1;t++;break;
case 3:LED1=1;LED2=0;LED3=0;LED4=0;t=0;break;
}
}
if(swt==2)
{
printf("跑马灯\n");
while(1)
{
LED1=0;LED2=1;LED3=0;LED4=0;delay(3000);
LED1=0;LED2=0;LED3=1;LED4=0;delay(3000);
LED1=0;LED2=0;LED3=0;LED4=1;delay(3000);
LED1=1;LED2=0;LED3=0;LED4=0;delay(3000);
if(swstatus()==2)break;
}
}
if(swt==3)
{
printf("全部灯\n");
while(1)
{
LED1=1;
LED2=1;
LED3=1;
LED4=1;
if(swstatus()==3)
{
LED1=0;
LED2=0;
LED3=0;
LED4=0;
delay(500);
break;
}
}
}
}
}
发表评论
抢沙发~