用单片机数码管显示当前时间,并且使用按键来控制数码管显示与否,在不显示的情况下继续计时,视频中要体现继续计时的效果的代码。
时间: 2023-04-05 18:02:28 浏览: 71
您好,我可以回答这个问题。以下是代码示例:
#include <reg52.h> // 引入单片机头文件
sbit key = P3^2; // 定义按键接口
sbit dula = P2^6; // 定义数码管段选接口
sbit wela = P2^7; // 定义数码管位选接口
unsigned char code table[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
void delay(unsigned int i) { // 延时函数
while(i--);
}
void display(unsigned char num) { // 数码管显示函数
dula = 1; // 先关闭段选
P0 = table[num]; // 显示数码
dula = 0; // 打开段选
}
void main() {
unsigned char hour = 0, minute = 0, second = 0; // 初始化时间
while(1) {
if(key == 0) { // 按键按下
delay(1000); // 延时去抖
if(key == 0) { // 确认按键按下
while(!key); // 等待按键释放
wela = !wela; // 切换数码管显示与否
}
}
if(wela) { // 如果数码管需要显示
display(hour / 10); // 显示小时的十位
wela = 0; // 关闭位选
delay(5); // 延时
display(hour % 10); // 显示小时的个位
wela = 1; // 打开位选
delay(5); // 延时
display(minute / 10); // 显示分钟的十位
wela = 2; // 打开位选
delay(5); // 延时
display(minute % 10); // 显示分钟的个位
wela = 3; // 打开位选
delay(5); // 延时
display(second / 10); // 显示秒钟的十位
wela = 4; // 打开位选
delay(5); // 延时
display(second % 10); // 显示秒钟的个位
wela = 5; // 打开位选
delay(5); // 延时
}
second++; // 秒钟加1
if(second == 60) { // 如果秒钟达到60
second = 0; // 秒钟清零
minute++; // 分钟加1
if(minute == 60) { // 如果分钟达到60
minute = 0; // 分钟清零
hour++; // 小时加1
if(hour == 24) { // 如果小时达到24
hour = 0; // 小时清零
}
}
}
}
}
希望能帮到您!