原创 AVR+外部中断0

2011-11-15 21:39 2282 7 7 分类: MCU/ 嵌入式

//外部中断 只需要设置相关寄存器就可以了 程序很短也就几句就把外部中断设置好了,但是我们要理解它的用处,本程序中只写了外部中断0的下降沿方式触发,其实它还有其他的触发方式,大家不妨试试,例如电平触发。。。。/

//-----------------------------------------------------------------
//  名称: INT0中断计数
//-----------------------------------------------------------------
//  说明: 每次按下计数键时触发INT0中断,中断程序累加计数,
//        计数值显示在三只数码管上,按下清零键时数码管清零.
//
//-----------------------------------------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>
#define INT8U   unsigned char
#define INT16U  unsigned int

//清零键按下
#define  KEY_CLEAR_ON() ((PIND & _BV(PD6)) == 0x00)
//0-9的数字编码,最后一位为黑屏(索引为10)
const INT8U DSY_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
//计数值
INT8U Count = 0;
//计数值分解后的各待显示数位
INT8U Display_Buffer[3] = {0,0,0};
//-----------------------------------------------------------------
// 在数码管上显示计数值
//-----------------------------------------------------------------
void Show_Count_ON_DSY()

 Display_Buffer[2] = Count/100;
 Display_Buffer[1] = Count%100/10;
 Display_Buffer[0] = Count%10;
 if(Display_Buffer[2]==0)
 {
  Display_Buffer[2] = 10;
  if(Display_Buffer[1]==0)
   Display_Buffer[1] = 10; 
 }

 PORTA = DSY_CODE[Display_Buffer[2]];
 PORTB = DSY_CODE[Display_Buffer[1]];
 PORTC = DSY_CODE[Display_Buffer[0]];
}
//I/O端口初始化
void Port_init()
{
 DDRA = 0XFF;
 PORTA = 0X00;
 DDRB = 0XFF;
 PORTB = 0X00;
 DDRC = 0XFF;
 PORTC = 0X00;

// DDRD = 0X00;
// PORTD = 0XFF;
}
//INT0初始化
void INT0_init()
{
 MCUCR = 0X02; //下降沿触发
 GICR = 0x40; //使能中断
 GIFR = 0x40; //标志位清零
 SREG = 0X80;
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
int main()

 Port_init();
 INT0_init();
 while(1)
 {
  if(KEY_CLEAR_ON()) 
   Count = 0;
  Show_Count_ON_DSY(); 
 }
}
//-----------------------------------------------------------------
// INT0中断函数
//-----------------------------------------------------------------
ISR (INT0_vect)
{
 Count++;
}

/再来喊下口号,嘿嘿:笑脸每天成长一点点,一棵小草也能成长为参天大树/笑脸

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条