关于独立键盘

2019-07-16 03:12发布

//实现4个独立按键的功能,对应的体现在数码管上
#include "MSP430X14X.H"

//宏定义
typedef unsigned char uchar;
typedef unsigned int  uint;

//定义独立按键的输入量
#define keyin    (P1IN & 0x0F)

//数码管的编码表
uchar scandata[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                      0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

//调用的函数声明
void Inital_Port(void);
void delay_ms(uint i);

int main( void )
{
     uchar temp,keyval = 0;
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    //对引脚进行初始化
     Inital_Port();
    while(1)
    {
        if(keyin != 0x0f)       //如果有键被按下
        {
           //delay_ms(20);        //延时消抖
            if(keyin != 0x0f)   //再次检测按键状态
            {
                temp=keyin;
                while(keyin != 0x0f);   //等待按键被放开
                switch(temp)    //转换键值   
                {
                case 0x0e:
                            keyval = 1;break;
                case 0x0d:
                            keyval = 2;break;
                case 0x0b:
                            keyval = 3;break;
                case 0x07:
                            keyval = 4;break;
                default:
                            keyval = 0;break;
                }
                P5OUT = scandata[keyval]; //用一位数码管显示
                P3OUT &= ~BIT4;           //P3.4连接的LED闪烁一下
                delay_ms(20);delay_ms(20);
                P3OUT |= BIT4;
            }
        }
    }
  return 0;
}
/*******************************
延时函数
********************************/
void delay_ms(uint i)
{
uint j;

for(j=1000;j>0;j--)
{
    for(;i>0;i--)
    {;}
}

}
/***********************************
端口初始化函数
**********************************/
void Inital_Port(void)
{
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;
    P1OUT = 0XFF;

    P2DIR = 0XFF;
    P2OUT = 0XFF;

    P3DIR = 0XFF;
    P3OUT = 0XFF;

    P4DIR = 0XFF;
    P4OUT = 0XFF;

    P5DIR = 0XFF;
    P5OUT = 0XFF;

    P6DIR = 0XFF;
    P6OUT = 0XFF;

    P1DIR = BIT7;               //设置P1.0~P.6为输入状态,P.7为输出
    P1OUT = 0;
    P3DIR |= BIT4;              //设置P3.4为输出状态
    P3OUT |= BIT4;              //P3.4输出1,控制LED D9
    P4DIR = 0xff;
    P5DIR = 0xff;
    P5OUT = 0xc0;               //P4控制数码管段
    P4OUT = 0x00;               //P5控制数码管位
}
这是我对独立键盘的程序,原本没有什么新意,只是普通的延时消抖,可是在430单片机上运行时,竟然可以不用延时消抖,甚至数秒级的消抖,我实在不解,请高手指点





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。