外部中断LED
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 // P1.0 口控制 LED1
#define KEY1 P0_1 // P0.1 口控制 S1
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}
void InitLed(void)
{
P1DIR |= 0x01; //P1.0 定义为输出口
LED1 = 1; //LED1 灯上电默认为熄灭
}
void InitKey()
{
P0IEN |= 0x2; // P0.1 设置为中断方式 1:中断使能
PICTL |= 0x1; //端口 0 下降沿触发
IEN1 |= 0x20; //允许 P0 口中断
P0IFG = 0x00; //初始化中断标志位
EA = 1; //打开总中断
}
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
DelayMS(10); //延时去抖
LED1 = ~LED1; //改变 LED1 状态
P0IFG = 0; //清中断标志
P0IF = 0; //清中断标志
}
void main(void)
{
InitLed(); //设置 LED 灯相应的 IO 口
InitKey(); //设置 S1 相应的 IO 口
while(1)
{
}
}
P0_ISR(void) 中断处理函数
描 述: #pragma vector = 中断向量,紧接着是中断处理程序
外部中断控制LED倒流水灯
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0 //定义 P1.0 口为 LED1 控制端
#define LED2 P1_1 //定义 P1.1 口为 LED2 控制端
#define LED3 P1_4 //定义 P1.4 口为 LED3 控制端
#define KEY1 P0_1 //定义 P0.1 口为 S1 控制端
uchar KeyValue=0; //产生中断保存中断状态,1 为产生按键中断
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<535; j++);
}
void InitLed(void)
{
P1DIR |= 0x13; //P1.0、P1.1、P1.4 定义为输出
LedOnOrOff(1); //使所有 LED 灯默认为熄灭状态
}
void InitKey()
{
P0IEN |= 0x2; // P0.1 设置为中断方式 1:中断使能
PICTL |= 0x1; //下降沿触发
IEN1 |= 0x20; //允许 P0 口中断
P0IFG = 0x00; //初始化中断标志位
EA = 1; //打开总中断
}
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG > 0) //按键中断
{
DelayMS(10); //延时去抖
if(P0IFG > 0) //按键中断
{
KeyValue = 1; //产生中断保存中断状态
}
}
P0IFG = 0; //清中断标志
P0IF = 0; //清端口 0 中断标志
}
void main(void)
{
InitLed(); //设置 LED 灯相应的 IO 口
InitKey(); //设置 KEY 相应的 IO 口
while(1)
{
if(KeyValue == 1) //如果按键按下 LED3、LED2、LED1 将倒序流水灯闪烁
{
LED3 = !LED3;
DelayMS(200);
LED2 = !LED2;
DelayMS(200);
LED1 = !LED1;
DelayMS(200);
KeyValue = 0;
}
}
}