c51单片机秒表计时程序
时间: 2023-09-03 21:12:02 浏览: 80
C51单片机秒表计时.docx
下面是一个基于C51单片机的秒表计时程序:
```
#include <reg52.h>
sbit KEY1 = P1^0; // 开始/暂停按钮
sbit KEY2 = P1^1; // 复位按钮
unsigned char second = 0; // 秒
unsigned char minute = 0; // 分
unsigned char hour = 0; // 时
void timer0_init(void)
{
TMOD = 0x01; // 定时器0工作在模式1(16位自动重装载)
TH0 = 0x4C; // 装载定时器初值,定时1ms
TL0 = 0x00;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 全局中断允许
}
void timer0_isr() interrupt 1
{
static unsigned char cnt = 0; // 定义计数器
TH0 = 0x4C;
TL0 = 0x00;
cnt++; // 计数器加1
if(cnt == 20) // 1ms * 20 = 20ms,即每20ms更新一次显示
{
cnt = 0;
second++; // 秒加1
if(second == 60) // 秒进位到分
{
second = 0;
minute++;
}
if(minute == 60) // 分进位到时
{
minute = 0;
hour++;
}
}
}
void main()
{
timer0_init(); // 定时器初始化
while(1)
{
if(!KEY1) // 开始/暂停按钮按下
{
while(!KEY1); // 等待按钮释放
if(TR0) // 定时器正在运行
{
TR0 = 0; // 停止定时器
}
else // 定时器已经停止
{
TR0 = 1; // 启动定时器
}
}
if(!KEY2) // 复位按钮按下
{
while(!KEY2); // 等待按钮释放
second = 0; // 秒清零
minute = 0; // 分清零
hour = 0; // 时清零
}
}
}
```
该程序使用定时器0实现计时,定时器0每20ms中断一次,累加计数器,当计数器累加到1s时,秒加1,当秒进位到1min时,分加1,当分进位到1hour时,时加1。程序还实现了开始/暂停和复位功能,分别通过按下P1.0和P1.1实现。
阅读全文