搜索
bottom↓
回复: 0

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

[复制链接]

出0入0汤圆

发表于 2014-6-9 23:26:18 | 显示全部楼层 |阅读模式
我在中断里设置了一个变量,每按下按键就显示那个数,我设置的是三位数,但是只显示最后一位,前两位一闪而过不显示,求助啊

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

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

  6. void delay(void);

  7. /********************主函数********************/
  8. void main( void )
  9. {   
  10.     WDTCTL = WDTPW + WDTHOLD;   //关闭看门狗
  11.     BoardConfig(0x88);          //打开数码管,关闭流水灯和电平转换
  12.    
  13.     P1IES = 0x0f;                       // P1.0~P1.3选择下降沿中断
  14.     P1IE = 0x0f;                        // 打开中断使能
  15.     P1DIR =0xf0;                       //设置P1.0~P.3为输入状态
  16.     P1OUT = 0xf0;
  17.     P2DIR = 0xff;
  18.     P2OUT = 0xff;
  19.     _EINT();                    //打开全局中断控制位
  20.         while(1)
  21.     {
  22.         LPM1;
  23.    
  24.         Number_Show(KeyVal);
  25.     }
  26.   
  27. }
  28. /*******************************************
  29. 函数名称:delay
  30. 功    能:用于消抖的延时
  31. 参    数:无
  32. 返回值  :无
  33. ********************************************/
  34. void delay(void)
  35. {
  36.     uint tmp;
  37.    
  38.     for(tmp = 12000;tmp > 0;tmp--);
  39. }
  40. /*******************************************
  41. 函数名称:PORT1_ISR
  42. 功    能:P1端口的中断服务函数
  43. 参    数:无
  44. 返回值  :无
  45. ********************************************/
  46. #pragma vector=PORT1_VECTOR
  47. __interrupt void  PORT1_ISR(void)
  48. {
  49.     if(P1IFG & 0x0f)
  50.     {
  51.         switch(P1IFG)
  52.         {
  53.         case 0x01:
  54.                     if(keyin == 0x0e)   //如果是第一个按键被按下
  55.                     {
  56.                         delay();
  57.                         if(keyin == 0x0e)
  58.                         {
  59.                             while(keyin != 0x0f);       //等待按键放开
  60.                             KeyVal = 101;
  61.                             LPM1_EXIT;
  62.                             P1IFG = 0;
  63.                             return;
  64.                         }
  65.                     }
  66.         case 0x02:
  67.                     if(keyin == 0x0d)   //如果是第二个按键被按下
  68.                     {
  69.                         delay();
  70.                         if(keyin == 0x0d)
  71.                         {
  72.                             while(keyin != 0x0f);       //等待按键放开
  73.                             KeyVal = 102;
  74.                             LPM1_EXIT;
  75.                             P1IFG = 0;
  76.                             return;
  77.                         }
  78.                     }
  79.         case 0x04:
  80.                     if(keyin == 0x0b)   //如果是第三个按键被按下
  81.                     {
  82.                         delay();
  83.                         if(keyin == 0x0b)
  84.                         {
  85.                             while(keyin != 0x0f);       //等待按键放开
  86.                             KeyVal = 103;
  87.                             LPM1_EXIT;
  88.                             P1IFG = 0;
  89.                             return;
  90.                         }
  91.                     }
  92.         case 0x08:
  93.                     if(keyin == 0x07)   //如果是第四个按键被按下
  94.                     {
  95.                         delay();
  96.                         if(keyin == 0x07)
  97.                         {
  98.                             while(keyin != 0x0f);       //等待按键放开
  99.                             KeyVal = 104;
  100.                             LPM1_EXIT;
  101.                             P1IFG = 0;
  102.                             return;
  103.                         }
  104.                     }
  105.         default:
  106.                     while(keyin != 0x0f);       //等待按键放开
  107.                     //KeyVal = 0;
  108.                     //LPM1_EXIT;
  109.                     P1IFG = 0;
  110.                     return;
  111.         }
  112.     }
  113. }
复制代码





显示代码

  1. //动态显示函数
  2. void Number_Show(unsigned int Num)
  3. {
  4.    unsigned char Hundred,Ten,One;
  5.    Hundred=Num/100;       //取百位
  6.    Ten=Num%100/10;        //取十位
  7.    One=Num%10;            //取个位
  8.    
  9.    //显示百位
  10.       DATA_OUT=Tab[Hundred]; //送模码
  11.       P1OUT|=BIT4;    //PA3高电平
  12.       P1OUT&=~BIT4;   //PA3低电平
  13.          
  14.       CTRL_OUT =0xfe; //送位选
  15.       P1OUT|=BIT5;    //PA3高电平
  16.       P1OUT&=~BIT5;   //PA3低电平
  17.       Delay(10);     //稍微延迟
  18.    
  19.    //显示十位
  20.       DATA_OUT=Tab[Ten];  //送模码
  21.       P1OUT|=BIT4;    //PA3高电平
  22.       P1OUT&=~BIT4;   //PA3低电平
  23.          
  24.       CTRL_OUT=0xfd;      //送位选
  25.       P1OUT|=BIT5;    //PA3高电平
  26.       P1OUT&=~BIT5;   //PA3低电平
  27.       Delay(10);         //稍微延迟
  28.      
  29.    //显示个位
  30.       DATA_OUT=Tab[One];  //送模码
  31.       P1OUT|=BIT4;    //PA3高电平
  32.       P1OUT&=~BIT4;   //PA3低电平
  33.          
  34.       CTRL_OUT=0xfb;      //送位选
  35.       P1OUT|=BIT5;    //PA3高电平
  36.       P1OUT&=~BIT5;   //PA3低电平
  37.       Delay(10);         //稍微延迟
  38.    
  39. }
复制代码


这是我学16是写的显示函数,在16上没问题,最近学msp430就问题百出求助啊

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 14:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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