打印

430数码管显示问题

[复制链接]
1137|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
menghubei|  楼主 | 2013-12-29 20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下,实现数据date的显示:

/**********************************************
程序功能:在六位数码管上显示六个数字012345
-----------------------------------------------
测试说明:观察数码管显示
***********************************************/
#include  <msp430x14x.h>
#include  "BoardConfig.h"

//数码管7位段码:0--f
uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//记录显示位数的全局变量
//uchar cnt = 0;
uchar date=237;
uchar date_a,date_b,date_c;
uchar flag = 0;

/********************主函数********************/
void main(void)
{
    WDTCTL = WDT_ADLY_1_9;        // 设置内部看门狗工作在定时器模式,1.9ms中断一次
    IE1 |= WDTIE;                 // 使能看门狗中断
   
    BoardConfig(0x88);
  
    P4DIR = 0xff;                 //设置P4,P5的IO方向为输出
    P5DIR = 0xff;                 
  
    P4OUT = 0x00;                 //设置P4,P5的输出初值
    P5OUT = 0xff;
   
    date_a = date/100;
    date_b = date%100/10;
    date_c = date%10;
  
    _BIS_SR(LPM3_bits + GIE);     //CPU进入LPM3低功耗模式,同时打开全局中断
}

/*******************************************
函数名称:watchdog_timer
功    能:看门狗中断服务函数,在这里输出数码管的
          段选和位选信号
参    数:无
返回值  :无
********************************************/
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
  
  if(flag==0)
  {
    P5OUT = 0xff;
   
    P4OUT = scandata[date_a];
    P5OUT &=~(1<<flag);
    flag=1;
  }
  
  if(flag==1)
  {
    P5OUT = 0xff;
   
    P4OUT = scandata[date_b];
    P5OUT &=~(1<<flag);
    flag=2;
  }
  
  if(flag==2)
  {
    P5OUT = 0xff;
   
    P4OUT = scandata[date_c];
    P5OUT &=~(1<<flag);
    flag = 0;
  }
}

BoardConfig.h是板子的配置文件。

程序下载后运行只显示一个数据7,另外两个数据2、3都不显示,不知道为什么,
也不知道哪里出了问题,自己是在找不到问题了,请各位帮忙看看....
跪谢啊

相关帖子

沙发
menghubei|  楼主 | 2013-12-29 20:42 | 只看该作者
硬是找不到哪里的问题:'(

使用特权

评论回复
板凳
dirtwillfly| | 2013-12-29 21:03 | 只看该作者
你的硬件是怎么样的?建议传个原理图上来

使用特权

评论回复
地板
firstblood| | 2013-12-29 23:57 | 只看该作者
软件里面找问题的吧,是你的现实的时间的太快了,需要把这每个数字显示的时间拉长的,就可以看到了

使用特权

评论回复
5
firstblood| | 2013-12-29 23:58 | 只看该作者
至于是动态显示还静态显示的,就看你的显示数字的时间延时的长短的了

使用特权

评论回复
6
yangguangaisha| | 2013-12-30 13:19 | 只看该作者
坐等大神解答

使用特权

评论回复
7
dirtwillfly| | 2013-12-30 19:59 | 只看该作者
4楼说的对,执行的太快了,只留下下面一段程序执行的能看到
if(flag==2)
  {
    P5OUT = 0xff;
   
    P4OUT = scandata[date_c];
    P5OUT &=~(1<<flag);
    flag = 0;

使用特权

评论回复
8
zxf0168| | 2013-12-30 21:00 | 只看该作者
这个数码管显示跟51的应该差不多吧,太快了不行

使用特权

评论回复
9
shenpingbing| | 2013-12-30 22:07 | 只看该作者
估计是延时的问题

使用特权

评论回复
10
niuyaliang| | 2013-12-31 13:47 | 只看该作者
1.没有硬件
2.是否你的延时消抖动问题

使用特权

评论回复
11
east森林| | 2013-12-31 13:57 | 只看该作者
哈哈,楼主没有延时的概念吧。延时在程序中非常重要。当你程序找不出bug的时候,加延时,特别是针对外设的操作

使用特权

评论回复
12
地瓜patch| | 2013-12-31 14:27 | 只看该作者
4楼厉害,延时在程序中的作用很重要,虽不起眼,但要重视
11楼说的针对外设更是重要

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝