51单片机四位数码管显示时钟和分钟,前两位是时钟,后两位是分钟,按下k1,时钟增加一小时,按下k2,分钟增加一分钟,c语言程序显示
时间: 2023-11-21 11:04:34 浏览: 251
以下是一个示例程序,可以实现在51单片机上连接四位数码管,显示时钟和分钟,并通过按下k1/k2按钮来增加时钟/分钟:
```
#include <reg51.h>
// 数码管连接的引脚定义
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
// 按钮连接的引脚定义
sbit K1 = P1^0;
sbit K2 = P1^1;
// 当前时钟和分钟
unsigned char hour = 0;
unsigned char minute = 0;
// 数码管显示函数
void display(unsigned char num) {
// 定义数码管显示的数字和对应的码表
unsigned char code table[] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66,
0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
// 显示个位数
D1 = 1;
P0 = table[num % 10];
D1 = 0;
// 显示十位数
D2 = 1;
P0 = table[num / 10];
D2 = 0;
}
// 延时函数
void delay(unsigned int t) {
unsigned int i, j;
for (i = 0; i < t; i++) {
for (j = 0; j < 120; j++);
}
}
// 主函数
void main() {
// 循环显示时钟和分钟
while (1) {
// 显示当前时钟和分钟
display(hour);
display(minute);
// 检测是否按下k1按钮
if (K1 == 0) {
delay(10);
if (K1 == 0) {
// 增加一小时
hour++;
if (hour >= 24) {
hour = 0;
}
// 延时防止多次增加
delay(1000);
}
}
// 检测是否按下k2按钮
if (K2 == 0) {
delay(10);
if (K2 == 0) {
// 增加一分钟
minute++;
if (minute >= 60) {
minute = 0;
hour++;
if (hour >= 24) {
hour = 0;
}
}
// 延时防止多次增加
delay(1000);
}
}
}
}
```
在这个程序中,我们首先定义了数码管的引脚和按钮的引脚,并且定义了当前的时钟和分钟。然后,在主函数中,我们不断循环显示当前的时钟和分钟,并且检测是否按下k1/k2按钮,如果按下了,就增加时钟/分钟,并且防止多次增加,最后再延时一段时间,防止程序过快地增加时钟/分钟。
阅读全文