51单片机四位数码管显示时和分,同时按下k1分钟增加一位,按下k2始终增加一位,c语言程序显示
时间: 2023-10-08 15:09:29 浏览: 50
好的,下面是一个基于C语言的51单片机四位数码管显示时和分,同时按下k1分钟增加一位,按下k2始终增加一位的程序:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1 = P2^0; // 定义 k1 按钮输入口
sbit k2 = P2^1; // 定义 k2 按钮输入口
uchar code table[] = { // 数码管显示字表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar hour = 12; // 初始小时
uchar minute = 0; // 初始分钟
void delay(uint i) { // 延时函数
while(i--);
}
void display(uchar hour, uchar minute) { // 数码管显示函数
uchar i, j, k, l;
i = hour / 10; // 十位
j = hour % 10; // 个位
k = minute / 10; // 十位
l = minute % 10; // 个位
P0 = 0x00; // 关闭数码管
P2 = 0xfe; // 第一位数码管
P0 = table[i]; // 显示十位小时
delay(100); // 延时
P0 = 0x00; // 关闭数码管
P2 = 0xfd; // 第二位数码管
P0 = table[j]; // 显示个位小时
delay(100); // 延时
P0 = 0x00; // 关闭数码管
P2 = 0xfb; // 第三位数码管
P0 = table[k]; // 显示十位分钟
delay(100); // 延时
P0 = 0x00; // 关闭数码管
P2 = 0xf7; // 第四位数码管
P0 = table[l]; // 显示个位分钟
delay(100); // 延时
}
void main() {
while(1) {
display(hour, minute); // 显示当前时间
if(k1 == 0) { // k1 按钮按下
delay(10); // 消抖
if(k1 == 0) { // 确认 k1 按钮按下
minute++; // 分钟加一
if(minute == 60) { // 分钟满60,小时加一,分钟清零
hour++;
minute = 0;
}
if(hour == 24) { // 小时满24,小时清零
hour = 0;
}
}
while(!k1); // 等待 k1 按钮释放
}
if(k2 == 0) { // k2 按钮按下
delay(10); // 消抖
if(k2 == 0) { // 确认 k2 按钮按下
hour++; // 小时加一
if(hour == 24) { // 小时满24,小时清零
hour = 0;
}
}
while(!k2); // 等待 k2 按钮释放
}
}
}
```
这个程序中,使用了 `k1` 和 `k2` 两个按钮来控制时间的增加,其中按下 `k1` 按钮时,每次增加一分钟,按下 `k2` 按钮时,每次增加一小时。同时,程序中使用了延时函数和数码管显示函数来实现时间的显示。