主题中讨论的其他器件:MSP430FR2355、
您好!
我尝试将4x4矩阵键盘与 MSP430FR2355键盘连接。 我在 P3.0-P3.3上将4列设置为输入、在 P3.4-P3.7上将4行设置为输出。 我将输入连接到内部上拉电阻器、因此它们的默认值应为1、并且我还将输出设置为默认高电平。 要找到按下的按键、我将逐一检查并将一行设置为低电平、然后检查是否在该列上按下了任何按钮(如果按下了某个按钮、该输入引脚应读为0)。 但是、P3IN 未读取正确的值、并且始终显示 P3.0 (列0)等于零。 我评论说、引脚排列可查看其他按钮是否正常工作、但 P3IN 未注册按下的右侧按钮。 我在下面发布了我的代码。
#include
#include
#include
#include
#include
#include "msp430fr2355.h"
#define COL0 (P3IN 和 BIT0)
#define COL1 (P3IN 和 BIT1)
#define col2 (P3IN 和 BIT2)
#define col3 (P3IN 和 BIT3)
#define 按0
//函数
char getKey (void);
void delay_ms (unsigned int ms);
int main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
字符键[]=";
while (1){
key[0]= getKey ();
}
}
char getKey (void){
P3SEL0 &= 0x00;
P3DIR = 0xF0;
P3OUT &= 0x00;
P3REN |= 0x0F;//Enable 电阻器
P3OUT |= 0xFF;//将电阻器设置为上拉
delay_ms (100);
//扫描行0
P3OUT &=(~BIT4);//将 P3.4设置为低电平
if (COL0 ==按){
//delay_ms (50);
返回0x31;//1
}
if (col1 ==印刷机){
//delay_ms (50);
返回0x32;//2
}
if (col2 ==印刷机){
//delay_ms (50);
返回0x33;//3
}
if (col3!=按){
//delay_ms (50);
返回0x41;//a
}
P3OUT |=(BIT4);
//扫描行1
P3OUT &=(~BIT4);//将 P3.5置为低电平
if (COL0 ==按){
//delay_ms (50);
返回0x34;//4
}
if (col1 ==印刷机){
//delay_ms (50);
返回0x35;//5
}
if (col2 ==印刷机){
//delay_ms (50);
返回0x36;//6
}
if (col3 ==印刷机){
//delay_ms (50);
返回0x42;//B
}
P3OUT |=(BIT5);
//扫描行2
P3OUT &=(~BIT6);//将 P3.6设置为低电平
if (COL0 ==按){
//delay_ms (50);
返回0x37;//7
}
if (col1 ==印刷机){
//delay_ms (50);
返回0x38;//8
}
if (col2 ==印刷机){
//delay_ms (50);
返回0x39;//9
}
if (col3 ==印刷机){
//delay_ms (50);
返回0x43;//C
}
P3OUT |=(BIT6);
//扫描行3
P3OUT &=(~BIT7);//将 P3.7置为低电平
if (COL0 ==按){
//delay_ms (50);
返回0x2A;//星型
}
if (col1 ==印刷机){
//delay_ms (50);
返回0x30;//0
}
if (col2 ==印刷机){
//delay_ms (50);
返回0x23;//#
}
if (col3 ==印刷机){
//delay_ms (50);
返回0x44;//D
}
P3OUT |=(BIT7);
返回0x00;//NULL
}
void delay_ms (unsigned int ms){
while (ms){
__DELAY_CYCLLES (1000);//1000 (对于1MHz)(默认时钟设置)
MS---;
}
}