擒揭 发表于 2025-6-9 13:33:44

数码管动态显示

动态显示的基本原理

多个数码管显示数字的时候,实际上是轮流点亮数码管(一个时刻内只有一个数码管是亮的)利用人眼的视觉暂留现象(也叫余晖效应)就可以做到看起来是所有数码管都同时亮了,这就是动态显示,也叫作动态扫描
例如:有两个数码管,要显示“12”这个数字,先让高位的位选三极管导通,然后控制段选让其显示“1”,延时一定时间后再让低位的位选三极管导通,然后控制端选让其显示“2”把这个流程以一定的速度循环运行就可以让数码管显示出“12”由于交替速度非常快,人眼识别到的就是“12”这两位数字同时亮了。
6个数码管组合正计时[从0到999999再从0开始]

#include <reg52.h>

unsigned char code LedChar[] =
{
        0xC0, 0xF9, 0xA4, 0xB0, 0x99,
        0x92, 0x82, 0xF8, 0x80, 0x90
};

unsigned char code LedIndex[] =
{
        0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED
};

void main(void)
{
        unsigned int cnt = 0;//设置循环次数为0
        unsigned int sec = 0;//经过时间,单位为s
        int i = 0;//数码管序号
        int iP0 = 0, iP1 = 0, iP2 = 0, iP3 = 0, iP4 = 0, iP5 = 0;

        TMOD = 1;//设置定时器0为模式1
       
        TH0 = 0xF7;       
        TL0 = 0x00;//设置定时器0的初始值为0xF700,溢出一次0.0025s

        TR0 = 1;//启动定时器0
        P1 = LedIndex;
        P0 = LedChar;

        while (1)
        {
                if (1 == TF0)//溢出
                {
                        TH0 = 0xF7;
                        TL0 = 0x00;
                        TF0 = 0;//初始化定时器0

                        cnt++;//循环次数+1

                        if (400 == cnt)//1s       
                        {
                                sec++;
                                cnt = 0;
                                if (1000000 == sec)
                                        sec = 0;
                               
                                iP0 =sec % 10;
                                iP1 =sec / 10 % 10;
                                iP2 =sec / 100 % 10;
                                iP3 =sec / 1000 % 10;
                                iP4 =sec / 10000 % 10;
                                iP5 =sec / 100000 % 10;
                        }

                        switch (i)
                        {
                        case 0:
                                if (sec >= 0)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i++;
                                break;
                        case 1:
                                if (sec > 9)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i++;
                                break;
                        case 2:
                                if (sec > 99)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i++;
                                break;
                        case 3:
                                if (sec > 999)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i++;
                                break;
                        case 4:
                                if (sec > 9999)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i++;
                                break;
                        case 5:
                                if (sec > 99999)
                                {
                                        P1 = LedIndex;
                                        P0 = LedChar;
                                }
                                i = 0;
                                break;
                        }
                }

               
        }
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

宗和玉 发表于 2025-11-1 09:21:29

谢谢楼主提供!

髭赌 发表于 2025-12-6 15:08:17

这个好,看起来很实用

觞刈 发表于 2025-12-12 11:50:34

鼓励转贴优秀软件安全工具和文档!

玲液 发表于 2025-12-22 04:45:08

感谢分享,学习下。

垢峒 发表于 2026-1-18 00:08:43

感谢分享,学习下。

焦听云 发表于 2026-1-18 12:33:37

热心回复!

任修 发表于 2026-1-18 20:07:52

很好很强大我过来先占个楼 待编辑

卿搞笔 发表于 2026-1-18 22:49:28

感谢发布原创作品,程序园因你更精彩

告陕无 发表于 2026-1-21 16:33:49

谢谢分享,辛苦了

热琢 发表于 2026-1-23 09:05:39

前排留名,哈哈哈

骛扼铮 发表于 2026-1-26 07:40:40

感谢分享

诘琅 发表于 2026-1-26 08:59:52

感谢,下载保存了

秦晓曼 发表于 2026-2-3 04:26:40

不错,里面软件多更新就更好了

旌磅箱 发表于 2026-2-3 11:01:46

懂技术并乐意极积无私分享的人越来越少。珍惜

当贵 发表于 2026-2-4 09:24:45

感谢发布原创作品,程序园因你更精彩

老僻贞 发表于 2026-2-7 22:39:06

收藏一下   不知道什么时候能用到

驳嗦 发表于 2026-2-8 10:26:39

很好很强大我过来先占个楼 待编辑

谅潭好 发表于 2026-2-8 13:51:38

收藏一下   不知道什么时候能用到

轩辕娅童 发表于 2026-2-8 23:49:42

懂技术并乐意极积无私分享的人越来越少。珍惜
页: [1] 2
查看完整版本: 数码管动态显示