历史上的今天
今天是:2025年02月09日(星期日)
2021年02月09日 | msp430单片机实现常按键和短按键加去抖功能
2021-02-09 来源:eefocus
通过P1口的中断开启定时器,然后利用定时器中断不断扫描相应的端口状态,判断按键的
//定时器设置
void TimerA1Init()
{
_UINT data = 0 ;
TA1CTL = data ;//clear all ,diaable interrupt , claer ifg
TA1CTL |= TASSEL__ACLK | ID_0 | TACLR ; // ACLK, stop mode, ,div:1 ,clear TAR
//TA0CTL |= MC__UP ;//启动定时器
TA1CCTL0 = CCIE ; //ccr0 比较中断允许
TA1CCR0 = 327 ; //ccr0 compare mode , ie disable , ifg clear
}
//P1端口中断程序
#pragma vector = PORT1_VECTOR
__interrupt void Port1ADISR( void )
{
P1IFG &= 0x0f;
switch(P1IFG)
{
case Key_Sel:
TA1CTL |= MC__UP; //启动定时器
Key_Tmp = Key_Sel;
break;
case Key_Menu:
TA1CTL |= MC__UP; //启动定时器
Key_Tmp = Key_Menu;
break;
}
P1IFG &= 0x00;
}
/***********************************************************
函数名称:__interrupt void Timer_A1_Count (void)
函数功能:
入口参数:无
出口参数:无
备 注:
***********************************************************/
#pragma vector = TIMER1_A0_VECTOR
__interrupt void Timer_A1_Count(void)
{
static _UINT i = 0;
_UBYTE P1_Value;
P1_Value = P1IN;
P1_Value &= 0x06;
switch(Key_Tmp)
{
case Key_Menu:
{
if( (P1_Value & BIT2) == 0) //按键按下
{
i++;
if(i >= 300) //常按键处理
{
BUZZER_ON;
i = 0;
//定时器停止
TimerA1_Stop;
}
}
else if((P1_Value & BIT2) != 0)//按键释放
{
if( (i >= 5) && (i < 300) ) //短按键
{
LCD_B1_RT_ON;
TimerA1_Stop;
i= 0;
}
else
{
i = 0; //否则认为是抖动;
}
}
break;
}
case Key_Sel:
{
if( (P1_Value & BIT1) == 0) //按键按下
{
i++;
}
else if( (P1_Value & BIT1) != 0) //按键释放
{
if(i > 5) //短按键处理
{
LCD_B1_RT_OFF;
TimerA1_Stop;
i = 0;
}
else
{
i = 0; //否则认为是抖动;
}
}
break;
}
}
}
史海拾趣
|
大家好,在做数字钟实验的时候,要求按下A键停止记数,按下B键恢复记数 我是这样想的:在按下A键的时候,给8259A的IR0的中断屏蔽位置1,按下B键的时候恢复置0 问题是,按下A键给8259A的IR0的中断屏蔽位置1的时候,确实IR0的中断被屏蔽掉了,从而I ...… 查看全部问答> |
|
12864液晶屏的串行、并行口驱动程序(已验证),注:晶振为7.3728MHz //********************************************************** //* 文件名: 12864.c // //* 液晶屏: 128*64 // //* 设计者:   ...… 查看全部问答> |
|
本人新手,想用定时器来扫描的方式,动态显示数码管,让前两位显示从1到99计数,但是总是停止在\"00\",希望懂的老师帮忙看看程序错在哪里了,感谢! #include #define uint unsigned int #define uchar unsigned char sbit wei=P2^1; sbit du ...… 查看全部问答> |
|
现在的电脑主板几乎都没有了 串口 现在下载程序都是用USB的 那单片机的串口应用还有意义吗?IC与IC 不是有I平方2总线? 求高手解答 小弟新手自学 买的2007年 郭天祥的实验板 可以现在的电脑都没有有串口 这个问题很郁闷啊? ...… 查看全部问答> |
|
今天老师给了一个示例自定义程序,但是其中有很多疑问,麻烦各位知道的能解答下嘛,万分感谢!其中一开始是这么定义的 ram定义和rom定义的主要区别在哪里呢? ;---------------------------------------- #define rom_reg_adr   ...… 查看全部问答> |




