这里是一个基于8051单片机的数码管显示时间的代码:

#include <reg51.h>

#define uint unsigned int
#define uchar unsigned char

uchar code SegCode[] = { // 数码管段码表
    0x3f, 0x06, 0x5b, 0x4f,
    0x66, 0x6d, 0x7d, 0x07,
    0x7f, 0x6f, 0x77, 0x7c,
    0x39, 0x5e, 0x79, 0x71
};

void DelayMs(uint ms) { // 延时函数
    uint i, j;
    for (i = ms; i > 0; i--) {
        for (j = 110; j > 0; j--);
    }
}

void main() {
    uchar Hour = 0, Minute = 0, Second = 0; // 初始化时间
    uint Count = 0;

    TMOD = 0x01; // 定时器0工作在模式1
    TH0 = 0x3c; // 定时器0计数初值
    TL0 = 0xb0;
    TR0 = 1; // 启动定时器0

    while (1) {
        if (TF0 == 1) { // 定时器0溢出
            TF0 = 0; // 清除溢出标志
            TH0 = 0x3c; // 重新赋初值
            TL0 = 0xb0;
            Count++; // 计数器加1
            if (Count == 1000) { // 1秒到
                Count = 0; // 计数器清零
                Second++; // 秒数加1
                if (Second == 60) { // 1分钟到
                    Second = 0; // 秒数清零
                    Minute++; // 分钟数加1
                    if (Minute == 60) { // 1小时到
                        Minute = 0; // 分钟数清零
                        Hour++; // 小时数加1
                        if (Hour == 24) { // 1天到
                            Hour = 0; // 小时数清零
                        }
                    }
                }
            }
        }

        P0 = SegCode[Hour / 10]; // 显示小时的十位
        P2 = 0xfe; // 选择第一个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择

        P0 = SegCode[Hour % 10]; // 显示小时的个位
        P2 = 0xfd; // 选择第二个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择

        P0 = SegCode[Minute / 10]; // 显示分钟的十位
        P2 = 0xfb; // 选择第三个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择

        P0 = SegCode[Minute % 10]; // 显示分钟的个位
        P2 = 0xf7; // 选择第四个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择

        P0 = SegCode[Second / 10]; // 显示秒数的十位
        P2 = 0xef; // 选择第五个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择

        P0 = SegCode[Second % 10]; // 显示秒数的个位
        P2 = 0xdf; // 选择第六个数码管
        DelayMs(5);
        P2 = 0xff; // 取消选择
    }
}

这个代码使用定时器0来计时,每秒钟更新一次时间,并在数码管上显示。需要注意的是,这个代码只能在使用共阳数码管的情况下使用,如果使用共阴数码管需要修改显示段码表和选择数码管的代码。

8051 单片机数码管显示时间代码 - 实战教程

原文地址: https://www.cveoy.top/t/topic/l3aN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录