Windows中7种定时器

Windows中7种定时器
Windows中7种定时器

众所周知,Windows 是基于消息机制的系统,任何事件的执行都是通过发送和接收消息来完成的。这样就带来了一些问题,如一旦计算机的CPU被某个进程占用,或系统资源紧张时,发送到消息队列中的消息就暂时被挂起,得不到实时处理。因此,不能简单地通过Windows消息引发一个对定时要求严格的事件。另外,由于在Windows中已经封装了计算机底层硬件的访问,所以,要想通过直接利用访问硬件来完成精确定时,也比较困难。所以在实际应用时,应针对具体定时精度的要求,采取相适应的定时方法。

VC中提供了很多关于时间操作的函数,利用它们控制程序能够精确地完成定时和计时操作。本文详细介绍了VC中基于Windows的精确定时的七种方式,如下图所示:

图一图像描述

方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms 的时间间隔。然后在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法非常简单,可以实现一定的定时功能,但其定时功能如同Sleep()函数的延时功能一样,精度非常低,最小计时精度仅为30ms,CPU占用低,且定时器消息在多任务操

作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况。如示例工程中的Timer1。

方式二:VC中使用sleep()函数实现延时,它的单位是ms,如延时2秒,用sleep(2000)。精度非常低,最小计时精度仅为30ms,用sleep函数的不利处在于延时期间不能处理其他的消息,如果时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer2。

方式三:利用COleDateTime类和COleDateTimeSpan类结合WINDOWS的消息处理过程来实现秒级延时。如示例工程中的Timer3和Timer3_1。以下是实现2秒的延时代码:

COleDateTime start_time = COleDateTime::GetCurrentTime();

COleDateTimeSpan end_time= COleDateTime::GetCurrentTime()-start_time;

while(end_time.GetTotalSeconds()< 2) //实现延时2秒

{

MSG msg;

GetMessage(&msg,NULL,0,0);

TranslateMessage(&msg);

DispatchMessage(&msg);

//以上四行是实现在延时或定时期间能处理其他的消息,

//虽然这样可以降低CPU的占有率,

//但降低了延时或定时精度,实际应用中可以去掉。

end_time = COleDateTime::GetCurrentTime()-start_time;

}//这样在延时的时候我们也能够处理其他的消息。

方式四:在精度要求较高的情况下,VC中可以利用GetTickCount()函数,该函数的返回值是 DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。精度比WM_TIMER消息映射高,在较短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CP U占用率非常高,只能用于要求不高的延时程序中。如示例工程中的Timer4和Timer4_1。下列代码可以实现50ms的精确定时:

DWORD dwStart = GetTickCount();

DWORD dwEnd = dwStart;

do

{

dwEnd = GetTickCount()-dwStart;

}while(dwEnd <50);

为使GetTickCount()函数在延时或定时期间能处理其他的消息,可以把代码改为:

DWORD dwStart = GetTickCount();

DWORD dwEnd = dwStart;

do

{

MSG msg;

GetMessage(&msg,NULL,0,0);

TranslateMessage(&msg);

DispatchMessage(&msg);

dwEnd = GetTickCount()-dwStart;

}while(dwEnd <50);

虽然这样可以降低CPU的占有率,并在延时或定时期间也能处理其他的消息,但降低了延时或定时精度。

方式五:与GetTickCount()函数类似的多媒体定时器函数DWORD timeGetTime(void),该函数定时精度为ms级,返回从Windows启动开始经过的毫秒数。微软公司在其多媒体Windows中提供了精确定时器的底层API持,利用多媒体定时器可以很精确地读出系统的当前时间,并且能在非常精确的时间间隔内完成一个事件、函数或过程的调用。不同之处在于调用DWORD timeGetTime(void) 函数之前必须将Winmm.lib 和Mmsystem.h 添加到工程中,否则在编译时提示DWORD timeGetTime(void)函数未定义。由于使用该函数是通过查询的方式进行定时控制的,所以,应该建立定时循环来进行定时事件的控制。如示例工程中的Timer5和Timer5_1。

方式六:使用多媒体定时器timeSetEvent()函数,该函数定时精度为ms级。利用该函数可以实现周期性的函数调用。如示例工程中的Timer6和Timer 6_1。函数的原型如下:

MMRESULT timeSetEvent( UINT uDelay,

UINT uResolution,

LPTIMECALLBACK lpTimeProc,

WORD dwUser,

UINT fuEvent )

该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回NULL。函数的参数说明如下:

uDelay:以毫秒指定事件的周期。

Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。

LpTimeProc:指向一个回调函数。

DwUser:存放用户提供的回调数据。

FuEvent:指定定时器事件类型:

TIME_ONESHOT:uDelay毫秒后只产生一次事件

TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。

具体应用时,可以通过调用timeSetEvent()函数,将需要周期性执行的任务定义在LpTimeProc回调函数中(如:定时采样、控制等),从而完成所需处理的事件。需要注意的是,任务处理的时间不能大于周期间隔时间。另外,在定时器使用完毕后,应及时调用timeKillEvent()将之释放。

方式七:对于精确度要求更高的定时操作,则应该使用QueryPerformanceFrequency()和QueryPerformanceCounter()函数。这两个函数是VC 提供的仅供Windows 95及其后续版本使用的精确时间函数,并要求计算机从硬件上支持精确定时器。如示例工程中的Timer7、Timer7_1、Timer7_2、Ti mer7_3。

QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型如下:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);

数据类型ARGE_INTEGER既可以是一个8字节长的整型数,也可以是两个4字节长的整型数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:

typedef union _LARGE_INTEGER

{

struct

{

DWORD LowPart ;// 4字节整型数

LONG HighPart;// 4字节整型数

};

LONGLONG QuadPart ;// 8字节整型数

}LARGE_INTEGER ;

在进行定时之前,先调用QueryPerformanceFrequency()函数获得机器内部定时器的时钟频率,然后在需要严格定时的事件发生之前和发生之后分别调用QueryPerformanceCounter()函数,利用两次获得的计数之差及时钟频率,计算出事件经历的精确时间。下列代码实现1ms的精确定时:

LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;

double dfMinus, dfFreq, dfTim;

QueryPerformanceFrequency(&litmp);

dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QPart1 = litmp.QuadPart;// 获得初始值

do

{

QueryPerformanceCounter(&litmp);

QPart2 = litmp.QuadPart;//获得中止值

dfMinus = (double)(QPart2-QPart1);

dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒

}while(dfTim<0.001);

其定时误差不超过1微秒,精度与CPU等机器配置有关。下面的程序用来测试函数Sleep(100)的精确持续时间:

LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;

double dfMinus, dfFreq, dfTim;

QueryPerformanceFrequency(&litmp);

dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QPart1 = litmp.QuadPart;// 获得初始值

Sleep(100);

QueryPerformanceCounter(&litmp);

QPart2 = litmp.QuadPart;//获得中止值

dfMinus = (double)(QPart2-QPart1);

dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒

由于Sleep()函数自身的误差,上述程序每次执行的结果都会有微小误差。下列代码实现1微秒的精确定时: LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;

double dfMinus, dfFreq, dfTim;

QueryPerformanceFrequency(&litmp);

dfFreq = (double)litmp.QuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QPart1 = litmp.QuadPart;// 获得初始值

do

{

QueryPerformanceCounter(&litmp);

QPart2 = litmp.QuadPart;//获得中止值

dfMinus = (double)(QPart2-QPart1);

dfTim = dfMinus / dfFreq;// 获得对应的时间值,单位为秒

}while(dfTim<0.000001);

其定时误差一般不超过0.5微秒,精度与CPU等机器配置有关。(完)

单片机定时器与计数器的工作方式解析

单片机定时器与计数器的工作方式解析 1 工作方式0 定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH (0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。 我们用这个图来讨论几个问题: M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们??编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多开始学习者却会有此困惑。 GATE:看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?有两种情况 GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。 GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1管脚的控制,只有TR1为1,且INT1管脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性能用来测量一个信号的高电平的宽度,想想看,怎么测? 为什么在这种模式下只用13位呢?干吗不用16位,这是为了和51机的前辈48系列兼容而设的一种工作式,如果你觉得用得不顺手,那就干脆用第二种工作方式。 2 工作方式1

定时计数器的四种工作方式

在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。顺便说一下,T MOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。 从图1中我们能看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。 从图2中我们能看出,TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(我们暂不管)。而TF1(0)我们上节课已提到了,当计数溢出后TF1(0)就由0变为1。原来TF 1(0)在这儿!那么TR0、TR1又是什么呢?看上节课的图。 https://www.360docs.net/doc/379859517.html, 希望大家常来本站学习单片机相关知识 计数脉冲要进入计数器还真不不难,有层层关要通过,最起码,就是TR0(1)要为1,开关才能合上,脉冲才能过来。因此,TR0(1)称之为运行控制位,可用指令SETB来置位以启动计数器/定时器运行,用指令CLR来关闭定时/计数器的工作,一切尽在自已的掌握中。

<单片机定时器/计数器结构> 定时/计数器的四种工作方式 工作方式0 定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。 我们用这个图来讨论几个问题: M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。 C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们��编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多开始学习者却会有此困惑。 GATE:看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?有两种情况 GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端I NT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。

定时器计数器工作方式寄存器TMOD

TMOD 在内存 RAM 中位于特殊功能寄存器区的 89H 处,其高 4 位用于设置定时 器/计数器T1 的工作方式,低 4 位用于设置定时器/计数器 T0 的工作方式。由于 T0 和 T1 的用法很相似,所以,在此只结合 TMOD 的低 4 位讲解定时器/计数器 T0 的用法。 1、 GATE 当 GATE=0 时,定时器/计数器开始工作或停止工作不受 GATE 位的控制,而只受TCON寄存器中的 TR0 位控制,TR0=0 时定时器/计数器 T0 停止工作,而当 TR0=1 时定时器/计数器 T0 开始工作。 当 GATE=1 时,定时器/计数器 T0 工作的起停除了受 TCON 寄存器中的 TR0 位 控制外,还受单片机外部引脚 P3.2 的控制,只有该引脚为高电平且 TR0=1 这两个条 件同时满足时,定时器/计数器才开始工作,一般这种用法通常用来测量 P3.2 引脚上 正脉冲的宽度。对于控制T1 方式字段中的 GATE 位和 T0 中的用法完全一样,只是当GATE 位为 1 时受单片机外部引脚P3.3 和 TCON 中 TR1 的控制。 2、 C/T C/T 位决定 T0 工作在定时方式还是计数方式。当 C/T=0 时,T0 工作在定时方式,此时由 TH0 和 TL0 组成的 16 位计数容器,这个容器会对晶振产生的脉冲再 12 分频后的脉冲进行计数,如果单片机外部接的是 12M 晶振,则 TH0 和 TL0 组成的 16 位 计数容器中的数据就会每隔 1 微妙自动加 1; 当 C/T=1 时,T0 工作在计数方式,由 TH0 和 TL0 组成的 16 位计数容器会对从单片机外部引脚 P3.4 输入单片机的脉冲进行计数,每输入一个脉冲,则 TH0 和 TL0 组成的 16 位计数容器中的数据会自动加 1。如果 TMOD 高 4 位中的 C/T=0,表示 T1 工作在定时方式,而当 C/T=1表示 T1 工作在计数方式,计的是来自单片机外部引脚 P3.5 传入单片机的脉冲数。 当然无论是在 C/T=0 时定时器/计数器工作在定时方式,还是在 C/T=1 时定时器/计数器工作在计数方式,要想让 T0 开始工作,必须将 TCON 中的 TR0 设置为 1,如果想让 T0 停止工作,必须将 TCON 中的 TR0 设置为 0,即 TCON 中的 TR0 是控制定时器/计数器开始工作和停止工作的。

用定时器T0的模式1实现长时间定时

定时器T0的模式1实现长时间定时 使用定时器T0的中断来控制引脚LED的闪烁,要求闪烁周期2s,即亮1s,灭1s。本例采用的电路原理图如图6-2所示。 1.实现方法 定时器T0工作于方式1时,其最大可计脉冲数次数为65536,对于12MHz的时钟频率,一个脉冲的宽度为μs,则最大计时长度只有×65536=65536μs,即大约65ms。所以要计时1s或更长的时间,还需采用一种被称作“软件计数”的方法:设置一个变量Countor来储存定时器T0的中断次数,即每产生1次中断,使变量Countor自加1,如果T0每50ms中断1次,那么当Countor自加20次时,所计时间就是1s。 2.程序设计 先建立文件夹“CHANG”,然后建立“CHANG”工程项目,最后建立源程序文件“”。输入以下源程序: //实例46:用定时器T0模式1的实现长时间定时 #include<> // 包含51单片机寄存器定义的头文件 sbit D1=P2^0; //将D1位定义为引脚 unsigned char Countor ; //设置全局变量,储存定时器T0中断次数 /************************************************************** 函数功能:主函数 **************************************************************/ void main(void) { EA=1; //开总中断 ET0=1; //定时器T0中断允许

TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-50000)/256; //定时器T0的高8位赋初值 TL0=(65536-50000)%256; //定时器T0的低8位赋初值 TR0=1; //启动定时器T0 Countor=0; //从0开始累计中断次数 while(1) //无限循环,等待中断 ; } /************************************************************** 函数功能:定时器T0的中断服务程序 **************************************************************/ void Time0(void) interrupt 1 using 0 //“interrupt”声明函数为中断服务函数 { Countor++; //中断次数自加1 if(Countor= =20) //若累计满20次,即计时满1s { D1=~D1; //按位取反操作,将引脚输出电平取反 Countor=0; //将Countor清0,重新从0开始计数 } TH0=(65536-50000)/256; //定时器T0的低8位重新赋初值 TL0=(65536-50000)%256; //定时器T0的低8位重新赋初值 } 3.用Proteus软件仿真 经Keil软件编译通过后,可利用Proteus软件进行仿真。在Proteus ISIS 编辑环境中绘制好图6-2所示仿真电路图后,或打开配套光盘中的“仿真实例\第六章\ CHANG”文件夹内

单片机定时器详解

一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是,所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令; 注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率; 总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期; MCS-51单片机定时器/计数器的简单结构图: 8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合; 二、定时器/计数器的结构

WinCC 中定时器使用方法介绍

1、定时器功能介绍 2、脚本中定时器介绍 3、使用脚本实现更多定时器功能 3.1 整点归档 3.2 WinCC 项目激活时避免脚本初次执行及延迟执行脚本1 定时器功能介绍 WinCC 中定时器的使用可以使 WinCC按照指定的周期或者时间点去执行任务,比如周期执行变量归档、在指定的时间点执行全局脚本或条件满足时打印报表。WinCC 已经提供了一些简单的定时器,可以满足大部分定时功能。但是在有些情况下,WinCC 提供的定时器不能满足我们需求,这时我们就可以通过 WinCC 提供的脚本接口通过编程的方式实现定时的功能,因为脚本本身既可以直接调用 WinCC其他功能,比如报表打印,也可以通过中间变量来控制其他功能的执行,比如通过置位/复位归档控制变量来触发变量记录的执行。WinCC 提供了 C 脚本和 VBS 脚本,本文主要以全局 C 脚本编程为例介绍定时功能的实现。 2 脚本中定时器介绍既然在全局脚本中可以编程控制其他功能的执行,那么首先看看全局脚本的触发: 图1 脚本触发器分类如图1所示:脚本触发器分为使用定

时器和使用变量,定时器又分为周期执行和非周期执行一次,比如每分钟执行一次脚本属于周期执行,指定2012年10月1日执行一次属于非周期执行。使用变量触发脚本,即在变量发生变化时,脚本就执行一次,而变量的采集可以根据指定周期循环采集,或者根据变化采集,根据变化实际是1秒钟采集变量一次。 3使用脚本实现更多定时器功能 利用脚本自身的定时器,可以通过在脚本中编程的方式实现更多其它定时功能。 3.1整点归档 WinCC提供了变量归档,变量归档分为周期归档和非周期归档,不管是周期归档或非周期的归档,都又可以通过一些变量或脚本返回值来控制归档,比如:整点归档。下面的设置结合WinCC脚本,实现了在整点开始归档,归档五分种后停止归档,即每个小时仅归档前五分钟的数据。 软件环境:Windows 7 Professional Service Pack1 , WinCC V7.0 SP3 归档名称:ProcessValueArchive 归档变量:NewTag 归档周期:1 分钟 归档控制变量 startarchive C脚本触发周期:10秒 脚本代码: #include"apdefap.h" int gscAction( void ) { #pragma option(mbcs) #pragma code ("kernel32.dll");

555定时器的基本应用及使用方法

555定时器的基本应用及使用方法 我们知道,555电路在应用和工作方式上一般可归纳为3类。每类工作方式又有很多个不同的电路。在实际应用中,除了单一品种的电路外,还可组合出很多不同电路,如:多个单稳、多个双稳、单稳和无稳,双稳和无稳的组合等。这样一来,电路变的更加复杂。为了便于我们分析和识别电路,更好的理解555电路,这里我们这里按555电路的结构特点进行分类和归纳,把555电路分为3大类、8种、共18个单元电路。每个电路除画出它的标准图型,指出他们的结构特点或识别方法外,还给出了计算公式和他们的用途。方便大家识别、分析555电路。下面将分别 介绍这3类电路。 单稳类电路 单稳工作方式,它可分为3种。见图示。 第1种(图1)是人工启动单稳,又因为定时电阻定时电容位置不同而分为2个不同的单元,并分别以1.1.1 和1.1.2为代号。他们的输入端的形式,也就是电路的结构特点是: “RT-6.2-CT”和“CT-6.2-RT”。

第2种(图2)是脉冲启动型单稳,也可以分为2个不同的单元。他们的输入特点都是“RT-7.6-CT”,都是从2端输入。1.2.1电路的2端不带任何元件,具有最简单的形式;1.2.2电路则带 有一个RC微分电路。 第3种(图3)是压控振荡器。单稳型压控振荡器电路有很多,都比较复杂。为简单起见,我们只把它分为2个不同单元。不带任何辅助器件的电路为1.3.1;使用晶体管、运放放大器等辅助器件的电路为1.3.2。图中列出了2个常用电路。

双稳类电路 这里我们将对555双稳电路工作方式进行总结、归纳。 555双稳电路可分成2种。 第一种(见图1)是触发电路,有双端输入(2.1.1)和单端输入(2.1.2)2个单元。单端比较器(2.1.2)可以是6端固定,2段输入;也可是2端固定,6端输入。 第2种(见图2)是施密特触发电路,有最简单形式的(2.2.1)和输入端电阻调整偏置或在控制端(5)加控制电压VCT以改变阀值电压的(2.2.2)共2个单元电路。

AT89C52定时器2工作方式

·定时器2: 定时器2 是一个16 位定时/计数器。它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄 存器T2CON(如表3)的C/T2 位选择。定时器2 有三种工作方式:捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON 的控制位来选择。定时器2 由两个8 位寄存器TH2 和TL2 组成,在定时器工作方式中,每个机器周期TL2 寄存器的值加1,由于一个机器周期由12 个振荡时钟构成,因此,计数速率为振荡频率的1/12。在计数工作方式时,当T2 引脚上外部输入信号产生由1至0 的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2 期间,对外部输入进行采样。若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1 期间寄存器加1。由于识别1 至0 的跳变需要2 个机器周期(24 个振荡周期),因此,最高计数速率为振荡频率的1/24。为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。 ·捕获方式: 在捕获方式下,通过T2CON 控制位EXEN2 来选择两种方式。如果EXEN2=0,定时器2 是一个16 位定时器或计数器, 计数溢出时,对T2CON 的溢出标志TF2 置位,同时激活中断。如果EXEN2=1,定时器2 完成相同的操作,而当T2EX 引 脚外部输入信号发生1 至0 负跳变时,也出现TH2 和TL2 中的值分别被捕获到RCAP2H 和RCAP2L 中。另外,T2EX 引 脚信号的跳变使得T2CON 中的EXF2 置位,与TF2 相仿,EXF2 也会激活中断。捕获方式如图4 所示。 ·自动重装载(向上或向下计数器)方式: 当定时器2工作于16位自动重装载方式时,能对其编程为向上或向下计数方式,这个功能可通过特殊功能寄存器T2CON (见表5)的DCEN 位(允许向下计数)来选择的。复位时,DCEN 位置“0”,定时器2 默认设置为向上计数。当DCEN 置位时,定时器2 既可向上计数也可向下计数,这取决于T2EX 引脚的值,参见图5,当DCEN=0 时,定时器2 自动设置 为向上计数,在这种方式下,T2CON 中的EXEN2 控制位有两种选择,若EXE N2=0,定时器2 为向上计数至0FFFFH 溢出,置位TF2 激活中断,同时把16 位计数寄存器RCAP2H 和RCAP2L重装载,RCAP2H 和RCAP2L 的值可由软件预置。 若EXEN2=1,定时器2 的16 位重装载由溢出或外部输入端T2EX 从1 至0 的下降沿触发。这个脉冲使EXF2 置位,如果 中断允许,同样产生中断。 定时器2 的中断入口地址是:002BH ——0032H 。 当DCEN=1 时,允许定时器2 向上或向下计数,如图6 所示。这种方式下,T2 EX 引脚控制计数器方向。T2EX 引脚为逻 辑“1”时,定时器向上计数,当计数0FFFFH 向上溢出时,置位TF2,同时把16 位计数寄存器RCAP2H 和RCAP2L 重装 载到TH2 和TL2 中。T2EX 引脚为逻辑“0”时,定时器2 向下计数,当TH2 和TL2 中的数值等于RCAP2H 和RCAP2L 中的值时,计数溢出,置位TF2,同时将0FFFFH 数值重新装入定时寄存器中。

实验4,定时器实验

定时器实验 一、实验目的 1、熟悉使用Keil软件的使用和单片机程序的编写。 2、了解掌握51单片机定时器的结构与工作原理。 3、了解LCD1602的工作原理及程序编写。 4、掌握定时器程序的书写格式及使用方法。 二、实验仪器 1、C51单片机开发板(含LCD1602显示屏) 2、PC机(安装Keil软件及C51烧录软件) 三、实验原理 1、LCD1602显示屏 lcd1602可以显示2行16个字符,有8为数据总线D0-D7,和RS、R/W、EN 三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。其引脚功能 2、定时器工作原理 8051单片机有两个16位定时器T0,T1,有四种工作方式,由TMOD寄存器 TMODE寄存器的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。

C/ T置位时,T0/T1工作在计数器方式,清零时,工作在定时器方式。 GATE位置位时,由外部引脚中断来启动定时器,清零时,仅由TR0,TR1分别启动定时器T0,T1。 定时器若工作于中断方式,则在初始化时应该开放定时器的中断及总中断。注意定时器方式的选择,确定是否要在中断服务程序中置入定时器初值,最后启动定时器(TR0/TR1 = 1)。 四、实验内容 1、用定时器实现流水灯。 用89C51的定时器资源,在定时器中断服务程序中实现流水灯的运行。在中断服务程序中可以使用查表方式依次点亮LED,若采用移位操作,需注意移位逻辑。 2、用定时器和LCD1602制作电子时钟。 1602液晶显示模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的,通过D7~D0的8位数据端传输数据和指令。可以在定时器中断服务程序中进行计时,并将时间显示在LCD1602模块上。 五、预习要求 1、掌握实验原理,了解实验目的,熟悉实验内容。 2、了解LCD1602的工作原理,掌握其显示程序的编写。 3、掌握51单片机定时器的工作原理及过程。 六、思考题 1、用定时器实现延时与用软件延时相比,有什么优点? 2、定时器置入的初值如何计算?

单片机定时器习题

单片机定时器/计数器、中断和串行口习题 一、填空题 1、若要启动定时器T0开始计数,则应将TR0的值设置为 1 。 2、定时器T1工作在方式0时,其定时时间为(8192-定时器初值)*2us 。方式1时定时时间又为(65536-定时器初值)*2us 。 3、串行通信有异步通信和同步通信两种基本通讯方式。 4、波特率是指每秒钟传递信息的位数。 5、如果要将现有的波特率加倍,可使用指令MOV PCON,#80H 。 6、当串行口工作在方式1时,一帧信息共有10位,即起始位、8个数据位、停止位。 7、串行口工作在方式2时的波特率为fosc/32或fosc/64 。 8、外部中断1的程序入口地址是0013H 。 二、选择题 1、若要采用定时器0,方式1,如何设置TMOD__B__ A.00H B.01H C.10H D. 11H 2、单片机采用方式0时是13位计数器,它的最大定时时间是多少?_B__ A.81.92ms B.8.192ms C.65.536ms D.6.5536ms 3、以下哪项不是中断的特点? C A.分时操作 B.实时处理 C.在线编程 D.故障处理 4、外部中断响应时间至少需要__A个机器周期。 A.3 B.2 C.4 D.8 5、通过串口发送和接受数据时,在程序中使用__A___指令。 A.MOV BMOVX C.MOVC D.SW AP 6、以下哪个是中断优先级寄存器?__B A.IE B.IP C.TCON D.SCON 7、串行口中断的程序入口地址是 C 。 A 0003H B 001BH C 0023H D 000BH 三、判断题 1、8051的两个定时器T0和T1都是16位的计数器。(对) 2、单片机的计数器最高检测频率为振荡频率的1/12。(错) 3、定时/计数器的方式2具有自动装入初值的功能。(对) 4、引起中断的原因或发出中断申请的来源称为中断源。(对) 5、中断可使CPU和外设同时工作。(对) 6、定时器的特殊功能寄存器TMOD是用作中断溢出标志,并控制定时计数器的启动和停止。(错) 7、定时器控制寄存器TCON可以位寻址。(对) 8、MCS-51系列单片机的5个中断源都是可屏蔽中断。(对) 四、综合题

定时器产品使用说明书

定时器产品使用说明书 定时设置: 1、先检查时钟是否与当前时间一致,如需重新校准,在按住“时钟”键的同时,分别按住“星期”、“小时”、“分钟”键,将时钟调到当前准确时间。 2、按一下“设定”键,显示屏左下方出现“1开”字样(表示第一次开启的时间)。然后按“星期”调整本次设定的星期组合模式,再按“小时”、“分钟”键,输入所需开启的时间。 3、再按一下“设定”键,显示屏左下方出现“1关”字样(表示第一次关闭时间),再按“星期”、“小时”、“分钟”键,输入所需关闭的日期和时间。 4、继续按动“设定”键,显示屏左下方将依次显示“2开、2关、3开、3关……16开、16关”,参考步骤2、3设置以后各次开关时间。设置完成后,按一下“时钟”键返回。 5、如果每天不需设置16组开关,则必须按“清除”键,将多余各组消除,使其显示屏上显示“—:—”图样(不是00:00)。 6、按“模式”键,可以变换工作模式。总共有四种工作模式:A、液晶显示开(代表进入常开模式);B、液晶显示关(代表进入常关模式);C、由开进入自动(表示目前状态为开,等到下一组时间到后开始自动运行);D、由关进入自动(表示目前状态为关,等到下一组定时时间到后开始自动运行)。 当出现以下情况时: 1、定时器没有根据设定的程序开启或关闭,请检查设置程序是否正确或重新调整。 2、定时器长时间不用,显示模糊时,请将定时器接通电源充足,10分钟后无显示,按“复位”键,2-3秒。 3、如以上步骤均不能排除问题,请与公司或经销商联系维修。 注意事项: 1、对于那些因定时开关出错而可能发生的生命相关事故或者对社会产生重大影响的设备(如医疗设备等),请不要使用定时开关。 2、对于那些因定时开关出错而发生重大财产损失的设备(大型加热器或冷库),在使用本定时开关时,请务必是特性和性能的数值有足够的余量,并采取二重电路等安全对策。 3、请勿自行修理、分解或改造。 4、接通电源后请勿接触端子部分。本开关工作在无潮湿、腐蚀及高金属含量气体环境中。请勿沾染油或水。

51单片机定时器模式1使用

51单片机定时器模式1使用特殊功能寄存器如下 使用TCON和TMOD TF:溢出标志为1时表示溢出需要手工置0 TR:开始计时为1开始为0停止 M1,M0 :工作模式 01为模式1 //16位 65536 GATE门暂不使用置0 C/T:定时/计数 TH0,TL0:定时器0初始值 方法: 1、设定TMOD 2、设定初始值TH TL 3、设定TCON 开始计时

实例:共阳七段数码管0-F循环显示延时1s 七段共阳数码管真值表 const uint8 ledcode[]={ 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 0x88, // A 0x83, // B 0xC6, // C 0xA1, // D 0x86, // E 0x8E // F }; 延时1s计算 溢出20次每次50ms

TH0 TL0计算: 65536-((0.05x11059200)/12)=0x4c00 TH0=0x4c TL0=0x00 #include; typedef unsigned char uint8; typedef unsigned int uint16; sbit en=P1^7; const uint8 ledcode[]={ 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90, // 9 0x88, // A 0x83, // B 0xC6, // C 0xA1, // D

可编程定时器使用说明

可编程定时器使用说明 每天最多设定10组开关机,最少时间段为1分钟,最大(电流10A,可正常控制2200W电器工作,是现代家庭和办公的理想产品。 二:使用说明:(如果显示屏字迹不清晰,请先充电2小时以上) 1、键盘开锁:在时钟界面下,长按[取消/恢复]键3秒中以上。键盘开锁。在非时钟界面下,若30秒内未按任何键,会自动回到时钟界面,同时启动键盘锁。上锁后显示屏会有“”符号,解开后“”符号消失。 2、当前时间设定:键盘锁解除后,按住[时钟]键不放,同时按[星期]、[小时]、[分钟]键可调整星期和时钟; 3、程序设定:键盘锁解除后,按[定时]键进入定时状态。每按两次[定时]键时会进入下一组定时界面;若连续按[定时]键;1开、1关、2开、2关、、、、、、、10开、10关、时钟界面、1开、1关、2开、2关、、、、、、反复循环在定时设定界面,按[分钟]键可调整当次定时的分钟;在定时设定界面,按[小时]键可调整当次定时的小时;在定时设定界面,按[星期]键可调整当次定时的星期;在每一“开”或“关”设定界面时都有15种星期组合模式供选择,连续按[星期]键,显示如下 一二三四五六日、一、二、三、四、五、六、日、一三五、二四六、六日、一二三、四五六、一二三四五、一二三四五六、一二三四五六日、、、、、、反复循环; 用户根据控制需要可进行星期组合的选择。 在定时设定界面,按[取消/恢复]键时会将该组定时取消或恢复出来;在定时设定界面,按[时钟]键盘、时返回时钟状态; 4、开/自动/关:若连续[开/自动/关]键:

开、自动、关、自动、开、自动、、、、、、反复循环;有输出时,显示屏有灯符号和绿灯亮,无输出时,显示屏的灯符号消失和绿灯暗。只有“自动”状态时,程序内容才有效,红灯亮表示智能保姆插脚接通电源。 5、复位键:显示有任何异常,按一下背面的复位键,即可得到解决。

跑步计时器使用方法

随着人们越来越重视生活品质,对健康的要求也越来越高,现在很流行通过跑步来加强身体锻炼,因此跑步计时器开始在人们的生活中发挥着不可或缺的作用,或者说是扮演着重要的角色。在学生体育跑步考试,大型比赛等也离不开计时器。目前使用的计时器种类主要有跑步手表、跑步APP及跑步计时系统系统。 一、跑步手表 适用人群:个人日常锻练 使用方法:直接戴在手腕即可 跑步手表是跑步者一个常用的辅助工具,一般专业跑步表可以显示跑步的速度,距离,消耗卡路里,秒表,配合无线心率带还可以显示心率等信息帮助跑步者在运动中掌握自己的速度和体力分配达到最佳的练习目的。 跑步手表可以按照其运动传感器的类型分为三大类:计步手表,GPS 手表,心率手表。也有多种传感器结合的比如计步心率表, GPS 心率表, GPS 计步表。 二、跑步APP

适用人群:个人日常锻练 使用方法:下载到手机安装,锻炼时带上手机即可 运动类App是靠获取手机GPS定位信息之后,在App的地图上画出轨迹并计算出相关数据,计步是用一个传感器来感受你身体重心的变化,然后把它计作一步,再根据你设计的步长来换算成距离:距离=步数X步长 通过重力加速计感应,重力变化的方向,大小。与正常走路或跑步时的重力变化比对,达到一定相似度时认为是在走路或跑步。手机抖动达到比对,也会被认为是在走路或跑步,手机的重力感应不是那么的准确,计步也有偏差,个人对自己的步长知道的也不准确,导致这种计算距离的方式不是很准,这准方法的优点是不受环境限制,随时随地都能用。 三、跑步计时系统 适用人群:学校体育考试、大型跑步比赛

使用方法:安装在跑到上即可 电子发令器运动员起跑,令声响起时同步启动计时系统计时,通过RPSS激光检测系统,采用802.11WLAN规范和RF数据传输技术,通过WIFI 传输接收各跑道信息,记录实时成绩并将信息同步到显示器上,可使用有线或无线的方式从其他设备将姓名、组别等信息拷贝到平板电脑上。全自动智能短跑计时系统迈佳步由铝合金龙门架、激光感应器、高清显示器、中央控制主机、电子发令器、信息处理平板电脑六个部分组成,采用舞台钢架结构设计,安装于在道之上。 主要作用有1.统计运动员成绩:比赛结束后,计算机即统计出各运动员的起讫时刻、名次以及成绩,并打印成绩单;2.显示比赛实况:经过计算机处理后的信息,可以通过高清显示器、实时显示比赛成绩;3.储存比赛记录:由计算机记载的全部比赛记录。

习题4答案单片机的中断系统、定时器与串行通信doc

习题4 答案单片机的中断系统、定时器与串行通信 一、选择题 1、若要求最大定时时间为216×机器周期,则应使定时器工作于 B 。 A.工作方式0 B.工作方式l C.工作方式2 D.工作方式3 2、若要求最大定时时间为213×机器周期,则应使定时器工作于 A 。 A.工作方式0 B.工作方式l C.工作方式2 D.工作方式3 3、若要求最大定时时间为28×机器周期,则应使定时器工作于 C ,D 。 A.工作方式0 B.工作方式1 C.工作方式2 D.工作方式3 4、定时器方式控制寄存器TMOD中MlM0为l l时,则设置定时器工作于 D 。A.工作方式0 B.工作方式l C.工作方式2 D.工作方式3 5、6MHz晶振的单片机在定时工作方式下,定时器可能实现的最小定时时间是B . A.1 u s B.2 u s C.4 u s D.8 u s ’ 6、12MHz晶振的单片机在定时工作方式下,定时器可能实现的最小定时时间是A. A.1 u s B.2 u s C.4 u s D.8 u s 7、12MHz晶振的单片机在定时工作方式下,定时器可能实现的最大定时时间是B. A.4096 u s B.8192 u S C.1638 u s D.32768 u s 8、定时器/计时器0的初始化程序如下: MOV TMOD,#06H MOV TH0.#0FFH MOV TLO,#0FFH SETB EA SETB ET0

执行该程序段后,把定时器/计时器0的工作状态设置为D。 A. 工作方式0,定时应用,定时时间2 u s,中断禁止 B.工作方式l,计数应用,计数值255,中断允许 C.工作方式2,定时应用,定时时间510 u s,中断禁止 D.工作方式2,计数应用,计数值1,中断允许 9、设串行口工作于方式l,晶振频率为6MHz,波特率为1200位/秒,SMOD=0,则定时 器l的计数初值为C。 A.FlH B.F4H C.F3H D.FOH 10、以下所列特点,不属于串行工作方式0的是D。 A.波特率是固定的,为时钟频率的十二分之一 B.8位移位寄存器 C.TI和RI都须用软件清零 D.在通信时,须对定时器l的溢出率进行设置 11、通过串行口发送或接收数据时,在程序中应使用A。 A.MOV指令 B.MOVX指令 C.MOVC指令 D.SW AP指令 12、若设串行控制寄存器SCON=40H,则串行口的工作方式是B。 A.方式0 B.方式l C.方式2 D.方式3 13、下列对SCON的相关位描述不正确的是A。 A.当REN=l时,禁止串行口接收数据 B.在方式0时,SM2必须为0 C.RI位由软件清零 D.ITl=1,表示帧发送结束 二、填空题 1、8051单片机中的定时器/计数器有T0和T1两个。 2、8051单片机中用于定时器/计数器的控制寄存器有TMOD和TCON两个。 3、8051单片机有五个中断源,分别是T0中断、T1中断、外部中断0、外部中断l和串行中断。 4、8051单片机有2个加法定时器/计数器,它们是由TH0、TL0、THl、和TLl四个专用寄存器构成的。 5、8051单片机有5个中断源,分成2个优先级。控制中断允许的寄存器是IE;控制中断优先级的寄存器是IP。 6、8051单片机5个中断源的入口地址分别为0003H、000BH、0013H、001BH 和0023H 7、外部中断0和外部中断1有两种引起中断的方式,一种是下降沿引起中断,另一种是低电平引起中断。

定时器工作原理

定时器工作原理 通电延时型。只要在定时的时间段内(即1分钟)定时器一直得电,则常开触电就会闭合,只要定时器不断电常开触电就会一直闭合。定时器断电则常开触电断开 1,定时器/计数器的结构与功能 主要介绍定时器0(T0)和定时器1(T1)的结构与功能。图6.1是定时器/计数器的结构框图。由图可知,定时器/计数器由定时器0、定时器1、定时器方式寄存器TMOD 和定时器控制寄存器TCON组成。 定时器0,定时器1是16位加法计数器,分别由两个8位专用寄存器组成:定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。 图6.1 定时器/计数器结构框图 TL0、TL1、TH0、TH1的访问地址依次为8AH~8DH,每个寄存器均可单独访问。定时器0或定时器1用作计数器时,对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加1;其用作定时器时,对内部机器周期脉冲计数,由于机器周期是定值,故计数值确定时,时间也随之确定。 TMOD、TCON与定时器0、定时器1间通过内部总线及逻辑电路连接,TMOD用于设置定时器的工作方式,TCON用于控制定时器的启动与停止。 6.1.1 计数功能 计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。 输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。外部输入信号的下降沿将触发计数,识别一个从“1”到“0”的跳变需2个机器周期,所以,对外部输入信号最高的计数速率是晶振频率的1/24。若晶振频率为6MHz,则计数脉冲频率应低于1/4MHz。当计数器满后,再来一个计数脉冲,计数器全部回0,这就是溢出。 脉冲的计数长度与计数器预先装入的初值有关。初值越大,计数长度越小;初值越小,计数长度越大。最大计数长度为65536(216)个脉冲(初值为0)。 6.1.2 定时方式 定时方式时,T记录单片机内部振荡器输出的脉冲(机器周期信号)个数。 每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。 定时器的定时时间不仅与定时器的初值有关,而且还与系统的时钟频率有关。在机器周期一定的情况下,初值越大,定时时间越短;初值越小,定时时间越长。最长的定时时间为65536(216)个机器周期(初值为0)。 6.2 定时器/计数器控制寄存器 与对定时器/计数器有关的控制寄存器共有4个:TMOD、TCON、IE、IP。IE、IP已在中断一节中介绍,这里不再赘述。

定时器工作原理及应用

定时器工作原理及应用文档编制序号:[KK8UY-LL9IO69-TTO6M3-MTOL89-FTT688]

555定时器 摘要:555定时器是一种多用途的数字——模拟混合集成电路,利用它能极方便地构成施密特触发器、单稳态触发器和多谐振荡器。由于使用灵活、方便,所以555定时器在波形的产生与交换、测量与控制、家用电器、电子玩具等许多领域中都得到了广泛应用。本文主要介绍了555定时器的工作原理及其在单稳态触发器、多谐振荡器方面的应用。 关键词:数字——模拟混合集成电路;施密特触发器;波形的产生与交换 555 Timer Abstract: 555 the timer is a general-purpose digital simulation hybrid integrated circuit, and use it to a very convenient to constitute schmidt flip-flop, single state trigger and harmonic oscillator. Due to the use of flexible, convenient, so 555 in the produce of the waveform timer and exchange, measurement and control, home appliances, electronic toys in many areas have been widely applied. Key words: Digital-simulation hybrid integrated circuit;Schmitt toggle;Waveform generation and exchange 1概述 555定时器的简介 555定时器是一种多用途的数字——模拟混合集成电路,利用它能极方便地构成施密特触发器、单稳态触发器和多谐振荡器。由于使用灵活、方便,所以555定时器在波形的产生与交换、测量与控制、家用电器、电子玩具等许多领域中都得到了广泛应用。自从signetics公司于1972年推出这种产品以后,国际上个主要的电子器件公司也都相继的生产了各自的555定时器产品。尽管产品型号繁多,但是所有双极型产品型号最后的3位数码都是555,所有CMOS产品型号最后的4位数码都是7555.而且,它们的功能和外部引脚排列完全相同。

VC中使用定时器的方法

1.启用一个定时器直接调用函数: SetTimer(1,500,NULL);//定义时钟1,时间间隔为500ms SetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms 可以在按钮按下时启用定时器: void CTimeDlg::OnButton1() { // TODO: Add your control notification handler code here SetTimer(1,500,NULL);//定义时钟1,时间间隔为500ms SetTimer(2,1000,NULL);//定义时钟2,时间间隔为1000ms } 2.关闭定时器:可以在按钮中调用如下函数关闭某定时器: void CTimeDlg::OnButton2() { // TODO: Add your control notification handler code here KillTimer(1); //关闭1号定时器 KillTimer(2); //关闭2号定时器 } 3.添加定时器时间到的处理代码: 1)在开发界面中Ctrl+W 进入MFCclass wizard页面2)选择Message Maps选项卡 3)在Project中选择你的工程 4)在object Ids:中选择C…..Dlg

5)在Messages:中选择WM_TIMER,此时,Member functions中自动定位到: W OnTimer ON_WM_TIMER, 6) 单击EDIT code(或双击W OnTimer ON_WM_TIMER)自动进入如下函数:void CTimeDlg::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { case 1: //1号定时器应该处理的事情 //….. break; case 2: //2号定时器应该处理的事情 //….. break; } CDialog::OnTimer(nIDEvent); //此句VC自动生成 }

相关文档
最新文档