51单片机实现60秒秒表计时器
时间: 2023-05-22 11:05:37 浏览: 2810
51单片机实现60秒秒表计时器的代码如下:
```c
#include <reg52.h>
sbit S1 = P3^2; // 开始/暂停按键
sbit S2 = P3^3; // 复位按键
unsigned char second = 0; // 计时器计数器
void delay(unsigned int ms) // 延时函数
{
unsigned int i, j;
for (i = ms; i > 0; i--)
{
for (j = 125; j > 0; j--);
}
}
void timer0Init() // 定时器0初始化
{
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = 0x4c; // 设置定时器0的初值为0x4c06,计时1ms
TL0 = 0x06;
ET0 = 1; // 允许定时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动定时器0
}
void timer0() interrupt 1 // 定时器0中断处理函数
{
TH0 = 0x4c;
TL0 = 0x06;
if (S1 == 0) // 开始/暂停按键被按下
{
delay(20); // 延时处理抖动
if (S1 == 0) // 确认按键被按下
{
while (S1 == 0); // 等待按键释放
TR0 = ~TR0; // 启动/暂停计时器
}
}
if (S2 == 0) // 复位按键被按下
{
delay(20); // 延时处理抖动
if (S2 == 0) // 确认按键被按下
{
while (S2 == 0); // 等待按键释放
second = 0; // 计时器计数器清零
}
}
if (TR0 == 1) // 计时器正在计时
{
if (++second >= 60) // 如果计时器计数器达到60,则重置计数器并闪烁LED
{
second = 0;
P1 = 0xff;
delay(500);
P1 = 0x00;
}
}
}
void main()
{
timer0Init(); // 初始化定时器0
while (1); // 主循环
}
```
这是一个基于定时器0的秒表计时器程序。当按下开始/暂停按键时,计时器开始计时;再次按下开始/暂停按键时,计时器暂停计时。当按下复位按键时,计时器计数器清零。当计数器累加到60时,LED会闪烁一次,表示计时器计满了60秒。
阅读全文