数码管显示的问题

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条回答
powersource
1楼-- · 2019-07-15 16:25
 精彩回答 2  元偷偷看……
hanyonstyle
2楼-- · 2019-07-15 18:03
楼上说得对,顶一下
yf201306
3楼-- · 2019-07-15 23:50
powersource 发表于 2016-4-9 21:07
你的程序是使用动态扫描,可是你的扫描只是放在了中断里面,只有在中断的时候才会进行扫描,那样是看不的
你应该将那个扫描的程序放在主函数里面并且加上 WHILE(1),然后那个低功耗模式也是没有必要的,可以去掉,或者你可以将你的扫描程序放在定时器中断里面,这样就能够进入低功耗模式,而且数码管又能进行扫描了 ...

可是我该过程序后任然是把扫描放到中断里面能够看到现象,就是每按一次键会出现闪的一下,之后就只有个位辉=会显示出数字而十位百位千位不会显示。我调整扫描时间还是不行,会不会因为中断只进入一次,过去以后就会消失,请大神指教。
ohy3686
4楼-- · 2019-07-16 03:41
如果你是每按下一次按键,进入一次中断的话,作为动态扫描,Pre_Display();只在放在中断里面,是有问题的。
yf201306
5楼-- · 2019-07-16 06:21
ohy3686 发表于 2016-4-10 11:17
如果你是每按下一次按键,进入一次中断的话,作为动态扫描,Pre_Display();只在放在中断里面,是有问题的。

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

一周热门 更多>