江湖救急!

在430F5529单片机上做一个外设矩阵键盘,搞了俩天了,希望有大神能帮我,下面时电路图和代码。代码:

#include <msp430.h>

#define key1 (P1IN&BIT5)
#define key2 (P1IN&BIT4)
#define key3 (P1IN&BIT3)
#define key4 (P1IN&BIT2)

int keyValue,column;

void twoKeyScan(void)
{

    //扫描第一列
    column = 1;
    P4OUT &= ~BIT0;
    P4OUT |= BIT3;                      //给第一列开关的一侧置高电平

    _delay_cycles(20000);

    //扫描第二列
    column = 2;
    P4OUT &= ~BIT3;
    P4OUT |= BIT0;

    _delay_cycles(20000);

}

void InitIO(void)
{
    P1DIR |= BIT0;              //Set P1.0 to output direction
    P1OUT &= ~BIT0;             //Set P1.0 low level

    P1REN |= BIT2 + BIT3 + BIT4 + BIT5;
    P1OUT &= ~(BIT2 + BIT3 + BIT4 + BIT5);

    P4DIR |= BIT7 + BIT0 + BIT3;       //Set P4.7 to output direction
    P4OUT &= ~BIT7;             //Set P4.7 low level

    P1IES &= ~(BIT2 + BIT3 + BIT4 + BIT5);
    P1IFG = 0;
    P1IE |= BIT2 + BIT3 +BIT4 + BIT5;
    P1IFG = 0;

}

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;   //Stop watchdog timer

    InitIO();

    while(1)                    //Waiting Interrupt response
    {
        twoKeyScan();           //Call function
    }

}

#pragma vector = PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
    if(column == 1)
    {
        if(key1)
        {
            _delay_cycles(20000);
            if(key1)
            {
                keyValue = 1;
                P1OUT |= BIT0;
            }
        }
        else if(key2)
        {
            _delay_cycles(20000);
            if(key2)
            {
                keyValue = 4;
                P1OUT &= ~BIT0;
            }
        }
    }

    if(column == 2)
    {
        if(key1)
        {
            _delay_cycles(20000);
            if(key1)
            {
                P4OUT |= BIT7;
                keyValue = 2;
            }
        }
        else if(key2)
        {
            _delay_cycles(20000);
            if(key2)
            {
                P4OUT &= ~BIT7;
                keyValue = 5;
            }
        }
    }

    P1IFG = 0;

}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值