C语言定时器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言定时器相关的知识,希望对你有一定的参考价值。

如何用C语言制作一个定时器,比如说我要做一个智力问答程序,时间限制60秒,如果60秒之后就执行某个函数或某段代码,要怎么实现?

这个程序用多线程比较好解决.

#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;

const int MAX_SECOND = 1000 * 60;

DWORD WINAPI MyThread(PVOID pParam)

int nSum = 0;

DWORD dwFirstTime = GetTickCount();

cout<<"做题开始,请在"<<MAX_SECOND / 1000 <<"秒内回答."<<endl;
do

cout<<"1 + 2 = ? 请回答:"<<endl;
nSum = getch();
cout<<char(nSum)<<endl;
if(nSum == 3 + '0')

cout<<"答案正确"<<endl;
return 0;

while(GetTickCount() - dwFirstTime <= MAX_SECOND);

return 0;


int main()

HANDLE hThread = CreateThread(NULL, 0, MyThread, 0, NULL, NULL);
WaitForSingleObject(hThread, MAX_SECOND);
CloseHandle(hThread);
return 0;
参考技术A #include<time.h>
time_t t;
struct tm *timer;
time(&t);//t返回系统当前时间
timer=localtime(&t);//返回tm结构时间,
这样取得系统时间,再跟已定时间比较,相等则触发
结构tm定义如下:
struct tm

int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;;
参考技术B 我手头没编译器,所以没调试,你试试看先
#include <stdio>
#include <windows.h>

main()

int ms;
long start = GetTickCount();

scanf("%d",&ms);

printf("wait for %d second...",ms);

while(GetTickCount() < start + ms * 1000);

//your code here
参考技术C #include<conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>

#define N 10

void fun()

printf("OK,now fun() start!!");
getch();


void main()

clock_t start,end;
int i=0;

start=end=clock();
for(i=0;i<N;i++)

Sleep(1000);
end=clock();


fun();
本回答被提问者采纳
参考技术D #include "stdio.h"
#include "time.h"

main()

开始做题;

clock_t start,end;
int n = 60;
start=end=clock();
while((n-(int)(end-start)/19)>=0)

sleep(1);
end=clock();


提交试卷;

分别用汇编语言和C语言设计: 采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码

分别用汇编语言和C语言设计:
采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码管显示。

ORG 0000H 
LJMP MAIN 
ORG 000BH 
LJMP T0ISR 
ORG 0030H 
MAIN: 
     MOV TMOD,#01H
     MOV TH0,#HIGH(65536-50000)
     MOV TL0,#LOW((65536-50000)  
     SETB TR0
     SETB ET0 
     SETB EA
     MOV R0,#0
     MOV R2,#0
     SJMP $
T0ISR:
     CLR TR0 
     MOV TH0,#HIGH(65536-50000)
     MOV TL0,#LOW((65536-50000)  
     SETB TR0 
     INC R0 
     CJNE R0,#20,T0E
     INC R2
     CJNE R2,#10,T001
     MOV R2,#0
T001: 
     MOV A,R2
     MOV DPTR,#TABLE
     MOV A,@A+DPTR 
     MOV P0,A
T0E: 
     RETI
TABLE:      ; 共阴极数码管显示代码表
          DB    3FH,06H,5BH,4FH,66H ;01234
          DB    6DH,7DH,07H,7FH,6fh ;56789

        END

 

 

#include<reg51.h>

#define uchar unsigned char

uchar table[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f;
uchar num,dat;

void t0isr() interrupt 1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

num++;

if(num>=20)

    

    num=0;

    dat++;

    dat%=10;

    P0=table[dat];

    

main()

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

num=0;

dat=0;

while(1);

追问

谢谢

追答

呵呵,希望可以帮到你。

追问

谢谢 能再帮我回答这个问题吗?简述中断系统的工作流程。

参考技术A ORG 00HAJMP MAINORG 0BHAJMP T0INTORG 30H ;主程序开始地址MAIN: MOV R4,#20MOV DPTR,#TABMOV TMOD,#01HMOV TH0,#03CH ;12M晶振时定时初值取#3CB0H MOV TL0,#0B0H SETB ET0SETB EASETB TR0DISP:MOV A,R0MOVC A,@A+DPTRMOV P0,AAJMP DISP T0INT: MOV TH0,#03CH;定时中断子程序。重装定时常数MOV TL0,#0B0H;DJNZ R4,RTI ;50msX20=1S,未满20次,跳出中断子程序MOV R4,#20INC R0CJNE R0,#10,RTIMOV R0,#0 RTI: RETI
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;显示码表,共阴
END

#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar time,num;uchar code tab[ ]= 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/ ; void display();
void T0intinit( ) //定时器T0初始化 TMOD=0x01; TH0=(65536-50000)/256; //50ms定时 TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1;
void main() T0intinit( ); while(1) display( );
void display( ) P0=tab[num];
void T0int( ) interrupt 1 //定时器T0中断 方式1 TH0=(65536-50000)/256; //重装10ms定时常数 TL0=(65536-50000)%256; time++; if(time==20) time=0; num++; if(num==10) num=0; 追问

中文需要写上去吗?

追答

中文没事,前面有个分号。分号后面的是注释,不影响程序的。

参考技术B 秒表是秒表,计数器是计数器。
你到底需要什么呢?
一般不会是两个的。。。

以上是关于C语言定时器的主要内容,如果未能解决你的问题,请参考以下文章

求教怎么在C语言中使用定时器

C语言 用定时器 模拟多线程

单片机C语言定时器如何调用

c语言中怎么设置计时器?

c语言中怎么设置计时器?

分别用汇编语言和C语言设计: 采用中断方式,利用定时器进行0-9秒表计数器的设计,并用数码