C语言 计时器的实现(利用系统55ms中断计时)

本文介绍了一种使用中断处理实现实时时间显示的技术。通过系统级中断,每55毫秒更新一次时间,并在屏幕上实时展示小时、分钟、秒和毫秒。此程序采用多种C语言函数和库,如dos.h、bios.h等,实现了高精度的时间显示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//利用系统55ms中断,显示时间
//作者:nuaazdh
//时间:2011年11月30日
#include <stdio.h>
#include <dos.h>
#include <bios.h>
#include <ctype.h>
#include <conio.h>
#include <graphics.h>
#include <math.h>

unsigned long count=0;//每55ms中断,count+1
int hour=0,minute=0,second=0,millisecond=0;
char time[10];
struct time t;

void interrupt get();
void interrupt (*old)();

//中断程序
void interrupt get()
{
	count+=1;
}

//获取时间
void Clock()
{

	millisecond=(count*55)%1000;
	second=(count*55/1000)%60;
	minute=(count*55/60000%60)%60;
	hour=(count*55/3600000%24)%24;

}

//显示时间
void PrintClock()
{
	clrscr();
	printf("\n\n\n\n");
	printf("\t\tThe beginning time:  ");
	printf("%02d:%02d:%02d\n\n",t.ti_hour,t.ti_min,t.ti_sec);
	printf("\t\tThe current time is: \n\n");
	printf("\t\tInterrupt counts:   \n\n");
	printf("\t\tPress esc to exit!");

}

//更新显示
void UpdateClock()
{
	gotoxy(38,7);//定位屏幕指定位置
	printf("%02d:%02d:%02d\n\n",hour,minute,second);//更新显示
	gotoxy(37,9);//定位中断数目位置
	printf("%06d",count);
}

//获取用户输入,检测Esc退出
void End()
{
	long key;

	while(bioskey(1)!=0)
	{
		key=bioskey(0);
		key=key&0x00FF;
		if(key==27)
		{
			setvect(0x1C,old);
			exit(0);
		}
	}
}

void main()
{
	old=getvect(0x1C);//得到中断向量
	setvect(0x1C,get);//设置中断向量
	gettime(&t);//获取时间
	PrintClock();//显示时间
	while(1)
	{
		Clock();
		UpdateClock();//更新显示
		End();
	}

}

运行效果:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值