This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP-EXP430FR2355:4x4矩阵键盘连接故障

Guru**** 2564565 points
Other Parts Discussed in Thread: MSP430FR2355, MSP-EXP430FR2355

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/790215/msp-exp430fr2355-trouble-interfacing-with-4x4-matrix-keypad

器件型号:MSP-EXP430FR2355
主题中讨论的其他器件: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---;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Madison、

    根据您的描述、当您按下键盘时、端口3输入寄存器未显示正确的值、但如果您不按下键盘、端口3输入寄存器将引脚0至3全部显示为1对吗?

    谢谢、
    是的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    抱歉、我是说 pin3不是 pin0。 但不会、当没有按下任何按钮时、仍然显示 Pin3为0 (P3IN = 0xF7)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Madison、

    好的。 由于您使用的是 MSP-EXP430FR2355 Launchpad、并且根据原理图 P3.3、通过 launchpad 上光电二极管电路的跳线连接到 GND。 您需要移除跳线、以便可以将 P3.3用作正常 GPIO。

    请参阅 MSP-EXP430FR2355 Launchpad 用户指南的第26页。
    www.ti.com/.../slau680.pdf



    谢谢、
    是的