微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管动态显示

数码管动态显示

时间:10-02 整理:3721RD 点击:
如何控制八个数码管组成八位数,然后从个位数0开始计数一直计数到999999999,只能用51,两个573,不能用译码器
最好可以推荐一些学习中断的视频,感谢

一个573做段选,一个做位选,动态扫描就可以了,很简单。

不会啊,初学者

程序写了,但效果不是我想要的

只是程序,初学者伤不起啊

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code shu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x07,0x7f,0x6f};//显示1,23456·····
uint g,s,b,q,w,sw,bw,qw,i;                                                                         
void display(g,s,b,q,w,sw,bw,qw);                         //变量 确定显示的段选---A
void delay(void)   //误差 -0.434027777779us
{
    unsigned char a,b;
    for(b=100;b>0;b--)
        for(a=130;a>0;a--);
}
void main()
{
        i=0;
        TMOD=0x01;
        TH0=0x3C;
        TL0=0xB0;
        //TH0=(65536-45872)/256;                                                        //初值化
        //TL0=(65536-45872)%256;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
        {               
                //if(i==10)
                //        {
                                for(qw=0;qw<10;qw++)
                                {
                                        for(bw=0;bw<10;bw++)
                                        {
                                                for(sw=0;sw<10;sw++)
                                                {
                                                        for(w=0;w<10;w++)
                                                        {                                                                                                                 
                                                                for(q=0;q<10;q++)
                                                                {
                                                                        for(b=0;b<10;b++)
                                                                        {
                                                                                for(s=0;s<10;s++)
                                                                                {
                                                                                        for(g=0;g<10;g++)
                                                                                        {
                                                                                                    display(g,s,b,q,w,sw,bw,qw);       
                                                                                        }
                                                                                        if(g==10)
                                                                                        g=0;
                                                                                }
                                                                        }
                                       
                                                                }
                                                        }
                                                }
                                        }
                                }
                //                i=0;
                //                i++;
                //        }
        }                                                                //表示display   演示                                                                                                  
}
void display(g,s,b,q,w,sw,bw,qw)           
{
        dula=1;
        P0=shu[qw];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xfe;
        wela=0;
        delay();
        dula=1;
        P0=shu[bw];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xfd;
        wela=0;
        delay();
    dula=1;
        P0=shu[sw];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xfb;
        wela=0;
        delay();
        dula=1;
        P0=shu[w];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xf7;
        wela=0;
        delay();
        dula=1;
        P0=shu[q];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xef;
        wela=0;
        delay();
        dula=1;
        P0=shu[b];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xdf;
        wela=0;
        delay();
        dula=1;
        P0=shu[s];
        dula=0;
        P0=0xff;
       
        wela=1;
        P0=0xbf;
        wela=0;
        delay();
        dula=1;
        P0=shu[g];                                                                                                                                                          
        dula=0;
        P0=0xff;                                                //g表示个位数 ----A以下类似  
        wela=1;
        P0=0X7f;
        wela=0;
        delay();
}
void T0zhongduan() interrupt 1
{
    TH0=0x3C;
        TL0=0xB0;
        //TH0=(65536-50000)/256;                                                                                                                                                         
        //TL0=(65536-50000)%256;
        i++;
       
//        g=i%10;
//        s=i%100/10;
//        b=i%1000/100;
//        q=i%10000/1000;
//        w=i%100000/10000;
//        sw=i%1000000/100000;
//        bw=i%10000000/1000000;
//        bw=i%100000000/10000000;
                   if(i==20)
                {
                        i=0;
                        i++;
                }


                       
}

那看你是显示效果不好,还是其他的问题了,如楼上所说,一个573段选,一个573位选,用定时器做刷新就可以了,要不就上电路图和程序吧

八个数码管组成八位数,显示9个9有难度,甚至做不到。

没见过过这么多位数的计时器

我也很郁闷

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top