用keil5编程软件写出适用于AT89C51单片机的程序,51芯片:秒表系统设计:设计个2位LED数码显示秒表”,显示时间为00一99秒,每秒自动加,另设让一个“开始暂停按键”(按一次开始计时,再按一次停止计时)和一个“复位”键
时间: 2024-03-18 09:39:01 浏览: 83
好的,我理解了你的要求。下面是 AT89C51 单片机上实现秒表系统的程序。
```c
#include <reg52.h>
// 定义端口和引脚
sbit LED_1 = P1^0;
sbit LED_2 = P1^1;
sbit START_STOP = P3^4;
sbit RESET = P3^5;
// 定义全局变量
unsigned char second = 0; // 秒
unsigned char start_stop = 0; // 开始/停止标志
// 函数声明
void delay(unsigned int time);
void display(unsigned char number);
void main() {
EA = 1; // 开启总中断允许
ET0 = 1; // 开启定时器0中断允许
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0x4C; // 定时器0赋初值,1ms
TL0 = 0x00;
TR0 = 1; // 开启定时器0
while (1) {
if (START_STOP == 0) {
delay(10); // 消除按键抖动
if (START_STOP == 0) {
start_stop = !start_stop; // 切换开始/停止状态
}
while (START_STOP == 0); // 等待按键释放
}
if (RESET == 0) {
delay(10); // 消除按键抖动
if (RESET == 0) {
second = 0; // 秒数清零
}
while (RESET == 0); // 等待按键释放
}
display(second); // 显示秒数
}
}
// 定时器0中断服务函数
void timer0() interrupt 1 {
TH0 = 0x4C; // 定时器0赋初值,1ms
TL0 = 0x00;
if (start_stop) {
second++; // 秒数加1
if (second == 100) {
second = 0; // 秒数归零
}
}
}
// 数码管显示函数
void display(unsigned char number) {
LED_1 = number / 10; // 数码管1显示十位数
LED_2 = number % 10; // 数码管2显示个位数
}
// 延时函数
void delay(unsigned int time) {
unsigned int i, j;
for (i = 0; i < time; i++) {
for (j = 0; j < 110; j++);
}
}
```
程序中,我们使用定时器0实现计时功能,每个定时器0中断周期为1ms,当开始/停止按键按下时,程序将切换开始/停止状态,当复位按键按下时,秒数将被清零。程序中还使用了一个显示函数和一个延时函数。请注意,程序中使用了 P3^4 和 P3^5 两个引脚作为开始/停止按键和复位按键,请根据实际情况进行修改。
希望这个程序能够满足你的需求。
阅读全文