第一章 硬件原理图分析
第二章 配置按键中断步骤
第三章 按键中断代码配置示例
#include < ioCC2530.h >
//定义LED灯的端口
#define LED1 P1_2
#define LED2 P1_3
//定义KEY按键的端口
#define KEY1 P1_0 //定义按键为P1_0口控制
#define KEY2 P1_1 //定义按键为P1_1口控制
/*
函数功能:LED灯IO口初始化
硬件连接:LED1-- >P1_2 , LED2-- >P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3< < 2; //配置P1_2、P1_3为输出模式
LED1 = 1;
LED2 = 1;
}
/*
函数功能:初始化按键为中断模式
硬件连接:KEY1-- >P1_0 KEY2-- >P1_1
*/
void KEY_InterruptInit(void)
{
P1DIR&=~(0x3< < 0); //配置P1_0、P1_1为输入模式
P1INP|= 0x3< < 0; //上拉
P1IEN|= 0x3< < 0; //中断使能
PICTL|= 0x1< < 1; //下降沿触发(P1口所有端口都共用一个配置)
IEN2 |= 0x1< < 4; //端口P1中断使能
P1IFG&= ~(0x3< < 0);//清除中断标志位
EA = 1; //使能总中断
}
void delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=193;c >0;c--)
for(b=118;b >0;b--)
for(a=2;a >0;a--);
}
/*
函数功能:P1端口中断处理函数
*/
#pragma vector = P1INT_VECTOR //声明P1口中断服务函数的位置
__interrupt void P1_Interrupt(void) //中断服务函数的名字的可以随意命名
{
if(P1IFG&1< < 0) //判断按键1中断
{
delay10ms();
if(!KEY1)
{
LED1 = !LED1;
}
P1IFG&=~(1< < 0); //清中断状态
}
if(P1IFG&1< < 1) //判断按键2中断
{
delay10ms();
if(!KEY2)
{
LED2 = !LED2;
}
P1IFG&=~(1< < 1); //清中断状态
}
P1IF = 0; //清P1口中断标志
}
/*主函数*/
void main(void)
{
LED_Init();//初始化LED灯控制IO口
KEY_InterruptInit();//按键初始化
while(1)
{
}
}