中科因仑“3+1”工程特种兵精英论坛
标题:
AVR外部中断怎么解决按键消抖问题?
[打印本页]
作者:
jerryzhai
时间:
2014-7-26 13:45
标题:
AVR外部中断怎么解决按键消抖问题?
/*******************************************************
* 程序功能:外部中断触发
* 接线说明:核心板JP2 PA0-PA7连接到系统底板静态数码管显示电路JP71,PD2,PD3接到JP74上的DK0,DK1
* 实验现象:按下DK0数码管加1,按下DK1数码管减1
* 日 期 : 2014/7/24
* 作 者 : 翟志刚
*******************************************************/
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar led_7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//数码管从0显示到F
uchar counter = 0;
/*******************************************************
//函数名称:delay_ms(uint k)
//函数功能:延时子程序
//入口参数:k,延时时间参数
//返回参数:无
********************************************************/
void delay_1ms(int k)
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<1000;j++)
;
}
}
// INT0中断服务程序
#pragma interrupt_handler int0:2
void int0(void)
{
counter++;
if(counter >= 16)
counter = 0;
}
// INT1中断服务程序
#pragma interrupt_handler int1:3
void int1(void)
{
counter--;
if(counter <= 0)
counter = 15;
}
void main(void)
{
PORTA = 0xFF; //初始化
DDRA = 0xFF;
//DDRD = 0x00;
SREG=0x80; // 全局中断允许
GICR|=0xC0; // 允许INT0、INT1中断
MCUCR=0x0A; // INT0、INT1下降沿触发
GIFR=0xC0; // 清除INT0、INT1中断标志位
counter = 0; // 计数单元初始化为0
while (1)
{
PORTA = led_7[counter]; // 显示计数单元
};
}
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4