打印
[MCU]

数码管显示的问题

[复制链接]
1429|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 | 只看该作者
我该过程序后任然是把扫描放到中断里面能够看到现象,就是每按一次键会出现闪的一下,之后就只有个位辉=会显示出数字而十位百位千位不会显示。我调整扫描时间还是不行,会不会因为中断只进入一次,过去以后就会消失,请大神指教。

使用特权

评论回复
5
happy_10| | 2020-12-2 23:00 | 只看该作者
如果你是每按下一次按键,进入一次中断的话,作为动态扫描,Pre_Display();只在放在中断里面,是有问题的。

使用特权

评论回复
6
bqyj| | 2020-12-2 23:03 | 只看该作者
数码管的显示设计的有呢么难么?

使用特权

评论回复
7
tian111| | 2020-12-2 23:10 | 只看该作者
数码管的显示的设计还是很重要的

使用特权

评论回复
8
chuxh| | 2020-12-2 23:14 | 只看该作者
有可能是按键的问题

使用特权

评论回复
9
juventus9554|  楼主 | 2020-12-2 23:18 | 只看该作者
这个还真不知道呢

使用特权

评论回复
10
renyaq| | 2020-12-2 23:22 | 只看该作者
这个硬件有问题吗

使用特权

评论回复
11
pangb| | 2020-12-2 23:25 | 只看该作者
显示的问题?

使用特权

评论回复
12
morrisk| | 2020-12-2 23:31 | 只看该作者
DelayMS有问题

使用特权

评论回复
13
kangzj| | 2020-12-2 23:36 | 只看该作者
用按键来控制使用延时

使用特权

评论回复
14
hanwe| | 2020-12-2 23:40 | 只看该作者
这个具体描述一下现象

使用特权

评论回复
15
zhuww| | 2020-12-2 23:43 | 只看该作者
你显示的是什么效果呢

使用特权

评论回复
16
bqyj| | 2020-12-2 23:49 | 只看该作者
是不是没有动态扫描

使用特权

评论回复
17
shimx| | 2020-12-2 23:52 | 只看该作者
做一个松开按键的检测

使用特权

评论回复
18
pengf| | 2020-12-2 23:55 | 只看该作者
数据太快了吗?

使用特权

评论回复
19
chuxh| | 2020-12-8 22:08 | 只看该作者
按键是不是没有延时啊?

使用特权

评论回复
20
pengf| | 2020-12-8 22:13 | 只看该作者
显示的时候有什么现象

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝