数码管显示的问题

2019-07-15 16:17发布

下面的函数是一个用按键来控制数码管显示,我通过P1的中断来实现不断地计数加一显示,最大的显示数字是999,但是现在我的程序老是不能得到我想要的结果,那位大神能够帮我解决这个问题。

#include <msp430x14x.h>

typedef unsigned char  uchar;
typedef unsigned int uint;

uchar Table[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//所需的段的位码

#define wei_h P5OUT|= BIT5
#define wei_l P5OUT&= ~BIT5
#define duan_l   P6OUT &= ~BIT6
#define duan_h  P6OUT |= BIT6


uint x,y,z,v, date=0;//定义数据类型  


void DelayMS(uint i)
{
      uint j;
      for(;i!=0;i--)
      {
             for(j=200;j!=0;j--);
      }
}

void Pre_Display()
{

      x=date/1000;    //求千位
      y=date%1000/100;//求百位
      z=date%100/10;  //求十位
      v=date%10;      //求个位

      P4OUT=Table[z];      //显示千位
      duan_h;
      duan_l;
      P4OUT = 0XEF;
      wei_h;
      wei_l;


      DelayMS(5);          //延时

      P4OUT=Table[x];      //显示百位
      duan_h;
      duan_l;
      P4OUT = 0XDF;
      wei_h;
      wei_l;
      DelayMS(5);   //延时

      P4OUT=Table[z];      //显示十位
      duan_h;
      duan_l;
      P4OUT = 0XBF;
      wei_h;
      wei_l;
      DelayMS(5);   //延时

      P4OUT=Table[v];      //显示个位
      duan_h;
      duan_l;
      P4OUT = 0X7F;
      wei_h;
      wei_l;
      DelayMS(5);   //延时
  }

void main(void)//主函数
{
       P2DIR = 0xFF;
       P2OUT = 0xFF;
       P4DIR = 0XFF;    //设置P4口为输出
       P5DIR = 0XFF;    //设置P5口为输出
       P6DIR = 0xFF;

       P1DIR = 0x00;

       P1IE  = 0xff;   

       P1IES = 0xff;   
       P1IFG=0;        

      WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

      _BIS_SR(LPM3_bits + GIE);     //CPU进入LPM3低功耗模式,同时打开全局中断


}

#pragma vector=PORT1_VECTOR
__interrupt void P1VECTOR(void)
{
  if(P1IFG&0x08!=0)
  {
    Pre_Display();
    date++;
    if(date>=999)
      date=0;

  }





}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
yf201306
2019-07-16 06:21
ohy3686 发表于 2016-4-10 11:17
如果你是每按下一次按键,进入一次中断的话,作为动态扫描,Pre_Display();只在放在中断里面,是有问题的。

是有点问题,但是还不知道怎么解决,谢谢你的解答。

一周热门 更多>