[求助] MSP430数码管显示的问题

某蓝色外功心法   2018-11-15 10:31 楼主
小弟最近在熟悉MSP430F149的时候利用学习板编了一个让八位数码管循环显示0-7数字的时候发现利用下载器下载程序进430之后,段码显示正常,但是位码一直不正常,并且每次给单片机上电的时候数码管显示的结果都不一样,程序运行结果每次都不一样,求助各位大佬帮我看看这是什么情况,多谢各位了!程序代码和学习板电路图如下:
#include "msp430x14x.h"

void delay( int i)
{
  while(i>0)
  {
    i--;
  }
}

int cnt;
int n;
int duanma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
int weima[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;


//时基模块的时钟设置
//单片机上电时,MCLK主时钟的源默认选择为DCO提供.F1系列DCO默认800KHZ.
//ACLK辅助时钟默认为XT1,XT1一般接32768HZ晶体.
//SMCLK子时钟默认为DCO,同样是800KHZ.
//XT2需要人为开启,并要检测其开启是否成功.
BCSCTL1 &= ~(XT2OFF + XTS);   //启动XT2高速时钟模块
// BCSCTL3 |= XT2S3;
//刚才开启了XT2,需要一定时间XT2才进入稳定状态.所以需要等待并检测稳定状态.
do
{
  IFG1 &=~OFIFG;              //清OSCFault 标志
  for(n=0xff;n>0;n--);         //延时等待其开启稳定  
}
while((IFG1 & OFIFG) !=0);   //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定.
                              //否则一直等下去...
BCSCTL2 |= SELM1;            //MCLK主时钟选XT2为时钟源.TX2输入不分频.
BCSCTL2 &= ~SELS;            //SMCLK选为DCO为时钟源.
//-----------------------------------------------



//-----------------初始化IO口
  P1DIR = 0xff; P1OUT = 0xff;
  P2DIR = 0xff; P2OUT = 0xff;
  P3DIR = 0xff; P3OUT = 0xff;
  P4DIR = 0xff; P4OUT = 0xff;
  P5DIR = 0xff; P5OUT = 0x5f;
  P6DIR = 0xff; P6OUT = 0xbf;

  cnt = 0;//------------------

  TACCTL0 = CCIE;
  CCR0 = 8000;
  TACTL = TASSEL_2 + MC_1;
  _EINT();
  while(1);
}

#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  _DINT();
  while(cnt<8)
  {
    P4OUT = duanma[cnt];
    P6OUT |= BIT6;
    delay(10);
    P6OUT = 0x00;
    P4OUT = weima[cnt];
    P5OUT |= BIT5;
    delay(10);
    P5OUT = 0x00;

    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);
    delay(30000);  
    cnt++;
  }
   cnt = 0;
  _EINT();
}


  • TIM截图20181115103000.jpg

回复评论 (8)

通过74HC573连接的数码管段选和位选不应该连接到同一组IO口(PD0~PD7)--->P4
吾乃等闲之辈,从黄昏到黎明
点赞  2018-11-15 11:09
引用: tuago尤 发表于 2018-11-15 11:09
通过74HC573连接的数码管段选和位选不应该连接到同一组IO口(PD0~PD7)--->P4

多谢回复!但是这个硬件连接图是学习板上已经画好了的,所以我们使用的时候也没有办法对它进行修改,如果是自己画板子的话是可以考虑这样去试一试。在这个硬件基础上理论上通过P55和P66的控制理论上是可以实现上述功能的
点赞  2018-11-15 11:14
不懂代码
导热材料www.jrftdz.com
点赞  2018-11-15 15:21
已解决!问题出在学习板本身电路设计上!
由于学习板在设计电路的时候可能并未考虑到单片机引脚的带载能力,将单片机的引脚P55直接连接到上述74HC573移位寄存器上面,与此同时P55还连接到了如下图的一个8路总线收发器以及3.3V转5V的SN74LVC4245芯片上,导致单片机P55引脚输出的高电平电压仅为大概0.3V左右,在74HC573上无法实现正确的逻辑判断,因此导致了数码管移位出现问题!
get!学到了! TIM截图20181116105443.jpg
点赞  2018-11-16 10:55
我就是过来看看啊
北京玻璃隔断www.bjtjblgd.com 法兰厂家www.zsfl888.com 丁基胶带www.djjd8.com 薄膜开关www.hbhksjdz.com
点赞  2018-11-19 20:35
跟着涨知识啦,不错的帖子啊
点赞  2018-11-29 17:05
所以说,单片机调试其实并不就是程序调试,还有硬件电路的调试
点赞  2018-12-7 18:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复