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

[复制链接]
1404|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的例程!
cjseng 发表于 2018-4-14 14:17 | 显示全部楼层
逻辑问题啊
if(flag==1)              //FLag==1才会刷新一遍显示
{
   dispay(a);
   flag=0;                //刷新一遍后,flag=0;
   ES=1;                 //串口接收数据的速度跟不上刷新速度
}

结果就是显示完最后一位,就要等串口数据才会再次刷新,否则就一直停留在最后一位。
一笑遥 发表于 2018-4-25 22:24 | 显示全部楼层
前面2位显示时间短,间隔长,最后1后显示时间长,要放在定时中断里显示。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

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