#用keil和proteus设计单片机电子时钟,要求4位八段数码管显示小时分钟,中间的作为秒闪烁,两个按键,一个递增小时一个递增分钟
#有偿谢谢各位大佬!keil文件和proteus连接图都要,满足要求一定会采纳的!

#用keil和proteus设计单片机电子时钟,要求4位八段数码管显示小时分钟,中间的作为秒闪烁,两个按键,一个递增小时一个递增分钟
#有偿谢谢各位大佬!keil文件和proteus连接图都要,满足要求一定会采纳的!

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
sbit beep = P2 ^ 3;
sbit key1 = P3 ^ 2;
sbit key2 = P3 ^ 3;
uint time;
uchar second, minute, hour;
void delay(uint z)
{
while (z--);
}
void init()
{
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void interrupt_timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
time++;
if (time == 50)
{
time = 0;
second++;
if (second == 60)
{
second = 0;
minute++;
if (minute == 60)
{
minute = 0;
hour++;
if (hour == 24)
{
hour = 0;
}
}
}
}
}
void main()
{
init();
while (1)
{
if (!key1)
{
delay(200);
if (!key1)
{
hour++;
if (hour == 24)
{
hour = 0;
}
while (!key1)
;
}
}
if (!key2)
{
delay(200);
if (!key2)
{
minute++;
if (minute == 60)
{
minute = 0;
}
while (!key2)
;
}
}
P1 = table[hour / 10];
P0 = 0xfe;
delay(5);
P0 = 0xff;
P1 = table[hour % 10];
P0 = 0xfd;
delay(5);
P0 = 0xff;
P1 = 0x80;
P0 = 0xfb;
delay(5);
P0 = 0xff;
P1 = table[minute / 10];
P0 = 0xf7;
delay(5);
P0 = 0xff;
P1 = table[minute % 10];
P0 = 0xef;
delay(5);
P0 = 0xff;
if (second % 2 == 0)
{
P1 = 0xff;
P0 = 0xdf;
delay(5);
P0 = 0xff;
}
}
}
需要以下元件:
C51 单片机:AT89S52
八段数码管:5V
按键 K1 和 K2:5V
外部晶振:5V
电阻:1KΩ
如何连接:
C51 单片机的 P0 口连接到八段数码管的段选端,P1 口连接到数码管的数值选择端。按键 K1 和 K2 分别连接到单片机的 P3.2 和 P3.3 口。定时器的输入源选择为外部晶振。
仅供参考,望采纳,谢谢。