c51单片机秒表计时程序
时间: 2023-08-12 18:05:35 浏览: 117
C51单片机秒表计时(C语言).doc
下面是一个简单的C51单片机秒表计时程序示例:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar ms, sec, min, hour;
void delay_ms(uint n);
void display_time(void);
void main(void)
{
TMOD = 0x01; // 设置计时器0为模式1,仅用于计时
TH0 = 0;
TL0 = 0; // 初始化计时器0的初值为0
ET0 = 1; // 允许计时器0中断
EA = 1; // 允许总中断
TR0 = 1; // 启动计时器0
while(1) {
display_time(); // 显示当前时间
}
}
void timer0_isr(void) interrupt 1
{
TH0 = 0;
TL0 = 0; // 重置计时器0的初值为0
ms++; // 每次中断加1ms
if(ms >= 100) { // 如果1秒钟已过
sec++; // 秒数加1
ms = 0; // 毫秒数清零
if(sec >= 60) { // 如果1分钟已过
min++; // 分钟数加1
sec = 0; // 秒数清零
if(min >= 60) { // 如果1小时已过
hour++; // 小时数加1
min = 0; // 分钟数清零
if(hour >= 24) { // 如果1天已过
hour = 0; // 小时数清零
}
}
}
}
}
void display_time(void)
{
uchar i;
uchar code table[] = { // 数码管显示表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
};
uchar digit[] = { // 分别保存时、分、秒的个位和十位数字
hour / 10, hour % 10, min / 10, min % 10, sec / 10, sec % 10
};
for(i = 0; i < 6; i++) { // 依次显示时、分、秒的个位和十位数字
P2 = (P2 & 0xc0) | 0x01; // 选择第i个数码管
P0 = table[digit[i]]; // 显示对应数字
delay_ms(5); // 延时一段时间
P0 = 0x00; // 关闭数码管
}
}
void delay_ms(uint n)
{
uint i, j;
for(i = 0; i < n; i++) {
for(j = 0; j < 125; j++) {
}
}
}
```
这个程序使用计时器0每隔1ms中断一次,计算当前的秒表时间,并在数码管上显示出来。程序中使用了一个保存时、分、秒的个位和十位数字的数组,以便于在显示时、分、秒的十位数时可以判断是否需要显示0。注意,这个程序仅供参考,具体实现可能需要根据实际情况进行修改。
阅读全文