关于键盘扫描的

2019-03-24 13:42发布


找了很久,一直没找到问题在哪,用单步调试发现p2IN总是为0

#include "msp430g2553.h"
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
#define key P2IN&0XC3      //P2口的2,3,4,5作为按键输入
void delay(uchar);
void display(uint);
uchar tt,t;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  P2DIR|=BIT0+BIT1;     //P2口的0,1位作为数码管的段选和位选
  P2OUT&=~(BIT0+BIT1);
  P2DIR&=~(BIT2+BIT3+BIT4+BIT5);  //P2口的2,3,4,5作为按键输入
  P2REN|=0x3c;     //开启P2口的2345的上拉电阻寄存器
  P2OUT|=~0xC3;     //设定2345口为高电平
  P1DIR=0XFF;
  P1OUT=0XFF;
  tt=0;      
  display(tt);
  t=P2IN;        //t是为了方便单步调试看P2IN的                            每次调试时总发现P2IN我要的2345为都为0?明明置高啦
  while(1)
        {   
            while((P2IN|0Xc3)==0XFF);     //检测是否有按键
            if((key&BIT2)==0)               //按键检测是否为P2^2;
                {        
                        delay(10);     
                        if((key&BIT2)==0)     //延时消抖
                        {
                                tt=1;   
                                display(tt);    //显示
                        }
                while((key&BIT2)==0);        //松键检测
                delay(10);
                while((key&BIT2)==0);   
                        tt=0;
                        display(tt);
                }
               
                if((key&BIT3)==0)                                //按键检测
                {        
                        delay(10);
                        if((key&BIT3)==0)
                        {
                                tt=2;
                                display(tt);
                        }
                while((key&BIT3)==0);                        //松键检测
                delay(10);
                while((key&BIT3)==0);
                        tt=0;
                        display(tt);
                }
               
                if((key&BIT4)==0)                                //按键检测
                {        
                        delay(10);
                        if((key&BIT4)==0)
                        {
                                tt=3;
                                display(tt);
                        }
                while((key&BIT4)==0);                        //松键检测
                delay(10);
                while((key&BIT4)==0);
                        tt=0;
                        display(tt);
                }
               
                if((key&BIT5)==0)                                //按键检测
                {        
                        delay(10);
                        if((key&BIT5)==0)
                        {
                                tt=4;
                                display(tt);
                        }
                while((key&BIT5)==0);                        //松键检测
                delay(10);
                while((key&BIT5)==0);
                        tt=0;
                        display(tt);
                }
        }
}
void delay(uchar z)                     //延时函数
        {
                uint x,y;
                for(x=z;x>0;x--)
                for(y=1400;y>0;y--);
        }

void display(uint tt)           //显示函数
{
  t=1;
  P2DIR=BIT0;
  P2OUT=BIT0;
  P1DIR=0xff;
  P1OUT=table[tt];
  P2OUT=0;
  P1OUT=0xff;  
  P2DIR=BIT1;
  P2OUT=BIT1;
  P1OUT=0xfe;
  delay(t);
}

[ 本帖最后由 sjwh 于 2012-8-5 16:47 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
sjwh
1楼-- · 2019-03-24 18:06
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章