请用QX-MCS51开发板制作一份简易秒表,要求用到独立按键,数码管,流水灯,蜂鸣器。实验代码请详细解释
时间: 2023-08-07 07:07:31 浏览: 111
下面是使用QX-MCS51开发板制作简易秒表的实验代码,注释详细解释了每个步骤的实现。
```c
#include <REGX52.H> // 引入 MCS-51 系列芯片的头文件
sfr P4 = 0xC0; // 定义 P4 端口
unsigned char code table[] = { // 定义数码管显示表
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f, // 9
0x77, // A
0x7c, // B
0x39, // C
0x5e, // D
0x79, // E
0x71, // F
};
unsigned char second = 0; // 秒数
unsigned char minute = 0; // 分钟数
unsigned char hour = 0; // 小时数
void delay(unsigned int t) { // 延时函数
unsigned int i, j;
for (i = t; i > 0; i--) {
for (j = 110; j > 0; j--);
}
}
void display(unsigned char bit, unsigned char num) { // 数码管显示函数
P4 = 0xff; // 全部清零
P2 = bit; // 选择位
P0 = table[num]; // 显示数值
delay(1); // 延时
}
void main() {
unsigned char i;
while (1) { // 无限循环
// 按键检测
if (P1 != 0xff) { // 按键按下
delay(10); // 延时去抖动
if (P1 != 0xff) {
if (P1 == 0xfe) { // K1 按下,开始计时
while (1) { // 无限循环
display(0, hour / 10); // 显示小时的十位
display(1, hour % 10); // 显示小时的个位
display(2, minute / 10); // 显示分钟的十位
display(3, minute % 10); // 显示分钟的个位
display(4, second / 10); // 显示秒数的十位
display(5, second % 10); // 显示秒数的个位
for (i = 0; i < 20; i++) { // 流水灯闪烁
P3 = 0x7f << i;
delay(50);
}
if (++second == 60) { // 秒数加 1
second = 0;
if (++minute == 60) { // 分钟数加 1
minute = 0;
if (++hour == 24) { // 小时数加 1
hour = 0;
}
}
}
if (P1 == 0xfd) { // K2 按下,停止计时
break;
}
delay(1000); // 延时 1 秒
}
} else if (P1 == 0xfd) { // K2 按下,清零
second = 0;
minute = 0;
hour = 0;
}
}
}
// 蜂鸣器控制
if (second % 10 == 0) { // 每 10 秒响一次
P3 |= 0x80; // P3.7 输出高电平
delay(500); // 延时 0.5 秒
P3 &= ~0x80; // P3.7 输出低电平
}
}
}
```
这个简易秒表使用了独立按键来开始计时、停止计时和清零,使用了数码管来显示时间,使用了流水灯来闪烁,使用了蜂鸣器来发出提示声音。在代码中,使用了延时函数、数码管显示函数和按键检测函数来实现各种功能。具体实现步骤可以参考注释。
阅读全文