#pragma interrupt_handler INT1_ISR:3
#include
#include
#define SET_LED PORTB|=BIT(0);
#define CLR_LED PORTB&=~BIT(0);
#define KEY0 PD2
#define KEY1 PD3
volatile int k=0;
//======================================================================
/*延时函数*/
void delay_ms(unsigned char i)
{
unsigned char a, b;
for (a = 1; a < i; a++)
{
for (b = 1; b; b++)
{
;
}
}
}
//======================================================================
// 函 数: LED0_shanshuo_1s()
// 实现功能: LED0 1s闪烁
//======================================================================
void LED0_shanshuo_1s(void)
{
DDRB |= BIT(0);
while(1)
{
delay_ms(1000);
SET_LED;
delay_ms(1000);
CLR_LED;
}
}
//======================================================================
// 函 数: LED0_shanshuo_02s()
// 实现功能: LED0 0.2s闪烁
//======================================================================
void LED0_shanshuo_02s(void)
{
DDRB |= BIT(0);
while(1)
{
delay_ms(200);
SET_LED;
delay_ms(200);
CLR_LED;
}
}
//INT0
void INT0_ISR(void)
{
if((GIFR&0x40)==0x40)
{
//LED0_shanshuo_1s();
k=1;
}
}
//INT1
void INT1_ISR(void)
{
if((GIFR&0x80)==0x80)
{
//LED0_shanshuo_02s();
k=2;
}
}
//======================================================================
// 函 数: void main(void)
// 实现功能: 外部中断
//======================================================================
void main()
{
int temp;
DDRD &= ~(BIT(KEY0) | BIT(KEY1)); // 设置PD2、PD3口为输入口
PORTD |= BIT(KEY0) | BIT(KEY1); // 设置PD2、PD3口为上拉电阻
DDRB |= BIT(0); // 设置PB0为输出口
DDRB=0XFF;
MCUCR |= BIT(ISC01) | BIT(ISC11); // 下降沿触发
GICR = BIT(INT0) | BIT(INT1); // 允许外部中断INT0、INT1
SREG |= 0X80; //使能全局中断
//SEI();
LED0_shanshuo_1s();
while(1)
{
if(k!=0)
{
switch(k)
{
case 1:
LED0_shanshuo_1s();
break;
case 2:
LED0_shanshuo_02s();
break;
default:
break;
}
}
}
}