Lazy_little_sun 2019-07-17 15:45 采纳率: 0%
浏览 403

MSP430F5529开发板,如何实现不接外部的上拉电阻,编写4X4键盘代码。

通过软件内部上拉电阻,

P3.0--P3.3为输出口,P3.4--P3.7为输入口上拉电阻

#include <msp430f5529.h>
unsigned int Keyscan();                   //申明按键检测函数
unsigned int key;                         //设置的返回变量
unsigned int Keyscan()                    //按键检测函数
{
    unsigned char key_ch;
    unsigned char count, j;
    P1OUT |= 0x00;
    if((P3IN & 0xF0) == 0)
    {
        __delay_cycles(10000);       //延时10ms
        if((P3IN & 0xF0) == 0)
        {
            count = 0xFE;
            while((count & 0xF0) != 0xF0);//等待按键抬起
            {
                P3OUT = count & 0x0F;
                if((P3IN & 0xF0) == 0)
                {
                    j = (P3IN & 0xF0)|0x0F;
                    key_ch = (j & count);
                    return key_ch;
                }
                else
                {
                    count = (count << 1)|0x01;
                }
            }
        }
        return 0xFF;
    }
    return 0xFF;
}
char Getkey_num(char k)
{
    char num;
    switch(k)
    {
    case 0x77:
        num = 0;
        break;
    case 0x7B:
        num = 1;
        break;
    case 0x7D:
        num = 2;
        break;
    case 0x7E:
        num = 3;
        break;
    case 0xB7:
        num = 4;
        break;
    case 0xBB:
        num = 5;
        break;
    case 0xBD:
        num = 6;
        break;
    case 0xBE:
        num = 7;
        break;
    case 0xD7:
        num = 8;
        break;
    case 0xDB:
        num = 9;
        break;
    case 0xDD:
        num = 10;
        break;
    case 0xDE:
        num = 11;
        break;
    case 0xE7:
        num = 12;
        break;
    case 0xEB:
        num = 13;
        break;
    case 0xED:
        num = 14;
        break;
    case 0xEE:
        num = 15;
        break;
    default:
        num = 122;
        break;
    }
    return num;
}

void main(void)
{
    WDTCTL=WDTPW+WDTHOLD;         // 关闭看门狗
    P1DIR |= BIT0;                //配置P1.0为输出功能
    P4DIR |= BIT7;               //接LED1
    P1OUT &= ~BIT0;             //配置P4.7为输出功能
    P4OUT &= ~BIT7;         //接LED2
    /*按键初始化*/
    P3DIR &= ~(BIT4 + BIT5 + BIT6 + BIT7);
    P3OUT |= (BIT4 + BIT5 + BIT6 + BIT7);
    P3REN |= (BIT4 + BIT5 + BIT6 + BIT7);    //设置为内部上拉
    while(1)
    {
        key = Getkey_num(Keyscan());             //按键检测
        if(key != 122)
        {
            P1OUT ^= BIT0;
        __delay_cycles(1000000);
        }
        else
        {
            P4OUT ^= BIT7;
        __delay_cycles(1000000);
        }
    }
}

代码如上,建立编译没问题,但是通过点击4X4按键,LED1(P1.0)没有点亮。
如有错误,请大佬们指出。
(是不是一定需要外部上拉电阻。)
望各位大佬指导一下,感激不尽
可以的话,能给出关键代码量。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 15:25
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题