打印

怎么让51单片机动态扫描使3位数同时显示

[复制链接]
1176|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雾物|  楼主 | 2018-4-12 17:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题是前两位只闪一下然后只有最后一位一直亮着



#include<reg52.h>
int flag,a;
sbit dula=P2^6;
sbit wela=P2^7;
char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void dispay(int a);
void delayms(int xms)
{
        int i,j;
        for(i=xms;i>0;i--)
         for(j=110;j>0;j--);
}
  void inti()
  {
        TMOD=0x20;
    TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
  }

  void main()
  {
    inti();
          while(1)
        {
                 if(flag==1)
                 {
                          dispay(a);
                         flag=0;
                         ES=1;
                 }
        }
  }
  void dispay(int a)
  {
          int b,s,g;
        b=a/100;
        s=a%100/10;
        g=a%10;
        dula=1;
        P0=table[b];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delayms(1);
         dula=1;
        P0=table[s];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delayms(1);
         dula=1;
        P0=table[g];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delayms(1);

  }
  void ser() interrupt 4
  {
           RI=0;
           a=SBUF;
           flag=1;
  }


相关帖子

沙发
混子黄| | 2018-4-13 19:36 | 只看该作者
没有循环吧。

使用特权

评论回复
板凳
h286288986| | 2018-4-14 09:33 | 只看该作者
这个不说了,好多例程参考

使用特权

评论回复
地板
fzyuan| | 2018-4-14 13:49 | 只看该作者
千万不要去看STC的例程!

使用特权

评论回复
5
cjseng| | 2018-4-14 14:17 | 只看该作者
逻辑问题啊
if(flag==1)              //FLag==1才会刷新一遍显示
{
   dispay(a);
   flag=0;                //刷新一遍后,flag=0;
   ES=1;                 //串口接收数据的速度跟不上刷新速度
}

结果就是显示完最后一位,就要等串口数据才会再次刷新,否则就一直停留在最后一位。

使用特权

评论回复
6
一笑遥| | 2018-4-25 22:24 | 只看该作者
前面2位显示时间短,间隔长,最后1后显示时间长,要放在定时中断里显示。

使用特权

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

本版积分规则

2

主题

2

帖子

0

粉丝