这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 我的键盘程序,大侠指点指点!!!!

共2条 1/1 1 跳转至

我的键盘程序,大侠指点指点!!!!

院士
2006-09-17 18:14:16     打赏
我的键盘程序,大侠指点指点!!!!



关键词: 我的     键盘     程序     大侠     指点    

院士
2006-12-22 22:43:00     打赏
2楼
问 以下是我的键盘中断和响应程序,请大家指导,并希望那位大侠有键盘软开关机的思路或例子也请告诉我。谢谢!!!!sir5163.com

/* ********************独立式键盘判断子程序***************** */
// 四键采用中断方式响应
// 下降沿触发P1端口中断
// P4口的低四位用发光二极管输出显示键盘响应情况
// sir5 调试通过
/* ******************************************************** */
#include <MSP430x14x.h>
unsigned char keyb;
unsigned long w;
void delay(int v)
{
while(v!=0)v--;
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P4DIR=0XFF;
P4OUT=0X0F;
for (w=0;w<5000;w++);
P4OUT=0X00;
keyb =0x00;
P1DIR=0XF0; // 低四位输入
// P1OUT=0X0F;
P1IES=0XFF; // 下降沿触发
P1IE=0X0F; //低四位允许P1中断
_EINT(); // Enable interrupts

while(1)
{
switch (keyb)
{
case 1: // 仪器开关按键
{keyb =0x00;
P4OUT |=0X01;
// for (w=0;w<5000;w++);
delay(50000);
}
break;
case 2:
{
P4OUT |=0X02;
keyb =0x00;
for (w=0;w<5000;w++);
}
break;
case 4:
{
P4OUT |=0X04;
keyb =0x00;
for (w=0;w<5000;w++);
}
break;
case 8:
P4OUT |=0X08;
keyb =0x00;
for (w=0;w<5000;w++);
break;

default:
break;
}// end switch

/* 填程序位置 */
P4OUT = 0X00;
_NOP();

_NOP();

}
}


#pragma vector=PORT1_VECTOR // 端口1的中断处理程序
__interrupt void PORT1ISR (void)
{
unsigned long i; // 换成整形,减小响应时间

if ((~P1IN & 0X0F) !=0)
for (i=0;i<10000;i++);
if ((~P1IN & 0X0F) !=0)

keyb = ~P1IN & 0X0F;

else
keyb = 0;

P1IFG=0X00;

} 1: 行就顶一下!!! 2: 各位看看 3: 没必要这么繁琐 4: 他只是一个例子,将来的程序还是你自己做。 5: 我没有做过,感觉还不错 6: 感觉的不错的就顶 7: 不用中断也可以做的很好的!
你的键好象没有弹起的判断,这样就容易造成一键多次识别的的问题!
另外你的消抖处理的也不是很好的,好象不太容易过EMC 8: 中断中有延时程序不好 9: 键盘下降沿触发,按下后不松开,则没有下一次的下降沿,可以连续识别吗?我在做板子时按键出加了0.1uF的电容应该可以了。我的项目中是这样处理的,到现在还是很稳定的。中断中也可以不要延时程序,但是电容须加大。用电容消抖动也是一种方法。我这里要做软件开关机,所以选择中断的方法。


不错,用扫描法也可以做到。程序的功能实现由很多中方法,看你方便用那种,喜欢用那种。实际的应用中又需要怎么处理。扫描的我也做了。程序也有,但我觉得没有必要贴了,那个太简单。 10: 如果有定时器的话可以在中断后开定时器,在定时器中判断按键值,我觉的这种方法比较好

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]