第一章 硬件原理圖分析
第二章 配置按鍵中斷步驟
第三章 按鍵中斷代碼配置示例
#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)
{
}
}
?