这里提供一个基于51单片机的控制数码管显示时间的代码:

#include<reg52.h>   //51单片机头文件

sbit D1=P2^0;   //定义数码管'a'段连接的P2.0口
sbit D2=P2^1;   //定义数码管'b'段连接的P2.1口
sbit D3=P2^2;   //定义数码管'c'段连接的P2.2口
sbit D4=P2^3;   //定义数码管'd'段连接的P2.3口
sbit D5=P2^4;   //定义数码管'e'段连接的P2.4口
sbit D6=P2^5;   //定义数码管'f'段连接的P2.5口
sbit D7=P2^6;   //定义数码管'g'段连接的P2.6口
sbit D8=P2^7;   //定义数码管'dp'段连接的P2.7口
sbit LSA=P0^0;  //定义数码管第一位的选择端LSA连接的P0.0口
sbit LSB=P0^1;  //定义数码管第二位的选择端LSB连接的P0.1口
sbit LSC=P0^2;  //定义数码管第三位的选择端LSC连接的P0.2口

unsigned char code table[] = {   //定义显示0~9的编码表
  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};

void delay(unsigned int x) {   //延时函数
    unsigned int i,j;
    for(i=0;i<x;i++)
        for(j=0;j<110;j++);
}

void main() {
    unsigned char hour=0,minute=0,second=0;   //时分秒变量
    while(1) {
        LSA=0;LSB=0;LSC=1;   //选择第一位数码管
        P2=table[hour/10];   //显示十位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管
        LSA=0;LSB=0;LSC=1;   //选择第一位数码管
        P2=table[hour%10];   //显示个位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管

        LSA=0;LSB=1;LSC=0;   //选择第二位数码管
        P2=table[minute/10]; //显示十位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管
        LSA=0;LSB=1;LSC=0;   //选择第二位数码管
        P2=table[minute%10]; //显示个位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管

        LSA=1;LSB=0;LSC=0;   //选择第三位数码管
        P2=table[second/10]; //显示十位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管
        LSA=1;LSB=0;LSC=0;   //选择第三位数码管
        P2=table[second%10]; //显示个位数
        delay(5);            //延时一段时间
        P2=0x00;             //清空数码管

        second++;            //秒数加1
        if(second==60) {     //如果秒数达到60,则分钟加1
            second=0;
            minute++;
            if(minute==60) { //如果分钟达到60,则小时加1
                minute=0;
                hour++;
                if(hour==24)  //如果小时达到24,则清零
                    hour=0;
            }
        }
    }
}

该代码通过P0口控制数码管的位选,P2口控制数码管的段选,实现了显示当前时间的功能。需要注意的是,该代码中的延时时间需要根据具体硬件环境进行调整,以保证数码管的显示效果。

51单片机控制数码管显示时间代码 - 基于P0口位选和P2口段选

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

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