以下是一个简单的单片机控制数码管显示时间的代码,使用的是AT89C51单片机和共阳数码管。

#include <reg51.h> // 引入单片机头文件

// 定义数码管段选编码
unsigned char code digit[10] = {
  0xc0, // 0
  0xf9, // 1
  0xa4, // 2
  0xb0, // 3
  0x99, // 4
  0x92, // 5
  0x82, // 6
  0xf8, // 7
  0x80, // 8
  0x90  // 9
};

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

void main() {
  unsigned char hour = 12; // 初始化小时数为12
  unsigned char minute = 0; // 初始化分钟数为0
  unsigned char second = 0; // 初始化秒数为0
  while (1) { // 循环显示时间
    P2 = digit[hour / 10]; // 显示十位小时数
    P0 = 0xfe; // 选择第一位数码管
    delay(5); // 延时一段时间
    P2 = digit[hour % 10]; // 显示个位小时数
    P0 = 0xfd; // 选择第二位数码管
    delay(5);
    P2 = digit[minute / 10]; // 显示十位分钟数
    P0 = 0xfb; // 选择第三位数码管
    delay(5);
    P2 = digit[minute % 10]; // 显示个位分钟数
    P0 = 0xf7; // 选择第四位数码管
    delay(5);
    P2 = digit[second / 10]; // 显示十位秒数
    P0 = 0xef; // 选择第五位数码管
    delay(5);
    P2 = digit[second % 10]; // 显示个位秒数
    P0 = 0xdf; // 选择第六位数码管
    delay(5);
    second++; // 秒数加1
    if (second == 60) { // 如果秒数达到60,则将分钟数加1
      second = 0;
      minute++;
      if (minute == 60) { // 如果分钟数达到60,则将小时数加1
        minute = 0;
        hour++;
        if (hour == 24) // 如果小时数达到24,则将小时数重置为0
          hour = 0;
      }
    }
  }
}

上述代码使用了一个循环来不断地显示当前时间,每个数码管的显示时间间隔为5毫秒,可以根据需要进行调整。在每次循环中,先分别计算出当前的小时数、分钟数和秒数,并将它们分别显示在数码管上,然后将秒数加1,如果秒数达到60,则将分钟数加1,如果分钟数达到60,则将小时数加1,如果小时数达到24,则将小时数重置为0。这样就可以实现一个简单的单片机控制数码管显示时间的功能了。

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

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

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