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
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况