基于msp430f149写一个检测4x4矩阵按键是否被按下的函数
时间: 2024-03-28 07:38:40 浏览: 61
好的,下面是基于msp430f149写的一个检测4x4矩阵按键是否被按下的函数的示例代码:
```
#include <msp430f149.h>
#define ROWS 4
#define COLS 4
unsigned char key_map[ROWS][COLS] = { {'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'} };
unsigned char keypad_getkey(void)
{
unsigned char row, col;
// 初始化列
P2DIR = 0x0F; // P2.0-P2.3 为输出
P2OUT = 0x0F; // P2.0-P2.3 输出低电平
// 检测行
P2DIR &= ~0xF0; // P2.4-P2.7 为输入
P2OUT |= 0xF0; // P2.4-P2.7 上拉电阻
for (col = 0; col < COLS; col++)
{
P2OUT &= ~(1 << col); // P2.0-P2.3 依次输出低电平
for (row = 0; row < ROWS; row++)
{
if (!(P2IN & (1 << (row + 4)))) // 检测行是否被按下
{
while (!(P2IN & (1 << (row + 4)))); // 等待按键释放
return key_map[row][col]; // 返回按键字符
}
}
P2OUT |= (1 << col); // P2.0-P2.3 依次恢复高电平
}
return 0; // 没有按键被按下
}
```
这个函数中,我们先定义了一个4行4列的按键映射表 `key_map`,用于存储每个按键对应的字符。然后在函数中,我们首先将键盘的列设置为输出低电平,并将行设置为输入上拉。然后,我们依次将每一列输出低电平,并检测每一行是否被按下。如果检测到有行被按下,就返回对应的按键字符;如果没有检测到按键被按下,就返回0。需要注意的是,我们检测到按键被按下后,还需要等待按键释放才能返回按键字符,否则可能会出现多次返回同一个按键字符的情况。
阅读全文