thy110 发表于 2014-6-9 23:26:18

msp430+数码管显示问题,求助

我在中断里设置了一个变量,每按下按键就显示那个数,我设置的是三位数,但是只显示最后一位,前两位一闪而过不显示,求助啊

主程序代码
#include <msp430x14x.h>
#include "BoardConfig.h"
#include"shumaguan.h"
#define keyin    (P1IN & 0x0f)

uchar KeyVal = 0;   // 按键的键值

void delay(void);

/********************主函数********************/
void main( void )
{   
    WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
    BoardConfig(0x88);          //打开数码管,关闭流水灯和电平转换
   
    P1IES = 0x0f;                     // P1.0~P1.3选择下降沿中断
    P1IE = 0x0f;                        // 打开中断使能
    P1DIR =0xf0;                     //设置P1.0~P.3为输入状态
    P1OUT = 0xf0;
    P2DIR = 0xff;
    P2OUT = 0xff;
    _EINT();                  //打开全局中断控制位
      while(1)
    {
      LPM1;
   
      Number_Show(KeyVal);
    }

}
/*******************************************
函数名称:delay
功    能:用于消抖的延时
参    数:无
返回值:无
********************************************/
void delay(void)
{
    uint tmp;
   
    for(tmp = 12000;tmp > 0;tmp--);
}
/*******************************************
函数名称:PORT1_ISR
功    能:P1端口的中断服务函数
参    数:无
返回值:无
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt voidPORT1_ISR(void)
{
    if(P1IFG & 0x0f)
    {
      switch(P1IFG)
      {
      case 0x01:
                  if(keyin == 0x0e)   //如果是第一个按键被按下
                  {
                        delay();
                        if(keyin == 0x0e)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 101;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                  }
      case 0x02:
                  if(keyin == 0x0d)   //如果是第二个按键被按下
                  {
                        delay();
                        if(keyin == 0x0d)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 102;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                  }
      case 0x04:
                  if(keyin == 0x0b)   //如果是第三个按键被按下
                  {
                        delay();
                        if(keyin == 0x0b)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 103;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                  }
      case 0x08:
                  if(keyin == 0x07)   //如果是第四个按键被按下
                  {
                        delay();
                        if(keyin == 0x07)
                        {
                            while(keyin != 0x0f);       //等待按键放开
                            KeyVal = 104;
                            LPM1_EXIT;
                            P1IFG = 0;
                            return;
                        }
                  }
      default:
                  while(keyin != 0x0f);       //等待按键放开
                  //KeyVal = 0;
                  //LPM1_EXIT;
                  P1IFG = 0;
                  return;
      }
    }
}




显示代码

//动态显示函数
void Number_Show(unsigned int Num)
{
   unsigned char Hundred,Ten,One;
   Hundred=Num/100;       //取百位
   Ten=Num%100/10;      //取十位
   One=Num%10;            //取个位
   
   //显示百位
      DATA_OUT=Tab; //送模码
      P1OUT|=BIT4;    //PA3高电平
      P1OUT&=~BIT4;   //PA3低电平
         
      CTRL_OUT =0xfe; //送位选
      P1OUT|=BIT5;    //PA3高电平
      P1OUT&=~BIT5;   //PA3低电平
      Delay(10);   //稍微延迟
   
   //显示十位
      DATA_OUT=Tab;//送模码
      P1OUT|=BIT4;    //PA3高电平
      P1OUT&=~BIT4;   //PA3低电平
         
      CTRL_OUT=0xfd;      //送位选
      P1OUT|=BIT5;    //PA3高电平
      P1OUT&=~BIT5;   //PA3低电平
      Delay(10);         //稍微延迟
   
   //显示个位
      DATA_OUT=Tab;//送模码
      P1OUT|=BIT4;    //PA3高电平
      P1OUT&=~BIT4;   //PA3低电平
         
      CTRL_OUT=0xfb;      //送位选
      P1OUT|=BIT5;    //PA3高电平
      P1OUT&=~BIT5;   //PA3低电平
      Delay(10);         //稍微延迟
   
}

这是我学16是写的显示函数,在16上没问题,最近学msp430就问题百出求助啊
页: [1]
查看完整版本: msp430+数码管显示问题,求助