[技术讨论] 51驱动四个数码管,如何做到开始显示***0,然后递增,目前只能0000开始的递增

[复制链接]
查看234 | 回复11 | 2024-7-11 09:13:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×


#include <reg51.h>


#include <intrins.h>    //延时需要的头文件
void Delay1000ms(void)        //@12.000MHz延时函数
{
        unsigned char data i, j, k;

        _nop_();
        i = 8;
        j = 154;
        k = 122;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}


int a,b,c;              
int shi=0,bai=0,qian=0;     //十位、百位、千位默认显示数组的第一个元素0,    /*如果把第一个元素换成0XFF不显示,那进位后原本显示0的就不显示了,这里没找到好办法*/
int G[10] = {0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//定义的数组显示0-9,10个数,


void main()
{
        for(a=0; a<=9; a++)
           {
                        for(b=0; b<=9; b++)
                     {               
                                         for(c=0; c<=9; c++)
                                            {       
                                                         P3 = G[c];
                                                         P2 = G[shi];
                                                         P1 = G[bai];
                                                         P0 = G[qian];
                                                          Delay1000ms();
                                                         }
                                         shi++;            //个位显示一轮后十位+1显示
                                         if(shi == 10)     //判断十位是否加到9了,如果是则清零
                                                 {
                                                  shi = 0;
                                                 }
                                        }         
                                        bai++;             //十位显示一轮后百位+1显示
                                        if(bai == 10)      //判断百位是否加到9了,如果是则清零
                                                {
                                                 bai = 0;
                                                }
           }
           qian++;                 //百位显示一轮后千位+1显示
           if(qian == 10)          //判断千位是否加到9了,如果是则清零
                   {
                          qian = 0;
                   }
}

显示效果

                               
登录/注册后可看大图


这是程序选择的显示0000-9999,不希望上电就显示0000,应该上电显示个位0,其余不显示然后每秒递增
朋友们请问如何做到***0~**10~*100-1000~9999,*表示还没有进位的就不显示。。
回复

使用道具 举报

小白学习 | 2024-7-11 09:16:29 | 显示全部楼层
占个楼,如果在数组里添加0XFF,那么进位时如何避免显示到这个0XFF呢
重新建一个数组的话,什么时机来显示这个呢
回复

使用道具 举报

h09721 | 2024-7-15 08:13:25 | 显示全部楼层
回复

使用道具 举报

h09721 | 2024-7-15 08:13:30 | 显示全部楼层
回复

使用道具 举报

h09721 | 2024-7-15 08:13:35 | 显示全部楼层
回复

使用道具 举报

h09721 | 2024-7-29 08:18:53 | 显示全部楼层
回复

使用道具 举报

h09721 | 2024-7-29 08:18:58 | 显示全部楼层
回复

使用道具 举报

h09721 | 2024-7-29 08:19:05 | 显示全部楼层
回复

使用道具 举报

fyljx888 | 2024-9-2 19:02:46 | 显示全部楼层
//从最高为开始,遇到0不显示,遇到非0退出循环
            for (j=3; j>=1; j--)
            {
                if (buf[j] == 0)
                    LedBuff[j] = 0xFF;
                else
                    break;
            }
            //将剩余的有效数字位如实转换
            for ( ; j>=0; j--)  //for()起始未对j操作,j即保持上个循环结束时的值
            {
                LedBuff[j] = LedChar[buf[j]];
            }

网上找的,供参考
回复

使用道具 举报

h09721 | 2024-10-4 08:18:23 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

7

主题

808

回帖

994

积分

二级逆天

积分
994

终身成就奖特殊贡献奖原创先锋奖