用kill5编程软件写出适用于AT89C51单片机的程序:秒表系统设计:设计个2位LED数码显示秒表”,显示时间为00一99秒,每秒自动加,另设让一个“开始暂停按键”(按一次开始计时,再按一次停止计时)和一个“复位”键
时间: 2024-03-18 09:38:51 浏览: 154
好的,以下是使用Keil5编写的适用于AT89C51单片机的秒表系统程序:
```
#include <reg52.h> // 51单片机头文件
#define uint unsigned int // 定义uint为unsigned int类型
sbit start_stop = P3^0; // 开始/暂停按键,连接P3.0
sbit reset = P3^1; // 复位按键,连接P3.1
sbit LED1 = P1^0; // 第一位LED数码管,连接P1.0
sbit LED2 = P1^1; // 第二位LED数码管,连接P1.1
uint time_count = 0; // 时间计数器,初始值为0
bit start_flag = 0; // 计时开始标志位,0表示未开始,1表示已开始
bit stop_flag = 0; // 计时暂停标志位,0表示未暂停,1表示已暂停
// 延时函数
void delay(uint i)
{
while (i--);
}
// 数码管显示函数
void display(uint num1, uint num2)
{
LED1 = num1 % 10; // 显示个位数
LED2 = num2 % 10; // 显示十位数
}
// 计时函数
void timer()
{
uint i, j;
for (i = 0; i < 100; i++)
{
for (j = 0; j < 120; j++)
{
if (stop_flag) // 如果已暂停,跳出计时循环
{
stop_flag = 0; // 将暂停标志位清零
return;
}
delay(1000); // 延时1秒
time_count++; // 时间计数器加1
display(time_count / 10, time_count % 10); // 显示计时时间
}
}
}
// 主函数
void main()
{
start_stop = 1; // 开始/暂停按键初始化为高电平
reset = 1; // 复位按键初始化为高电平
display(0, 0); // 数码管初始化为0
while (1)
{
// 开始/暂停按键按下
if (start_stop == 0)
{
start_flag = !start_flag; // 取反计时开始标志位
if (start_flag) // 如果计时开始
{
timer(); // 开始计时
}
else // 如果计时暂停
{
stop_flag = 1; // 设置计时暂停标志位
}
while (!start_stop); // 等待开始/暂停按键释放
}
// 复位按键按下
if (reset == 0)
{
time_count = 0; // 时间计数器清零
start_flag = 0; // 计时开始标志位清零
stop_flag = 0; // 计时暂停标志位清零
display(0, 0); // 数码管显示清零
while (!reset); // 等待复位按键释放
}
}
}
```
这个程序实现了一个2位LED数码显示的秒表系统,可以显示00到99秒的计时。程序中使用了一个计时器和两个数码管,通过开始/暂停按键和复位按键控制计时和显示。每秒自动加,按一次开始计时,再按一次停止计时。同时,还实现了计时暂停功能,可以在计时过程中暂停计时,再次按下开始/暂停按键继续计时。
阅读全文