標(biāo)題:
CC2530中斷方式按鍵控制燈,單擊和長按效果 源程序
[打印本頁]
作者:
cler
時間:
2020-11-30 08:45
標(biāo)題:
CC2530中斷方式按鍵控制燈,單擊和長按效果 源程序
IAR, 中斷方式按鍵控制燈,單擊和長按效果
CC2530源程序如下:
/*
如果按鍵按下時間小于1秒,則切換燈的閃爍效果
如果按鍵按下時間大于1秒,則保持常亮
*/
#include <ioCC2530.h>
#define K4 P0_1
#define K5 P0_4
#define D2 P1_0
#define D1 P1_1
unsigned char flag=0;
static inline void delay(unsigned int time) //因?yàn)橹袛嗾{(diào)用了此函數(shù),
//所以要使用內(nèi)聯(lián)函數(shù)inline修飾
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<500;j++);
}
}
void main(void)
{
P1DIR |= 1<<0|1<<1;
IEN1 |= 1<<5; //使能P0中斷
P0IEN |= 1<<1; //P0_1中斷使能
PICTL |= 1<<0; //下降沿觸發(fā)
EA = 1; //使能總中斷
while(1)
{
if(flag==0)
{
D1=~D1;
delay(500);
}
else
{
D1=~D1;
delay(100);
}
}
}
#pragma vector=P0INT_VECTOR //vector小寫,結(jié)尾不能加分號
__interrupt void P0INT(void)
{
if((P0IFG&(1<<1))!=0) //P0IFG寄存器:P0口引腳中斷標(biāo)志位寄存器,
//當(dāng)對應(yīng)引腳有上升或下降沿后標(biāo)志位變1
{
unsigned int i=0;
for(i=0;i<50;i++)//500ms內(nèi)判斷50次,如果按鍵抬起馬上跳出
{
delay(10);
if(K4==1) break;
}
if(i>1)//如果不是抬起的抖動(因?yàn)殚L按抬起時的抖動會再次觸發(fā)中斷)
{
if(i!=50)//單擊
{
flag=0;
}
else //長按
{
flag=1;
}
}
P0IFG &= ~(1<<1);//清除對應(yīng)中斷標(biāo)志位
}
P0IF = 0; //P0IF位:為P0口中斷申請標(biāo)志位,
//當(dāng)P0IFG中斷標(biāo)志寄存器有位為1,并且開啟了此位的中斷時,P0IF位變1
}
/*
如果按鍵按下時間小于1秒,則切換燈的閃爍效果
如果按鍵按下時間大于1秒,則保持常亮
*/
/*
#include <ioCC2530.h>
#define K4 P0_1
#define K5 P0_4
#define D2 P1_0
#define D1 P1_1
unsigned char flag=0;
static inline void delay(unsigned int time) //因?yàn)橹袛嗾{(diào)用了此函數(shù),
//所以要使用內(nèi)聯(lián)函數(shù)inline修飾
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<500;j++);
}
}
void main(void)
{
P1DIR |= 1<<0|1<<1;
IEN1 |= 1<<5; //使能P0中斷
P0IEN |= 1<<1; //P0_1中斷使能
PICTL |= 1<<0; //下降沿觸發(fā)
EA = 1; //使能總中斷
while(1)
{
if(flag==0)
{
D1=~D1;
delay(500);
}
else
{
D1=~D1;
delay(100);
}
}
}
#pragma vector=P0INT_VECTOR //vector小寫,結(jié)尾不能加分號
__interrupt void P0INT(void)
{
if((P0IFG&(1<<1))!=0) //P0IFG寄存器:P0口引腳中斷標(biāo)志位寄存器,
//當(dāng)對應(yīng)引腳有上升或下降沿后標(biāo)志位變1
{
unsigned int i=0;
delay(10);
if(K4==0)
{
for(i=0;i<50;i++)
{
delay(10);
if(K4==1) break;
}
if(i!=50)
{
flag = 0;
}
else
{
flag = 1;
}
}
P0IFG &= ~(1<<1);//清除對應(yīng)中斷標(biāo)志位
}
P0IF = 0; //P0IF位:為P0口中斷申請標(biāo)志位,
//當(dāng)P0IFG中斷標(biāo)志寄存器有位為1,并且開啟了此位的中斷時,P0IF位變1
}
*/
復(fù)制代碼
所有程序51hei提供下載:
03-2. 中斷方式按鍵控制燈,單擊和長按效果.zip
(29.48 KB, 下載次數(shù): 6)
2020-11-30 08:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1