51单片机38译码管实时显示时间日期代码并在按键按下后在串口助手上记录时间日期
时间: 2024-02-22 12:55:52 浏览: 23
以下是51单片机38译码管实时显示时间日期代码,并在按键按下后在串口助手上记录时间日期的代码:
```c
#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
sbit D5 = P2^4;
sbit D6 = P2^5;
sbit D7 = P2^6;
sbit D8 = P2^7;
sbit S1 = P3^0;
uchar const code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
uchar sec = 0, min = 0, hour = 0, day = 0, month = 0, year = 0;
void delay(uint xms)
{
uint i, j;
for (i = xms; i > 0; i--)
for (j = 112; j > 0; j--);
}
void display(uchar d1, uchar d2, uchar d3, uchar d4, uchar d5, uchar d6, uchar d7, uchar d8)
{
D1 = 1; P0 = table[d1]; D1 = 0;
D2 = 1; P0 = table[d2]; D2 = 0;
D3 = 1; P0 = table[d3]; D3 = 0;
D4 = 1; P0 = table[d4]; D4 = 0;
D5 = 1; P0 = table[d5]; D5 = 0;
D6 = 1; P0 = table[d6]; D6 = 0;
D7 = 1; P0 = table[d7]; D7 = 0;
D8 = 1; P0 = table[d8]; D8 = 0;
}
void init()
{
TMOD = 0x01;
TH0 = 0x4c;
TL0 = 0x00;
TR0 = 1;
}
void timer0() interrupt 1
{
TH0 = 0x4c;
TL0 = 0x00;
sec++;
if (sec == 60)
{
sec = 0;
min++;
if (min == 60)
{
min = 0;
hour++;
if (hour == 24)
{
hour = 0;
day++;
if (day == 32)
{
day = 1;
month++;
if (month == 13)
{
month = 1;
year++;
}
}
}
}
}
}
void main()
{
uchar i;
init();
while (1)
{
display(day/10, day%10, month/10, month%10, year/10, year%10, hour/10, hour%10);
delay(1);
display(0x0c, 0x00, min/10, min%10, sec/10, sec%10, 0x0c, 0x00);
delay(1);
if (!S1)
{
printf("20%02d-%02d-%02d %02d:%02d:%02d\r\n", year, month, day, hour, min, sec);
while (!S1);
}
}
}
```
此代码使用了定时器0来实现时间的实时更新,使用了38译码器来驱动数码管显示时间日期,使用了按键S1来记录时间日期,并通过串口输出到电脑上。