打印

MSP430 单片机矩阵键盘程序

[复制链接]
771|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dirtwillfly|  楼主 | 2015-12-21 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于io中断实现的矩阵键盘程序
#include <MSP430X44X.H>
unsigned char Key_Num=0 ;
void time_delay(void) ;
void Display_Num(void) ;
void Key_Process(void) ;
void main()
{
WDTCTL = WDTPW + WDTHOLD ; //停止看门狗
P4OUT = 0X00 ;
P4DIR |= 0X08 ;

P1DIR = 0X00 ; //将P1定义为输入
P1DIR |= 0X0E ; //将P1.1~P1.3定义为输出
P1OUT = 0X00 ; //P1.1~P1.3输出为0

P1IE = 0X00 ;
P1IES = 0X00 ;
P1IFG = 0X00 ;

P1IE |= 0X0E ; //P1允许中断
P1IES |= 0X0E ;
_EINT() ; //系统中断允许
while(1) ;

}
#pragma vector = PORT1_VECTOR
__interrupt void port1(void)
{
time_delay () ; //软件消抖
if((P1IN&0XF0) != 0XF0 ) //有键按下
{
Key_Process () ;
P1IFG = 0X00 ;
P1OUT = 0X0E ;
Display_Num () ;

}
}

void time_delay (void)
{
unsigned int i =1 ;
while (i--) ;
}
void Display_Num(void)
{
P4OUT = 0X08 ;
}

void Key_Process(void)
{
P1OUT=0XEF; //P1.4 OUT 0
if((P1IN & 0X02) == 0X00) Key_Num = 1 ;
if((P1IN & 0X04) == 0X00) Key_Num = 2 ;
if((P1IN & 0X08) == 0X00) Key_Num = 3 ;
P1OUT=0XDF; //P1.5 OUT 0
if((P1IN & 0X02) == 0X00) Key_Num = 4 ;
if((P1IN & 0X04) == 0X00) Key_Num = 5 ;
if((P1IN & 0X08) == 0X00) Key_Num = 6 ;
P1OUT=0XBF; //P1.6 OUT 0
if((P1IN & 0X02) == 0X00) Key_Num = 7 ;
if((P1IN & 0X04) == 0X00) Key_Num = 8 ;
if((P1IN & 0X08) == 0X00) Key_Num = 9 ;
P1OUT=0X7F; //P1.7 OUT 0
if((P1IN & 0X02) == 0X00) Key_Num = 10 ;
if((P1IN & 0X04) == 0X00) Key_Num = 11 ;
if((P1IN & 0X08) == 0X00) Key_Num = 12 ;
}


相关帖子

沙发
i1mcu| | 2015-12-21 22:23 | 只看该作者
这个应该有解释。

使用特权

评论回复
板凳
i1mcu| | 2015-12-21 22:24 | 只看该作者
好像有几个io口实现这么多输入的帖子。

使用特权

评论回复
地板
dongbaohui| | 2015-12-23 10:48 | 只看该作者
居然在中断中消抖,这不是个好习惯。

使用特权

评论回复
5
dirtwillfly|  楼主 | 2015-12-23 19:49 | 只看该作者
dongbaohui 发表于 2015-12-23 10:48
居然在中断中消抖,这不是个好习惯。

是的

使用特权

评论回复
6
309030106| | 2015-12-26 21:36 | 只看该作者
矩阵键盘用中断的话会不会太占用中断资源了

使用特权

评论回复
7
houjiakai| | 2015-12-29 22:54 | 只看该作者
矩阵键盘的消抖太难了

使用特权

评论回复
8
houjiakai| | 2015-12-29 22:56 | 只看该作者
使用adc最好了。

使用特权

评论回复
9
houjiakai| | 2015-12-29 22:56 | 只看该作者
选好效率比较高的。

使用特权

评论回复
10
intetnet| | 2016-3-22 09:47 | 只看该作者
矩阵键盘用定时器中断检测会比较好,定时器每个10ms中断一次,检测按键,如果连续监测4次以上都是一个按键值,就可以调用按键处理函数了

使用特权

评论回复
11
外方爱| | 2016-3-22 09:49 | 只看该作者
直接用ADI的键盘解析芯片多好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入TI MCU论坛      21ic TI技术交流1群:61549143(已满),  21ic TI技术交流2群:311421422 我的博客:http://blog.timcu.com/

1179

主题

34648

帖子

1115

粉丝