查看: 2445|回复: 1
打印 上一主题 下一主题

msp430数码管显示问题

[复制链接]
跳转到指定楼层
沙发
发表于 2014-8-5 16:37:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在中断里设置了一个变量,每按下按键就显示那个数,我设置的是三位数,但是只显示最后一位,前两位一闪而过不显示,求助啊

主程序代码
  • #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 void  PORT1_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;
  •         }
  •     }
  • }

[color=rgb(51, 102, 153) !important]复制代码






显示代码

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



回复

使用道具 举报

板凳
发表于 2014-8-7 15:44:34 | 只看该作者
好强!真心佩服,这种代码看起来真爽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表