[MCU] 数码管显示的问题

[复制链接]
1811|27
 楼主| juventus9554 发表于 2020-12-2 22:43 | 显示全部楼层 |阅读模式
下面的函数是一个用按键来控制数码管显示,我通过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;

  }

}
houcs 发表于 2020-12-2 22:47 | 显示全部楼层
你的程序是使用动态扫描,可是你的扫描只是放在了中断里面,只有在中断的时候才会进行扫描,那样是看不的
zyf部长 发表于 2020-12-2 22:53 | 显示全部楼层
应该将那个扫描的程序放在主函数里面并且加上 WHILE(1),然后那个低功耗模式也是没有必要的,可以去掉,或者你可以将你的扫描程序放在定时器中断里面,这样就能够进入低功耗模式,而且数码管又能进行扫描了
yufe 发表于 2020-12-2 22:56 | 显示全部楼层
我该过程序后任然是把扫描放到中断里面能够看到现象,就是每按一次键会出现闪的一下,之后就只有个位辉=会显示出数字而十位百位千位不会显示。我调整扫描时间还是不行,会不会因为中断只进入一次,过去以后就会消失,请大神指教。
happy_10 发表于 2020-12-2 23:00 | 显示全部楼层
如果你是每按下一次按键,进入一次中断的话,作为动态扫描,Pre_Display();只在放在中断里面,是有问题的。
bqyj 发表于 2020-12-2 23:03 | 显示全部楼层
数码管的显示设计的有呢么难么?
tian111 发表于 2020-12-2 23:10 | 显示全部楼层
数码管的显示的设计还是很重要的
chuxh 发表于 2020-12-2 23:14 | 显示全部楼层
有可能是按键的问题
 楼主| juventus9554 发表于 2020-12-2 23:18 | 显示全部楼层
这个还真不知道呢
renyaq 发表于 2020-12-2 23:22 | 显示全部楼层
这个硬件有问题吗
pangb 发表于 2020-12-2 23:25 | 显示全部楼层
显示的问题?
morrisk 发表于 2020-12-2 23:31 | 显示全部楼层
DelayMS有问题
kangzj 发表于 2020-12-2 23:36 | 显示全部楼层
用按键来控制使用延时
hanwe 发表于 2020-12-2 23:40 | 显示全部楼层
这个具体描述一下现象
zhuww 发表于 2020-12-2 23:43 | 显示全部楼层
你显示的是什么效果呢
bqyj 发表于 2020-12-2 23:49 | 显示全部楼层
是不是没有动态扫描
shimx 发表于 2020-12-2 23:52 | 显示全部楼层
做一个松开按键的检测
pengf 发表于 2020-12-2 23:55 | 显示全部楼层
数据太快了吗?
chuxh 发表于 2020-12-8 22:08 | 显示全部楼层
按键是不是没有延时啊?
pengf 发表于 2020-12-8 22:13 | 显示全部楼层
显示的时候有什么现象
您需要登录后才可以回帖 登录 | 注册

本版积分规则

900

主题

12190

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部