微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于独立键盘

关于独立键盘

时间:10-02 整理:3721RD 点击:
//实现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单片机上运行时,竟然可以不用延时消抖,甚至数秒级的消抖,我实在不解,请高手指点


延时你去卡一下时间..绝对不是1ms

延时时间可能有问题,建议你查一下,这是的小组,欢迎加入http://bbs.elecfans.com/group-352-1.html

你的问题 没有说清楚....
另外 你写程序的风格不提倡!  还有,430有很多外部中断。按键的话,最好使用中断.

,程序风格有问题吗,我可是老老实实的模块化

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top