重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
下面是delay
目前创新互联已为1000多家的企业提供了网站建设、域名、网站空间、网站托管、服务器租用、企业网站设计、綦江网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
函数原型:
原型:
void
Delay(unsigned
int
nDelay)
{
unsigned
int
i,j,k;
for
(
i=0;inDelay;i++
)
for
(
j=0;j6144;j++
)
k++;
}
用法:#include
system.h
功能:短暂延时
说明:延时msec*4毫秒所以,delay的延迟时间是和你的cpu时钟周期相关的
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;ims;i++)
{
for(j=0;j200;j++);
for(j=0;j102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a?;a++)
for(b=0;b?;b++)
for(c=0;c?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;ims;i++)
{
for(j=0;j200;j++);
for(j=0;j102;j++);
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言的延迟函数一般是利用无意义程序运行来控制时间从而达到延时的目的
举个例子:
for(i=0;ix;i++)
for(j=0;j120;j++);
这是延时x毫秒的for循环语句。
值得注意的是记得最后的;一定得记得写。
sleep函数,在windows中是以毫秒为单位延迟,如Sleep(1000)就是延迟1000ms,也就是1秒。
你是用pc还是用单片机啊?
pc的当然速度快了。
那要看pc的时钟才能做1ms的延时:
void delay(unsinged long n){....}
中间要加空语句的,但是pc实际上没哟这么用的。
要是单片机。
12M的晶振就是(非1T的)
void delay(unsinged int)
{
inti,j;
for(j=0;jn;j++)
for{i=0;i125;i++}{;}
}
您好 这个延时函数很不稳定的,没有固定的时间
如果您使用tc 您可以用sleep(微秒)来延时
使用vc的话有5种常用方式:
方式一: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() end_time =" COleDateTime::GetCurrentTime()-start_time;"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
方式四:在精度要求较高的情况下,VC中可以利用GetTickCount()函数,该函数的返回值是 DWORD型,表示以ms为单位的计算机启动后经历的时间间隔。精度比WM_TIMER消息映射高,在较短的定时中其计时误差为15ms,在较长的定时中其计时误差较低,如果定时时间太长,就好象死机一样,CPU占用率非常高,只能用于要求不高的延时程序中。如示例工程中的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。