用c语言写一个0~59s的c51单片机计时器设计三个按钮包括暂停开始复位等功能
时间: 2023-05-23 08:03:25 浏览: 129
基于STC89C51单片机的篮球计时计分器设计.pdf
5星 · 资源好评率100%
你可以使用定时器和外部中断来实现这个计时器。以下是一个简单的代码示例,其中 P2.0、P2.1、P2.2 是三个按钮的输入引脚。
```c
#include <STC89C5xRC.H>
#define uint unsigned int
#define uchar unsigned char
bit flag_pause = 0; // 暂停标志位
uchar second = 0; // 秒数
void init_timer() {
TMOD = 0x01; // 定时器0工作在模式1
TH0 = 0xfc; // 定时器初值,1ms
TL0 = 0x66;
TR0 = 1; // 启动计时器
ET0 = 1; // 允许定时器中断
EA = 1; // 允许全局中断
}
void init_button() {
P2 = 0xff; // P2口上拉,按钮按下时置位
IT0 = 1; // 外部中断0下降沿触发
EX0 = 1; // 允许外部中断0
}
void timer_isr() interrupt 1 {
TH0 = 0xfc;
TL0 = 0x66;
if (!flag_pause) {
second++;
if (second == 60) {
second = 0;
}
}
}
void button_isr() interrupt 0 {
if (!P2_0) { // 暂停/继续计时
flag_pause = !flag_pause;
} else if (!P2_1) { // 复位计时器
flag_pause = 1;
second = 0;
} else if (!P2_2) { // 记录时间
P1 = second;
}
while (!P2_0 || !P2_1 || !P2_2) {} // 等待按钮释放
}
void main() {
init_timer();
init_button();
while (1) {}
}
```
其中 flag_pause 是暂停标志位。在定时器中断里,如果未暂停,则增加秒数,并在秒数达到 60 时归零。在外部中断里,根据按下的不同按钮,处理暂停、复位和记录时间的功能。需要注意的是,在处理完按钮事件后,需要等待按钮释放,避免因为按住按钮而多次触发中断。
阅读全文