MSP430F149矩阵按键数码管显示
时间: 2023-10-17 19:05:16 浏览: 170
以下是 MSP430F149 矩阵按键数码管显示程序示例:
```c
#include <msp430.h>
#define KEY_PORT P2 // 按键矩阵端口
#define DIGIT_PORT P1 // 数码管端口
const unsigned char DIGIT_TABLE[10] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
const unsigned char KEY_TABLE[4][4] = {
{'7', '8', '9', '/'},
{'4', '5', '6', '*'},
{'1', '2', '3', '-'},
{'C', '0', '=', '+'}
};
unsigned char key_scan(void)
{
unsigned char i, j;
unsigned char key = 0;
for(i=0; i<4; i++)
{
KEY_PORT->DIR = 0xFF; // P2 端口所有引脚设为输出
KEY_PORT->OUT = ~(0x01 << i); // P2 输出低电平
__delay_cycles(100); // 延时一段时间等待 P2 输入稳定
key = KEY_PORT->IN; // 读取 P2 输入状态
for(j=0; j<4; j++)
{
if((key & (0x01 << j)) == 0) // 判断按键是否按下
{
return KEY_TABLE[i][j]; // 返回按键对应的字符
}
}
}
return 0; // 没有按键按下,返回 0
}
void display_digit(unsigned char digit)
{
DIGIT_PORT->OUT = DIGIT_TABLE[digit]; // 数码管输出对应的数字
}
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器
KEY_PORT->DIR = 0x0F; // 将 P2 端口低 4 位设为输出,高 4 位设为输入
KEY_PORT->REN = 0xF0; // P2 端口高 4 位启用上拉电阻
KEY_PORT->OUT = 0xF0; // P2 上拉电阻输出高电平
DIGIT_PORT->DIR = 0xFF; // 将 P1 端口所有引脚设为输出
DIGIT_PORT->OUT = 0x00; // 数码管输出低电平
while(1)
{
unsigned char key = key_scan(); // 检测按键输入状态
if(key != 0)
{
display_digit(key - '0'); // 显示按键对应的数字
}
}
return 0;
}
```
此程序使用 P2.0~P2.3 和 P2.4~P2.7 作为按键矩阵输入和上拉电阻输出,P1.0~P1.7 作为数码管输出。程序通过轮询的方式检测按键输入状态,当检测到按键按下时,显示对应的数字。
阅读全文