C语言delay函数
c延时函数delay
c延时函数delay延时函数(delay function)是一种在程序中用来暂停一段时间的函数。
在C语言中,延时函数通常用于需要控制时间间隔的应用程序中,例如时钟、定时器、动画等。
在C语言中,实现延时函数有多种方法,下面将介绍两种常用的方法。
1.使用循环计数法延时函数最常见的实现方式之一是使用循环计数法。
具体步骤如下:-接收一个参数,表示延时的毫秒数;-将参数转换为循环需要的次数。
在现代计算机中,循环一次通常需要几十纳秒到几百纳秒的时间,因此需要将毫秒数转换为相应的循环次数;-使用一个循环来延时,每次循环后递减计数器,直到计数器为0。
下面是一个使用循环计数法实现的延时函数的示例代码:```c#include <stdio.h>#include <stdlib.h>void delay(int milliseconds)for(int i = 0; i < iterations; i++)//什么都不做,只是进行循环迭代}printf("Before delay\n");delay(1000); // 延时1秒printf("After delay\n");return 0;```2.使用标准库函数- `sleep(`函数:使程序休眠指定的秒数。
参数是休眠的秒数。
下面是使用`usleep(`函数实现延时的示例代码:```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>void delay(int milliseconds)usleep(milliseconds * 1000); // 将毫秒转换为微秒int maiprintf("Before delay\n");delay(1000); // 延时1秒printf("After delay\n");```无论是使用循环计数法还是使用标准库函数,延时函数都有一定的局限性。
C语言常用函数
C语言的常用库函数函数1。
absread()读磁盘绝对扇区函数原形:int absread(int drive,int num,int sectnum,void *buf)功能:从drive指定的驱动器磁盘上,sectnum指定的逻辑扇区号开始读取(通过DOS中断0x25读取)num 个(最多64K个)扇区的内容,储存于buf所指的缓冲区中。
参数:drive=0对应A盘,drive=1对应B盘。
返回值:0:成功;-1:失败。
头文件:dos.h函数2。
abswrite()写磁盘绝对扇区函数原形:int abswrite(int drive,int nsects,int lsect,void *buffer)drive=0(A驱动器)、1(B驱动器)、nsects=要写的扇区数(最多64K个);lsect=起始逻辑扇区号;buffer=要写入数据的内存起始地址。
功能:将指定内容写入(调用DOS中断0x26)磁盘上的指定扇区,即使写入的地方是磁盘的逻辑结构、文件、FAT表和目录结构所在的扇区,也照常进行。
返回值:0:成功;-1:失败。
头文件:dos.h函数3。
atof()将字符串转换成浮点数的函数原形:double atof(const char *s)功能:把s所指向的字符串转换成double类型。
s格式为:符号数字.数字E符号数字返回值:字符串的转换值。
头文件:math.h、stdlib.h函数4。
atoi()将字符串转换成整型数的函数原形:int atoi(const char *s)功能:把s所指向的字符串转换成int类型。
s格式为:符号数字返回值:字符串的转换值。
若出错则返回0。
头文件:stdlib.h函数5。
atol()将字符串转换成长整型数的函数原形:long atol(const char *s)功能:把s所指向的字符串转换成long int类型。
s格式为:符号数字返回值:字符串的转换值。
C语言中的延时与计时技巧
C语言中的延时与计时技巧
一、延时技巧
1.延时的定义:控制程序中当前语句的后一语句,延缓一段时间再执行。
2.C常用的两个延时函数:
(1) delay函数。
书写格式:delay(数值)。
其中,括号中的整型数值取值范围0 ~ 32767之间。
注意:这个数值与计算机主机的频率有关,因此在不同的计算机上,同样的延时数值,会得到不同的延时效果。
(2) sleep (数值)。
(睡眠函数)
书写格式:sleep (数值)。
其中数值是以秒为单位,用在动态显示中最少一秒变化一次,那会有明显的停顿感觉。
二、计时技巧
1.计时的定义:计算程序中某段程序的运行时间。
2.计时程序使用条件:
(1)使用头部文件:
#include <time.h>
(2)使用当前时间的时钟函数:
clock()
(3)使用时间一秒常数:
CLK_TCK
例如:
A.在“蛇吃蛋”的程序中,要引入计时程序,则:在进入while(1)循环前,先要取得计时开始时的那一时刻,使用变量t0表示。
即:
t0 = clock();
B.在while(1)循环的最后处,再取当前时刻,使用变量t1表示。
即:
t1=clock();
C.t1 和t0 之差即为所经历的时间,即;
t = (t1-t0 );
D.转换成秒:
sec=t/CLK_TCK;。
用delay函数进行延时
在使用delay进行延时的时候,delay()括号中的数是多少则代表延时多少毫秒,即单位为毫秒。
举个例子:delay(100)则代表延时100ms;delay(200)则代表延时200ms。
delay是循环等待延时,该程序还在运行,占用处理器。
下面举例如何让在程序中进行编程采用51单片机范例:
#include<reg52.h> //52单片机头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit led1=P1^1; //单片机管脚位声明
void delay(uintu) //延时函数,u代表的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
}
}
{//delay(300);大约延时300ms.
uint x,y;
for(x=u;x>0;x--)
for(y=110;y>0;y--);
}
void main()//主函数
{
while(1) //大循环
{
d1=0; //点亮小灯
delay(300); //延时300毫秒
led1=1;//熄灭小灯
delay(300); //延时300毫秒
c语言中delay的用法
c 语言中 delay 的用法C 语言作为一门新型高级编程语言 ,在计算机软件编程中具有较为广泛的应用和实现。
下面小编就跟你们详细介绍下 c 语言中 delay 的用法,希望对你们有用。
c 语言中 delay 的用法如下:假设一个延时函数如下:void delay(){uint i;for(i=0;i<20000;i++);}我们怎么来算呢,先将 20000 转成 16 进制,得到 4E20,然后将高字节 4E 乘以 6 得到 468D,再将 468+2=470,然后将 470D*20HEX (即 32D)=15040;所心这个延时函数总共要执行 15040 个周期,假设所用的晶振为 12MHZ,则该段函数总延时:15.04ms。
有了这个公式我们如果想要设定指定的延时长度就可以用它的己知公式确定。
即:总时间=[(6*i 值的高 8 位)+2]*i 的低 8 位。
例如:设要延时 125ms。
我们将低字节先赋值200D*(即:C8),然后再算高低节的定值,由式中可知 125ms=200*((i 值的高字节*6)+2),又可推算出(高低节*6)+2 的总延迟时间应等于625us,将625/6=104.1666,取整数得到 104,将 104 转成 16 进制得到 68H,再将高字节和低字节组合起来即得到了定值,即:68C8HEX,代入函数即如下:void delay(){uint i;for(i=0;i<0x68C8;i++);}如果写直进行就要将 68C8 转成 10 进制,即:26824,代入后得到:void delay(){uint i;for(i=0;i<0x26824;i++);在 c 语言中嵌入一段汇编的延时程序呀,你自己看看书,很简单的用在单片机里的可以 C 和汇编混合使用,因为用汇编编写延时要准确些,所以你不妨写一个汇编程序,然后再调用它好了,要用C来编精确的延时确实是比较难的哦.呵呵谁说 C 语言不能精确延时,用 51 单片机的定时/计数器一或者用定时/计数器 2 的工作方式 2,自动再装入 8 位计数器,就可以精确延时,别说 1MS 了就是 100um 也能精确做到。
c语言延时计算公式
c语言延时计算公式分类:Work Log| 标签:单片机应用2007-09-13 22:35 阅读(?)评论(0)今天在看单片机C编程的时候,突然想到在许多的编程中使用软件延时的方法,进行单片机的延时控制。
但是不是很清楚为会么如下的方法能够做到准确的延时。
程序如下:void delay(void){unsigned char i, j, k;for(i = 15; i > 0; i--)for(j = 202; j > 0; j--)for(k = 81; k > 0; k--);}使用Keil uVersion2进行编译产生了汇编程序看了一下,原来在循环中使用的跳转语句是DJNZ。
结合Rn及直接地址进行操作,DJNZ的指令机器周期为2us(晶振为12MHZ时)。
上面一段程序的汇编语句如下:C:0x0013 7F0F MOV R7,#0x0F ; 1us;-----------------C:0x0015 7ECA MOV R6,#0xCA ; 1us;-----------------C:0x0017 7D51 MOV R5,#0x51 ; 1usC:0x0019 DDFE DJNZ R5,C:0019 ; 2us for(k = 81; k > 0; k--) C:0x001B DEFA DJNZ R6,C:0017 ; 2us for(j = 202; j > 0; j--) ;------------------C:0x001D DFF6 DJNZ R7,C:0015 ; 2us for(i = 15; i > 0; i--)其中(;)及其后面的内容是为了方便说明加上去了。
现在我们来计算这段代码执行时所需的时间。
for(k = 81; k > 0; k--)这一个循环所需时间为:1+2×81执行完for(j = 202; j > 0; j--)这一个循环的时间为:1+(1+2×81+2)×202 执行完三个循环的总时间为:1+〔1+(1+2×81+2)×202+2〕×15最后加上调用子程序的时间2us和返回的时间2us,整个延时程序的时间就是1+〔1+(1+2×81+2)×202+2〕×15+2+2=〔3+(3+2×81)×202〕×15+5 =500000us=500ms这个值应该是一个准确的延时时间。
c语言延时语句
C语言程序延时Keil C51的编程语言常用的有2种:一种是汇编语言;另一种是C 语言。
用汇编语言写单片机程序时,精确时间延时是相对容易解决的。
比如,用的是晶振频率为12 MHz的AT 89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个机器周期,DJNZ也需要2个机器周期,单循环延时时间t=2X+3(X为装入寄存器R0的时间常数)[2]。
这样,存入R0里的数初始化为8即可,其精度可以达到1 μs。
用这种方法,可以非常方便地实现512 μs以下时间的延时。
如果需要更长时间,可以使用两层或更多层的嵌套,当然其精度误差会随着嵌套层的增加而成倍增加。
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
有人说如果while里面不能放其它语句,否则也不行,用do-while就可以,具体怎样我没有去试.所有这些都没有给出具体的实例程序来.还看到一些延时的例子多多少少总有点延时差.为此我用for循环写了几个延时的子程序贴上来,希望能对初学者有所帮助.(晶振12MHz,一个机器周期1us.)一. 500ms延时子程序程序:void delay500ms(void){unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值1us = 3us循环外: 5us 子程序调用2us +子程序返回2us + R7赋值1us = 5us延时总时间=三层循环+循环外= 499995+5 = 500000us=500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5二. 200ms延时子程序程序:void delay200ms(void){unsigned char i,j,k;for(i=5;i>0;i--)for(j=132;j>0;j--)for(k=150;k>0;k--);}三. 10ms延时子程序程序:void delay10ms(void){unsigned char i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--); }四. 1s延时子程序程序:void delay1s(void){unsigned char h,i,j,k;for(h=5;h>0;h--)for(i=4;i>0;i--)for(j=116;j>0;j--)for(k=214;k>0;k--); }。
通用C语言延时
通用C语言延时在嵌入式C编程中,免不了要用到软件延时。
这一般通过循环语句实现。
通过控制循环语句的循环次数,便可获得多种不同的延时时间。
为了便于使用和提高程序代码的复用率,一般又将循环语句封装成一个带参数的函数,称为延时函数。
如:void wait(unsigned int n){unsigned int i;for(i=0;i<n;i++);}延时函数的参数(形参,如上例中的变量 n ),即为控制循环语句循环次数的变量。
这样,在需要软件延时的时候,只需要调用延时函数,并将实际参数(实参,即n的实际值)代入形参,便可获得与该实际参数对应的延时时间。
这便是经典的软件延时的实现方法,非常简单。
但细心的读者会发现:延时函数的参数(比如上面的 n ),表征的是循环语句的“循环次数”,而不是“实际的延时时间”。
一般来说,假令循环语句每循环一次的时间为 b(注意,单位是“步”,即一个时钟周期,下同),函数调用、传值和返回所需的固有时间为 a ,那么,给定参数 n 时,调用一次延时函数实际实现的延时时间应为 t = a + b*n , ——而不是 n !这就意味着,当需要的延时时间为 t 时,应当传入的实参为 n = (t-a)/b,而不是 t 。
这样,为了获得比较准确的延时,每次调用函数之前,都要手工计算实际参数,很不方便;其次,当需要改变晶振频率的时候,程序中所有的延时参数都要重新计算,这显然不利于程序的移植。
为了解决这两个问题,提高程序的可移植性,可以利用宏定义的方式,对延时函数进行参数预修正。
例如,对上面给出的wait延时函数,可以使用下面的宏定义:#define delay(n) wait( ( (n) - a ) / b )这样,调用 delay(t) 就意味着调用 wait( (t-a)/b ) ,从而得到时间为t的延时,实现了参数与延时时间的同步,使用起来更加方便。
为了进一步提高可移植性,使软件延时能够适应不同的晶振频率,应当顺着上面的思路选择寻找更优方案。
delay函数的用法
delay函数的用法delay函数是一种在编程中经常使用的函数,它的主要作用是使程序在执行到该函数时暂停一段时间。
这个函数一般用于需要在一段时间后进行一些操作的场景,例如在游戏中等待一段时间后执行下一步操作,或者在模拟实验中等待一段时间后采集数据。
在不同的编程语言中,delay函数的使用可能会有所不同,下面就以几种常用的编程语言为例,分别介绍delay函数的用法。
1.C语言在C语言中,可以使用标准库函数`sleep`来实现延时功能。
`sleep`函数的参数是要延时的秒数,它会使程序暂停执行指定的秒数后再继续执行。
```c#include <stdio.h>#include <unistd.h>int maiprintf("程序开始执行\n");sleep(2); // 延时2秒printf("程序继续执行\n");return 0;```上面的代码中,`sleep(2)`使程序暂停执行2秒钟,然后再继续执行后面的代码。
2. Python```pythonprint("程序开始执行")print("程序继续执行")```3. Java在Java中,可以使用`Thread`类提供的`sleep`方法来实现延时功能。
`sleep`方法的参数是要延时的毫秒数,它会使当前线程暂停执行指定的毫秒数后再继续执行。
```javapublic class DelayExamplepublic static void main(String[] args) throws InterruptedExceptionSystem.out.println("程序开始执行");Thread.sleep(2000); // 延时2秒System.out.println("程序继续执行");}```上面的代码中,`Thread.sleep(2000)`使当前线程暂停执行2秒钟,然后再继续执行后面的代码。
c语言精确delay函数
c语言精确delay函数C语言中的精确延时函数是指能够以指定的时间精确延迟程序执行的函数。
在实际开发中,我们经常会遇到需要程序暂停一段时间的情况,这时就需要使用延时函数来实现。
在C语言中,常用的延时函数有两种,一种是使用循环来实现延时,另一种是使用系统提供的延时函数。
下面将详细介绍这两种方法的实现原理及其使用场景。
1. 循环延时法循环延时法是通过循环来实现延时的方法,其原理是让程序在一个循环中空转一段时间,从而达到延时的效果。
具体实现代码如下:```cvoid delay(unsigned int ms){unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 10000; j++);}```上述代码中,delay函数接收一个参数ms,表示要延时的毫秒数。
函数内部使用两个嵌套的循环,外层循环控制延时的次数,内层循环则是一个空转的过程,通过调整内层循环的次数来控制延时的时间。
循环延时法的优点是简单易懂,适用于较简单的延时场景。
但是由于循环的执行时间受到处理器的影响,不同的处理器执行相同的循环时间可能会有差异,因此不能保证延时的精确性。
2. 系统延时函数系统延时函数是通过调用系统提供的函数来实现延时的方法,其原理是让程序暂停一段时间,从而达到延时的效果。
具体实现代码如下:```c#include <unistd.h>void delay(unsigned int ms){usleep(ms * 1000);}```上述代码中,delay函数接收一个参数ms,表示要延时的毫秒数。
函数内部使用usleep函数来实现延时,usleep函数的参数是微秒,所以需要将毫秒转换为微秒。
系统延时函数的优点是精确可靠,适用于对延时精度要求较高的场景。
由于系统延时函数是由操作系统提供的,可以保证延时的精确性,不受处理器的影响。
C语言中的精确延时函数有循环延时法和系统延时函数两种方法,根据实际需求选择合适的方法来实现延时。
延时函数——精选推荐
延时函数延时函数1、void delay(void) //两个void意思分别为⽆需返回值,没有参数传递{unsigned int i; //定义⽆符号整数,最⼤取值范围65535for(i=0;i<20000;i++) //做20000次空循环; //什么也不做,等待⼀个机器周期}2、void delay(void){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}3、void int_delay(void) //延时⼀段较长的时间{unsigned int m; //定义⽆符号整形变量,双字节数据,值域为0~65535for(m=0;m<36000;m++); //空操作}4、void char_delay(void) //延时⼀段较短的时间{unsigned char i,j; //定义⽆符号字符型变量,单字节数据,值域0~255for(i=0;i<200;i++)for(j=0;j<180;j++); //空操作}//*for(a=2;a>0;a--) // 2微秒,执⾏2次(a+2)是4微秒;for(b=142;b>0;b--) // 2微秒,执⾏142次,for(a=2;a>0;a--)是4微秒,即2*(142*4);for(c=1;c>0;c--) // 2微秒, 执⾏1次,即2*(142*4)=1136微秒;b=125,1000/8=125,再减去其它调⽤时间,应该b取值不⼤于125。
追问:这些时间是怎么得出来的?追答:51单⽚机执⾏⼀条指令⼀般是1---3微秒(12MHz),执⾏⼀条减⼀-判断-跳转指令,就是2微秒,这是c语⾔翻译为机器语⾔后的指令,cjne或djnz(汇编语⾔),编译器⽤什么指令和⽅法,需要你⾃⼰试验,我说的只是⼀种。
*//。
C语言函数大全-d开头-完整版
getch(); returnph
功能: 通过检测硬件确定图形驱动程序和模式
用法: void far detectgraph(int far *graphdriver, int far *graphmode);
程序例:
#include #include #include #include /* names of the various cards supported */ char *dname[] = { "requests detection", "a CGA", "an MCGA", "an EGA", "a 64K EGA", "a monochrome EGA", "an IBM 8514", "a Hercules monochrome", "an AT&T 6300 PC", "a VGA", "an IBM 3270 PC" }; int main(void) { /* returns detected hardware info. */ int gdriver, gmode, errorcode; /* detect graphics hardware available */ detectgraph(&gdriver, &gmode); /* read result of detectgraph call */ errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", \ grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error
C语言函数大全
函数名:abort 之阳早格格创做功能: 非常十分终止一个进程用法: void abort(void)函数名: abs功能: 供整数的千万于值用法: int abs(int i)函数名: absread, abswirte功能: 千万于磁盘扇区读、写数据用法: int absread(int drive, int nsects, int sectno, void *buffer) int abswrite(int drive, int nsects, in tsectno, void *buffer函数名: access功能: 决定文献的考察权力用法: int access(const char *filename, int amode)函数名: acos功能:反余弦函数用法: double acos(double x)函数名: allocmem功能: 调配DOS保存段用法:int allocmem(unsigned size, unsigned *seg)函数名: arc功能: 绘一弧线用法:void far arc(int x, int y, int stangle, int endangle, int radius)函数名: asctime功能: 变换日期战时间为ASCII码用法:char *asctime(const struct tm *tblock)函数名: asin功能:反正弦函数用法: double asin(double x)函数名: assert功能: 尝试一个条件并大概使步调终止用法:void assert(int test)函数名: atan功能: 反正切函数用法: double atan(double x)函数名: atan2功能: 估计Y/X的反正切值用法: double atan2(double y, double x)函数名:atexit功能: 备案终止函数用法: int atexit(atexit_t func)函数名: atof功能: 把字符串变换成浮面数用法:double atof(const char *nptr)函数名: atoi功能: 把字符串变换收展整型数用法: int atoi(const char *nptr)函数名: atol功能: 把字符串变换收展整型数用法: long atol(const char *nptr)函数名: bar功能: 绘一个二维条形图用法: void far bar(int left, int top, int right, int bottom)函数名: bar3d功能: 绘一个三维条形图用法:void far bar3d(int left, int top, int right, int bottom,int depth, int topflag)函数名: bdos功能: DOS系统调用用法: int bdos(int dosfun, unsigned dosdx, unsigned dosal)函数名:bdosptr功能:DOS系统调用用法: int bdosptr(int dosfun, void *argument, unsigned dosal)函数名:bioscom功能: 串止I/O通疑用法:int bioscom(int cmd, char abyte, int port)函数名:biosdisk功能: 硬硬盘I/O用法:int biosdisk(int cmd, int drive, int head, int track, int sectorint nsects, void *buffer)函数名:biosequip功能: 查看设备用法:int biosequip(void)函数名:bioskey功能: 直交使用BIOS服务的键盘交心用法:int bioskey(int cmd)函数名:biosmemory功能: 返回保存块大小用法:int biosmemory(void)函数名:biosprint功能: 直交使用BIOS服务的挨印机I/O用法:int biosprint(int cmd, int byte, int port)函数名:biostime功能: 读与或者树坐BIOS时间用法: long biostime(int cmd, long newtime)函数名: brk功能: 改变数据段空间调配用法:int brk(void *endds)函数名:bsearch功能: 二分法搜索用法:void *bsearch(const void *key, const void *base, size_t *nelem, size_t width, int(*fcmp)(const void *, const *))函数名: cabs功能: 估计复数的千万于值用法: double cabs(struct complex z);函数名:calloc功能:调配主保存器用法:void *calloc(size_t nelem, size_t elsize);函数名: ceil功能: 进与舍进用法: double ceil(double x);函数名: cgets功能: 从统造台读字符串用法: char *cgets(char *str)函数名:chdir功能: 改变处事目录用法: int chdir(const char *path);函数名:_chmod, chmod功能: 改变文献的考察办法用法: int chmod(const char *filename, int permiss);函数名:chsize功能: 改变文献大小用法: int chsize(int handle, long size);函数名: circle功能: 正在给定半径以(x, y)为圆心绘圆用法: void far circle(int x, int y, int radius);函数名: cleardevice功能: 扫除图形屏幕用法: void far cleardevice(void);函数名:clearerr功能: 复位过失标记用法:void clearerr(FILE *stream);函数名: clearviewport功能: 扫除图形视区用法: void far clearviewport(void);函数名:_close, close功能: 关关文献句柄用法:int close(int handle);函数名: clock功能:决定处理器时间用法: clock_t clock(void);函数名:closegraph功能: 关关图形系统用法: void far closegraph(void);函数名:clreol功能: 正在文原窗心中扫除字符到止终用法:void clreol(void)函数名:clrscr功能: 扫除文原模式窗心用法:void clrscr(void);函数名: coreleft功能: 返回已使用内存的大小用法:unsigned coreleft(void);函数名: cos功能: 余弦函数用法:double cos(double x);函数名:cosh功能: 单直余弦函数用法: dluble cosh(double x);函数名: country功能: 返回与国家有关的疑息用法: struct COUNTRY *country(int countrycode, struct country *country); 函数名: cprintf功能: 收圆法化输出至屏幕用法:int cprintf(const char *format[, argument, ...]);函数名: cputs功能: 写字符到屏幕用法: void cputs(const char *string);函数名: _creat creat功能: 创造一个新文献或者沉写一个已存留的文献用法: int creat (const char *filename, int permiss)函数名:creatnew功能: 创造一个新文献用法:int creatnew(const char *filename, int attrib);函数名: cscanf功能: 从统造台实止圆法化输进用法:int cscanf(char *format[,argument, ...]);函数名: ctime功能: 把日期战时间变换为字符串用法:char *ctime(const time_t *time);函数名: ctrlbrk功能: 树坐Ctrl-Break处理步调用法: void ctrlbrk(*fptr)(void);函数名: delay功能: 将步调的实止久停一段时间(毫秒)用法: void delay(unsigned milliseconds);函数名: delline功能: 正在文原窗心中删来一止用法: void delline(void);函数名:detectgraph功能: 通过检测硬件决定图形启动步调战模式用法: void far detectgraph(int far *graphdriver, int far *graphmode); 函数名: difftime功能: 估计二个时刻之间的时间好用法: double difftime(time_t time2, time_t time1);函数名: disable功能: 屏蔽中断用法:void disable(void);函数名: div功能: 将二个整数相除, 返回商战余数用法:div_t (int number, int denom);函数名: dosexterr功能: 获与扩展DOS过失疑息用法:int dosexterr(struct DOSERR *dblkp);函数名: dostounix功能: 变换日期战时间为UNIX时间圆法用法: long dostounix(struct date *dateptr, struct time *timeptr);函数名: drawpoly功能: 绘多边形用法: void far drawpoly(int numpoints, int far *polypoints);函数名:dup功能: 复造一个文献句柄用法: int dup(int handle);函数名:dup2功能: 复造文献句柄用法: int dup2(int oldhandle, int newhandle);函数名: ecvt功能: 把一个浮面数变换为字符串用法: char ecvt(double value, int ndigit, int *decpt, int *sign);函数名: ellipse功能: 绘一椭圆用法:void far ellipse(int x, int y, int stangle, int endangle,int xradius, int yradius);函数名: enable功能: 启搁硬件中断用法: void enable(void);函数名: eof功能: 检测文献中断用法: int eof(int *handle);函数名: exec...功能: 拆进并运止其余步调的函数用法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL); int execle(char *pathname, char *arg0, arg1, ..., argn, NULL,char *envp[]);int execlp(char *pathname, char *arg0, arg1, .., NULL);int execple(char *pathname, char *arg0, arg1, ..., NULL,char *envp[]);int execv(char *pathname, char *argv[]);int execve(char *pathname, char *argv[], char *envp[]);int execvp(char *pathname, char *argv[]);int execvpe(char *pathname, char *argv[], char *envp[]);函数名:exit功能: 终止步调用法: void exit(int status);函数名: exp功能: 指数函数用法: double exp(double x);函数名: gcvt功能: 把浮面数变换成字符串用法: char *gcvt(double value, int ndigit, char *buf);函数名: geninterrupt功能: 爆收一个硬中断用法: void geninterrupt(int intr_num);函数名: getarccoords功能: 博得终尾一次调用arc的坐标用法: void far getarccoords(struct arccoordstype far *arccoords); 函数名: getaspectratio功能: 返回目前图形模式的纵横比用法: void far getaspectratio(int far *xasp, int far *yasp);函数名: getbkcolor功能: 返回目前背景颜色用法: int far getbkcolor(void);函数名: getc功能: 从流中与字符用法: int getc(FILE *stream);函数名: getcbrk功能: 获与Control_break树坐用法: int getcbrk(void);函数名: getch功能: 从统造台无回隐天与一个字符用法: int getch(void);函数名: getchar功能: 从stdin流中读字符用法: int getchar(void);函数名: getche功能: 从统造台与字符(戴回隐)用法: int getche(void);函数名: getcolor功能: 返回目前绘线颜色用法: int far getcolor(void);函数名: getcurdir功能: 与指定启动器的目前目录用法: int getcurdir(int drive, char *direc);函数名: getcwd功能: 与目前处事目录用法: char *getcwd(char *buf, int n);函数名: getdate功能: 与DOS日期用法: void getdate(struct *dateblk);函数名: getdefaultpalette功能: 返回调色板定义结构用法: struct palettetype *far getdefaultpalette(void);函数名: getdisk功能: 与目前磁盘启动器号用法: int getdisk(void);函数名: getdrivername功能: 返回指背包罗目前图形启动步调名字的字符串指针用法: char *getdrivename(void);函数名: getdta功能: 与磁盘传输天面用法: char far *getdta(void);函数名: getenv功能: 从环境中与字符串用法: char *getenv(char *envvar);函数名: getfat, getfatd功能: 与文献调配表疑息用法: void getfat(int drive, struct fatinfo *fatblkp);函数名: getfillpattern功能: 将用户定义的弥补模式拷贝到内存中用法: void far getfillpattern(char far *upattern);函数名: getfillsettings功能: 博得有关目前弥补模式战弥补颜色的疑息用法: void far getfillsettings(struct fillsettingstype far *fillinfo); 函数名: getftime功能: 与文献日期战时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回目前图形模式用法: int far getgraphmode(void);函数名: getftime功能: 与文献日期战时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回目前图形模式用法: int far getgraphmode(void);函数名: getimage功能: 将指定天区的一个位图存到主存中用法: void far getimage(int left, int top, int right, int bottom, void far *bitmap);函数名: getlinesettings功能: 与目前线型、模式战宽度用法: void far getlinesettings(struct linesettingstype far *lininfo): 函数名: getmaxx功能: 返回屏幕的最大x坐标用法: int far getmaxx(void);函数名: getmaxy功能: 返回屏幕的最大y坐标用法: int far getmaxy(void);函数名: getmodename功能: 返回含有指定图形模式名的字符串指针用法: char *far getmodename(int mode_name);函数名: getmoderange功能: 与给定图形启动步调的模式范畴用法: void far getmoderange(int graphdriver, int far *lomode, int far *himode);函数名: getpalette功能: 返回有关目前调色板的疑息用法: void far getpalette(struct palettetype far *palette);函数名: getpass功能: 读一个心令用法: char *getpass(char *prompt);函数名: getpixel功能: 博得指定像素的颜色用法: int far getpixel(int x, int y);函数名: gets功能: 从流中与一字符串用法: char *gets(char *string);函数名: gettext功能: 将文原办法屏幕上的文原拷贝到保存区用法: int gettext(int left, int top, int right, int bottom, void *destin); 函数名: gettextinfo功能: 博得文原模式的隐现疑息用法: void gettextinfo(struct text_info *inforec);函数名: gettextsettings功能: 返回有关目前图形文原字体的疑息用法: void far gettextsettings(struct textsettingstype far *textinfo); 函数名: gettime功能: 博得系统时间用法: void gettime(struct time *timep);函数名: getvect功能: 博得中断背量出心用法: void interrupt(*getvect(int intr_num));函数名: getverify功能: 返回DOS校验标记状态用法: int getverify(void);函数名: getviewsetting功能: 返回有关目前视区的疑息用法: void far getviewsettings(struct viewporttype far *viewport); 函数名: getw功能: 从流中与一整数用法: int getw(FILE *strem);函数名: getx功能: 返回目前图形位子的x坐标用法: int far getx(void);函数名: gety功能: 返回目前图形位子的y坐标用法: int far gety(void);函数名: gmtime功能: 把日期战时间变换为格林僧治尺度时间(GMT)用法: struct tm *gmtime(long *clock);函数名: gotoxy功能: 正在文原窗心中树坐光标用法: void gotoxy(int x, int y);函数名: gotoxy功能: 正在文原窗心中树坐光标用法: void gotoxy(int x, int y);函数名: graphdefaults功能: 将所有图形树坐复位为它们的缺省值用法: void far graphdefaults(void);函数名: grapherrormsg功能: 返回一个过失疑息串的指针用法: char *far grapherrormsg(int errorcode);函数名: graphresult功能: 返回终尾一次没有乐成的图形支配的过失代码用法: int far graphresult(void);函数名: _graphfreemem功能: 用户可建改的图形保存区释搁函数用法: void far _graphfreemem(void far *ptr, unsigned size); 函数名: _graphgetmem功能: 用户可建改的图形保存区调配函数用法: void far *far _graphgetmem(unsigned size);函数名: harderr功能: 建坐一个硬件过失处理步调用法: void harderr(int (*fptr)());函数名: hardresume功能: 硬件过失处理函数用法: void hardresume(int rescode);函数名: highvideo功能: 采用下明度文原字符用法: void highvideo(void);功能: 估计直角三角形的斜边少用法: double hypot(double x, double y);函数名: imagesize功能: 返回保存位图像所需的字节数用法: unsigned far imagesize(int left, int top, int right, int bottom);函数名: initgraph功能: 初初化图形系统用法: void far initgraph(int far *graphdriver, int far *graphmode函数名: inport功能: 从硬件端心中输进用法: int inp(int protid);函数名: insline功能: 正在文原窗心中拔出一个空止用法: void insline(void);函数名: installuserdriver功能: 拆置设备启动步调到BGI设备启动步调表中用法: int far installuserdriver(char far *name, int (*detect)(void));函数名: installuserfont功能: 拆置已嵌进BGI系统的字体文献(CHR)用法: int far installuserfont(char far *name);函数名: int86功能: 通用8086硬中断交心用法: int int86(int intr_num, union REGS *inregs, union REGS *outregs) 函数名: int86x功能: 通用8086硬中断交心用法: int int86x(int intr_num, union REGS *insegs, union REGS *outregs, 函数名: intdos功能: 通用DOS交心用法: int intdos(union REGS *inregs, union REGS *outregs);函数名: intdosx功能: 通用DOS中断交心用法: int intdosx(union REGS *inregs, union REGS *outregs,struct SREGS *segregs);功能: 改变硬中断交心用法: void intr(int intr_num, struct REGPACK *preg); 函数名: ioctl功能: 统造I/O设备用法: int ioctl(int handle, int cmd[,int *argdx, int argcx]); 函数名: isatty功能: 查看设备典型用法: int isatty(int handle);函数名: itoa功能: 把一整数变换为字符串用法: char *itoa(int value, char *string, int radix);函数名: kbhit功能: 查看目前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继承驻留用法: void keep(int status, int size);函数名: kbhit功能: 查看目前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继承驻留用法: void keep(int status, int size);函数名: labs用法: long labs(long n);函数名: ldexp功能: 估计value*2的幂用法: double ldexp(double value, int exp);函数名: ldiv功能: 二个少整型数相除, 返回商战余数用法: ldiv_t ldiv(long lnumer, long ldenom);函数名: lfind功能: 实止线性搜索用法: void *lfind(void *key, void *base, int *nelem, int width,int (*fcmp)());函数名: line功能: 正在指定二面间绘背来线用法: void far line(int x0, int y0, int x1, int y1);函数名: linerel功能: 从目前位子面(CP)到与CP有一给定相对于距离的面绘背来线用法: void far linerel(int dx, int dy);函数名: localtime功能: 把日期战时间转化成结构用法: struct tm *localtime(long *clock);函数名: lock功能: 树坐文献同享锁用法: int lock(int handle, long offset, long length);函数名: log功能: 对于数函数ln(x)用法: double log(double x);函数名: log10功能: 对于数函数log用法: double log10(double x);函数名: longjump功能: 实止非局部变化。
c语言delay的用法
c语言delay的用法在单片机应用中,经常会遇到需要短时间延时的情况,一般都是几十到几百μs,并且需要很高的精度(比如用单片机驱动DS18B20时,误差容许的范围在十几μs以内,不然很容易出错);而某些情况下延时时间较长,用计时器往往有点小题大做。
另外在特殊情况下,计时器甚至已经全部用于其他方面的定时处理,此时就只能使用软件定时了。
下面小编就和大家分享下c语言delay的用法1 C语言程序延时Keil C51的编程语言常用的有2种:一种是汇编语言;另一种是C 语言。
用汇编语言写单片机程序时,精确时间延时是相对容易解决的。
比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个机器周期,DJNZ也需要2个机器周期,单循环延时时间t=2X+3(X为装入寄存器R0的时间常数)[2]。
这样,存入R0里的数初始化为8即可,其精度可以达到1 μs。
用这种方法,可以非常方便地实现512 μs以下时间的延时。
如果需要更长时间,可以使用两层或更多层的嵌套,当然其精度误差会随着嵌套层的增加而成倍增加。
虽然汇编语言的机器代码生成效率很高,但可读性却并不强,复杂一点的程序就更难读懂;而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,且C 语言还可以嵌入汇编程序来解决高时效性的代码编写问题。
就开发周期而言,中大型软件的编写使用C 语言的开发周期通常要比汇编语言短很多,因此研究C语言程序的精确延时性能具有重要的意义。
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
2 单层循环延时精度分析下面是进行μs级延时的while程序代码。
C语言函数大全
C语言函数大全函数名:abort功能: 异常终止一个进程用法: void abort(void)函数名: abs功能: 求整数的绝对值用法: int abs(int i)函数名: absread, abswirte功能: 绝对磁盘扇区读、写数据用法: int absread(int drive, int nsects, int sectno, void *buffer)int abswrite(int drive, int nsects, in tsectno, void *buffer函数名: access功能: 确定文件的访问权限用法: int access(const char *filename, int amode)函数名: acos功能:反余弦函数用法: double acos(double x)函数名: allocmem功能: 分配DOS存储段用法:int allocmem(unsigned size, unsigned *seg)函数名: arc功能: 画一弧线用法:void far arc(int x, int y, int stangle, int endangle, int radius)函数名: asctime功能: 转换日期和时间为ASCII码用法:char *asctime(const struct tm *tblock)函数名: asin功能:反正弦函数用法: double asin(double x)函数名: assert功能: 测试一个条件并可能使程序终止用法:void assert(int test)函数名: atan功能: 反正切函数用法: double atan(double x)函数名: atan2功能: 计算Y/X的反正切值用法: double atan2(double y, double x)函数名:atexit用法: int bdos(int dosfun, unsigned dosdx, unsigned dosal)函数名:bdosptr功能:DOS系统调用用法: int bdosptr(int dosfun, void*argument, unsigned dosal)函数名:bioscom功能: 串行I/O通信用法:int bioscom(int cmd, char abyte, int port)函数名:biosdisk功能: 软硬盘I/O用法:int biosdisk(int cmd, int drive, int head, int track, int sectorint nsects, void *buffer)函数名:biosequip功能: 检查设备用法:int biosequip(void)函数名:bioskey功能: 直接使用BIOS服务的键盘接口用法:int bioskey(int cmd)函数名:biosmemory功能: 返回存储块大小用法:int biosmemory(void)函数名:biosprint功能: 直接使用BIOS服务的打印机I/O用法:int biosprint(int cmd, int byte, int port)函数名:biostime功能: 读取或设置BIOS时间用法: long biostime(int cmd, long newtime)函数名: brk功能: 改变数据段空间分配用法:int brk(void *endds)函数名:bsearch功能: 二分法搜索用法:void *bsearch(const void *key, const void *base, size_t *nelem,size_t width, int(*fcmp)(const void *, const *))函数名: cabs功能: 计算复数的绝对值用法: double cabs(struct complex z);函数名:calloc功能:分配主存储器用法:void *calloc(size_t nelem, size_t elsize);函数名: ceil功能: 向上舍入用法: double ceil(double x);函数名: cgets功能: 从控制台读字符串用法: char *cgets(char *str)函数名:chdir功能: 改变工作目录用法: int chdir(const char *path);函数名:_chmod, chmod功能: 改变文件的访问方式用法: int chmod(const char *filename, int permiss);函数名:chsize功能: 改变文件大小用法: int chsize(int handle, long size);函数名: circle功能: 在给定半径以(x, y)为圆心画圆用法: void far circle(int x, int y, int radius);函数名: cleardevice功能: 清除图形屏幕用法: void far cleardevice(void);函数名:clearerr功能: 复位错误标志用法:void clearerr(FILE *stream);函数名: clearviewport功能: 清除图形视区用法: void far clearviewport(void);函数名:_close, close功能: 关闭文件句柄用法:int close(int handle);函数名: clock功能:确定处理器时间用法: clock_t clock(void);函数名:closegraph功能: 关闭图形系统用法: void far closegraph(void);函数名:clreol功能: 在文本窗口中清除字符到行末用法:void clreol(void)函数名:clrscr功能: 清除文本模式窗口用法:void clrscr(void);函数名: coreleft功能: 返回未使用内存的大小用法:unsigned coreleft(void);函数名: cos功能: 余弦函数用法:double cos(double x);函数名:cosh功能: 双曲余弦函数用法: dluble cosh(double x);函数名: country功能: 返回与国家有关的信息用法: struct COUNTRY *country(int countrycode, struct country *country); 函数名: cprintf功能: 送格式化输出至屏幕用法:int cprintf(const char *format[, argument, ...]);函数名: cputs功能: 写字符到屏幕用法: void cputs(const char *string);函数名: _creat creat功能: 创建一个新文件或重写一个已存在的文件用法: int creat (const char *filename, int permiss)函数名:creatnew功能: 创建一个新文件用法:int creatnew(const char *filename, int attrib);函数名: cscanf功能: 从控制台执行格式化输入用法:int cscanf(char*format[,argument, ...]);函数名: ctime功能: 把日期和时间转换为字符串用法:char *ctime(const time_t *time);函数名: ctrlbrk功能: 设置Ctrl-Break处理程序用法: void ctrlbrk(*fptr)(void);函数名: delay功能: 将程序的执行暂停一段时间(毫秒)用法: void delay(unsigned milliseconds); 函数名: delline功能: 在文本窗口中删去一行用法: void delline(void);函数名:detectgraph功能: 通过检测硬件确定图形驱动程序和模式用法: void far detectgraph(int far*graphdriver, int far *graphmode);函数名: difftime功能: 计算两个时刻之间的时间差用法: double difftime(time_t time2, time_t time1);函数名: disable功能: 屏蔽中断用法:void disable(void);函数名: div功能: 将两个整数相除, 返回商和余数用法:div_t (int number, int denom);函数名: dosexterr功能: 获取扩展DOS错误信息用法:int dosexterr(struct DOSERR *dblkp); 函数名: dostounix功能: 转换日期和时间为UNIX时间格式用法: long dostounix(struct date *dateptr, struct time *timeptr);函数名: drawpoly功能: 画多边形用法: void far drawpoly(int numpoints, int far *polypoints);函数名:dup功能: 复制一个文件句柄用法: int dup(int handle);函数名:dup2功能: 复制文件句柄用法: int dup2(int oldhandle, int newhandle);函数名: ecvt功能: 把一个浮点数转换为字符串用法: char ecvt(double value, int ndigit, int *decpt, int *sign);函数名: ellipse功能: 画一椭圆用法:void far ellipse(int x, int y, int stangle, int endangle,int xradius, int yradius);函数名: enable功能: 开放硬件中断用法: void enable(void);函数名: eof功能: 检测文件结束用法: int eof(int *handle);函数名: exec...功能: 装入并运行其它程序的函数用法: int execl(char *pathname, char *arg0, arg1, ..., argn, NULL);int execle(char *pathname, char *arg0,arg1, ..., argn, NULL,char *envp[]);int execlp(char *pathname, char *arg0,arg1, .., NULL);int execple(char *pathname, char *arg0,arg1, ..., NULL,char *envp[]);int execv(char *pathname, char *argv[]);int execve(char *pathname, char *argv[], char *envp[]);int execvp(char *pathname, char *argv[]); int execvpe(char *pathname, char *argv[], char *envp[]);函数名:exit功能: 终止程序用法: void exit(int status);函数名: exp功能: 指数函数用法: double exp(double x);函数名: gcvt功能: 把浮点数转换成字符串用法: char *gcvt(double value, int ndigit, char *buf);函数名: geninterrupt功能: 产生一个软中断用法: void geninterrupt(int intr_num);函数名: getarccoords功能: 取得最后一次调用arc的坐标用法: void far getarccoords(struct arccoordstype far *arccoords);函数名: getaspectratio功能: 返回当前图形模式的纵横比用法: void far getaspectratio(int far *xasp, int far *yasp);函数名: getbkcolor功能: 返回当前背景颜色用法: int far getbkcolor(void);函数名: getc功能: 从流中取字符用法: int getc(FILE *stream);函数名: getcbrk功能: 获取Control_break设置用法: int getcbrk(void);函数名: getch功能: 从控制台无回显地取一个字符用法: int getch(void);函数名: getchar功能: 从stdin流中读字符用法: int getchar(void);函数名: getche功能: 从控制台取字符(带回显)用法: int getche(void);函数名: getcolor功能: 返回当前画线颜色用法: int far getcolor(void);函数名: getcurdir功能: 取指定驱动器的当前目录用法: int getcurdir(int drive, char *direc); 函数名: getcwd功能: 取当前工作目录用法: char *getcwd(char *buf, int n);函数名: getdate功能: 取DOS日期用法: void getdate(struct *dateblk);函数名: getdefaultpalette功能: 返回调色板定义结构用法: struct palettetype *far getdefaultpalette(void);函数名: getdisk功能: 取当前磁盘驱动器号用法: int getdisk(void);函数名: getdrivername功能: 返回指向包含当前图形驱动程序名字的字符串指针用法: char *getdrivename(void);函数名: getdta功能: 取磁盘传输地址用法: char far *getdta(void);函数名: getenv功能: 从环境中取字符串用法: char *getenv(char *envvar);函数名: getfat, getfatd功能: 取文件分配表信息用法: void getfat(int drive, struct fatinfo *fatblkp);函数名: getfillpattern功能: 将用户定义的填充模式拷贝到内存中用法: void far getfillpattern(char far*upattern);函数名: getfillsettings功能: 取得有关当前填充模式和填充颜色的信息用法: void far getfillsettings(struct fillsettingstype far *fillinfo);函数名: getftime功能: 取文件日期和时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回当前图形模式用法: int far getgraphmode(void);函数名: getftime功能: 取文件日期和时间用法: int getftime(int handle, struct ftime *ftimep);函数名: getgraphmode功能: 返回当前图形模式用法: int far getgraphmode(void);函数名: getimage功能: 将指定区域的一个位图存到主存中用法: void far getimage(int left, int top, int right, int bottom,void far *bitmap);函数名: getlinesettings功能: 取当前线型、模式和宽度用法: void far getlinesettings(struct linesettingstype far *lininfo):函数名: getmaxx功能: 返回屏幕的最大x坐标用法: int far getmaxx(void);函数名: getmaxy功能: 返回屏幕的最大y坐标用法: int far getmaxy(void);函数名: getmodename功能: 返回含有指定图形模式名的字符串指针用法: char *far getmodename(intmode_name);函数名: getmoderange功能: 取给定图形驱动程序的模式范围用法: void far getmoderange(int graphdriver, int far *lomode,int far *himode);函数名: getpalette功能: 返回有关当前调色板的信息用法: void far getpalette(struct palettetype far *palette);函数名: getpass功能: 读一个口令用法: char *getpass(char *prompt);函数名: getpixel功能: 取得指定像素的颜色用法: int far getpixel(int x, int y);函数名: gets功能: 从流中取一字符串用法: char *gets(char *string);函数名: gettext功能: 将文本方式屏幕上的文本拷贝到存储区用法: int gettext(int left, int top, int right, int bottom, void *destin);函数名: gettextinfo功能: 取得文本模式的显示信息用法: void gettextinfo(struct text_info*inforec);函数名: gettextsettings功能: 返回有关当前图形文本字体的信息用法: void far gettextsettings(struct textsettingstype far *textinfo);函数名: gettime功能: 取得系统时间用法: void gettime(struct time *timep);函数名: getvect功能: 取得中断向量入口用法: void interrupt(*getvect(intintr_num));函数名: getverify功能: 返回DOS校验标志状态用法: int getverify(void);函数名: getviewsetting功能: 返回有关当前视区的信息用法: void far getviewsettings(struct viewporttype far *viewport);函数名: getw功能: 从流中取一整数用法: int getw(FILE *strem);函数名: getx功能: 返回当前图形位置的x坐标用法: int far getx(void);函数名: gety功能: 返回当前图形位置的y坐标用法: int far gety(void);函数名: gmtime功能: 把日期和时间转换为格林尼治标准时间(GMT)用法: struct tm *gmtime(long *clock);函数名: gotoxy功能: 在文本窗口中设置光标用法: void gotoxy(int x, int y);函数名: gotoxy功能: 在文本窗口中设置光标用法: void gotoxy(int x, int y);函数名: graphdefaults功能: 将所有图形设置复位为它们的缺省值用法: void far graphdefaults(void);函数名: grapherrormsg功能: 返回一个错误信息串的指针用法: char *far grapherrormsg(int errorcode);函数名: graphresult功能: 返回最后一次不成功的图形操作的错误代码用法: int far graphresult(void);函数名: _graphfreemem功能: 用户可修改的图形存储区释放函数用法: void far _graphfreemem(void far *ptr, unsigned size);函数名: _graphgetmem功能: 用户可修改的图形存储区分配函数用法: void far *far_graphgetmem(unsigned size);函数名: harderr功能: 建立一个硬件错误处理程序用法: void harderr(int (*fptr)());函数名: hardresume功能: 硬件错误处理函数用法: void hardresume(int rescode);函数名: highvideo功能: 选择高亮度文本字符用法: void highvideo(void);函数名: hypot功能: 计算直角三角形的斜边长用法: double hypot(double x, double y);函数名: imagesize功能: 返回保存位图像所需的字节数用法: unsigned far imagesize(int left, int top, int right, int bottom);函数名: initgraph功能: 初始化图形系统用法: void far initgraph(int far *graphdriver, int far *graphmode函数名: inport功能: 从硬件端口中输入用法: int inp(int protid);函数名: insline功能: 在文本窗口中插入一个空行用法: void insline(void);函数名: installuserdriver功能: 安装设备驱动程序到BGI设备驱动程序表中用法: int far installuserdriver(char far*name, int (*detect)(void));函数名: installuserfont功能: 安装未嵌入BGI系统的字体文件(CHR) 用法: int far installuserfont(char far*name);函数名: int86功能: 通用8086软中断接口用法: int int86(int intr_num, union REGS *inregs, union REGS *outregs)函数名: int86x功能: 通用8086软中断接口用法: int int86x(int intr_num, union REGS *insegs, union REGS *outregs,函数名: intdos功能: 通用DOS接口用法: int intdos(union REGS *inregs, union REGS *outregs);函数名: intdosx功能: 通用DOS中断接口用法: int intdosx(union REGS *inregs, union REGS *outregs,struct SREGS *segregs);函数名: intr功能: 改变软中断接口用法: void intr(int intr_num, struct REGPACK *preg);函数名: ioctl功能: 控制I/O设备用法: int ioctl(int handle, int cmd[,int*argdx, int argcx]);函数名: isatty功能: 检查设备类型用法: int isatty(int handle);函数名: itoa功能: 把一整数转换为字符串用法: char *itoa(int value, char *string, int radix);函数名: kbhit功能: 检查当前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继续驻留用法: void keep(int status, int size);函数名: kbhit功能: 检查当前按下的键用法: int kbhit(void);函数名: keep功能: 退出并继续驻留用法: void keep(int status, int size);函数名: labs用法: long labs(long n);函数名: ldexp功能: 计算value*2的幂用法: double ldexp(double value, int exp); 函数名: ldiv功能: 两个长整型数相除, 返回商和余数用法: ldiv_t ldiv(long lnumer, long ldenom);函数名: lfind功能: 执行线性搜索用法: void *lfind(void *key, void *base, int *nelem, int width,int (*fcmp)());函数名: line功能: 在指定两点间画一直线用法: void far line(int x0, int y0, int x1, int y1);函数名: linerel功能: 从当前位置点(CP)到与CP有一给定相对距离的点画一直线用法: void far linerel(int dx, int dy);函数名: localtime功能: 把日期和时间转变为结构用法: struct tm *localtime(long *clock);函数名: lock功能: 设置文件共享锁用法: int lock(int handle, long offset, long length);函数名: log功能: 对数函数ln(x)用法: double log(double x);函数名: log10功能: 对数函数log用法: double log10(double x);函数名: longjump功能: 执行非局部转移用法: void longjump(jmp_buf env, int val); 函数名: lowvideo功能: 选择低亮度字符用法: void lowvideo(void);函数名: lrotl, _lrotl功能: 将无符号长整型数向左循环移位用法: unsigned long lrotl(unsigned long lvalue, int count);unsigned long _lrotl(unsigned long lvalue, int count);函数名: lsearch功能: 线性搜索用法: void *lsearch(const void *key, void *base, size_t *nelem,size_t width, int (*fcmp)(const void *, const void *));函数名: lseek功能: 移动文件读/写指针用法: long lseek(int handle, long offset, int fromwhere);main()主函数每一C 程序都必须有一main() 函数, 可以根据自己的爱好把它放在程序的某个地方。
c语言delay的用法
c语言delay的用法在单片机应用中,经常会遇到需要短时间延时的情况,一般都是几十到几百μs,并且需要很高的精度(比如用单片机驱动DS18B20时,误差容许的范围在十几μs以内,不然很容易出错);而某些情况下延时时间较长,用计时器往往有点小题大做。
另外在特殊情况下,计时器甚至已经全部用于其他方面的定时处理,此时就只能使用软件定时了。
下面就和大家分享下c语言delay的用法1 C语言程序延时Keil C51的编程语言常用的有2种:一种是汇编语言;另一种是C 语言。
用汇编语言写单片机程序时,精确时间延时是相对容易解决的。
比如,用的是晶振频率为12 MHz的AT89C51,打算延时20 μs,51单片机的指令周期是晶振频率的1/12,即一个机器周期为1 μs;“MOV R0,#X”需要2个机器周期,DJNZ也需要2个机器周期,单循环延时时间t=2X+3(X为装入寄存器R0的时间常数)[2]。
这样,存入R0里的数初始化为8即可,其精度可以达到1 μs。
用这种方法,可以非常方便地实现512 μs以下时间的延时。
如果需要更长时间,可以使用两层或更多层的嵌套,当然其精度误差会随着嵌套层的增加而成倍增加。
虽然汇编语言的机器代码生成效率很高,但可读性却并不强,复杂一点的程序就更难读懂;而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,且C 语言还可以嵌入汇编程序来解决高时效性的代码编写问题。
就开发周期而言,中大型软件的编写使用C 语言的开发周期通常要比汇编语言短很多,因此研究C语言程序的精确延时性能具有重要的意义。
C程序中可使用不同类型的变量来进行延时设计。
经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。
c语言延时函数delay用法
c语言延时函数delay用法
delay函数是c语言中的延时函数,是在程序的特定时机给程序设定一段固定的延时从而使程序实现暂停,从而达到控制程序逻辑运行的目的。
一、delay函数的用法:
1、函数说明:delay函数的原型为:void delay(unsigned int ms),其中ms表示毫秒。
2、函数功能:该函数用于按设定的毫秒数作出延时;函数执行时程序停止运行,所以用这个函数时需要将它放在需要延时的程序中;
3、函数用法:delay函数一般用于遥控程序,让程序具备一定的定时功能和延时功能。
4、函数使用示例:
delay(1000); //程序暂停1s
二、delay函数注意事项:
1、delay函数只能精确到毫秒,误差范围为 ±20ms,所以不适用于对时间要求较为严格的情况;
2、为了更加精确,可以使用带循环的delay函数,例如for循环嵌套delay函数;
3、一般使用delay函数时,一定要注意,要给函数设定一个合理的参数;
4、delay函数运行时会阻塞程序,如果延时时间比较长,可能会造成程序出现不可知的错误;
5、使用delay函数时,可以使用轮询的方式,使之在节省时间的同时也能实现延时的目的;
6、如果程序要求暂停较短时间,可以使用void pause()函数来暂停程序运行而不是利用delay函数;
7、delay函数一般只能用于短期延时,如果需要长期延时,则可以使用其他系统函数,如Sleep()或Suspend()系统函数代替;
8、关于delay函数的使用,要根据具体情况选择合适的参数,如ms应该在100~1000范围内,以达到精确控制程序的运动时间。
C语言delay的用法
C语言delay的用法延迟操作在编程中是非常常见的需求,通过控制程序的执行速度,我们可以实现各种各样的功能。
在C语言中,使用delay函数可以实现延迟操作,本文将介绍C语言中delay函数的用法,以及一些注意事项。
一、什么是delay函数在C语言中,delay函数通常用于使程序休眠一段时间。
它可以让程序停止执行指定的时间长度,然后再继续向下执行。
当需要暂停程序一段时间以等待外部设备响应或者执行时间敏感的任务时,delay函数非常有用。
二、使用头文件要使用delay函数,首先需要包含合适的头文件。
在标准库stdio.h之外,在C 语言中,并没有提供一个专门用于延时操作的标准库头文件。
不过,在很多编译器中(如gcc),可以通过包含特定的头文件来获得延迟功能。
#include <unistd.h> //包含这个头文件以使用usleep函数#include <Windows.h> //包含这个头文件以使用Sleep函数根据所选编译器和操作系统不同,可能需要包含不同的头文件。
要确保选择适当的头文件,并与所选平台兼容。
三、使用usleep进行微秒级别延迟在Linux和Unix系统上,我们可以使用usleep函数来实现微秒级别的延迟。
usleep函数接受一个参数,该参数表示程序休眠的时间长度,以微秒为单位。
下面是一个利用usleep函数实现延迟功能的示例代码:#include <stdio.h>#include <unistd.h>int main() {printf("Delaying for 1 second...\n");usleep(1000000); //延时1秒printf("Delay complete.\n");return 0;}在上面的例子中,我们使用usleep函数延迟了1秒钟。
注意,在使用usleep函数之前需要包含对应的头文件。
单片机delay函数
单片机delay函数
单片机delay函数实现普遍采取延时循环的方式,即循环一个
计数器指定的次数来实现延时。
以下是一个实现普通延时的delay函数:
```c
void delay(unsigned int xms)
{
unsigned char i;
while(xms--)
{
i = 110;
while (i--);
}
}
```
其中,xms为需要延时的毫秒数,i则是用来进行循环的计数
器变量,此处采取了一个实测比较合适的值。
这个函数的原理是在执行delay函数时指定需要延时的时间,每经过1毫秒i
便减1,直到i为0,跳出内循环进行下一次循环,直到经过
了指定的毫秒数,循环结束。
值得注意的是,这种方式实现的延时会浪费系统的资源,因为在延时期间,整个系统都无法做其他任何事情,且精度较低,也在一定程度上浪费了系统的时间片。
在一些比较精密的场合,需要更准确的延时,如使用定时器和中断的方式进行延时等。
c语言中delay的用法
c语言中delay的用法概述:延迟是计算机程序中常用的一种操作,可以实现程序暂停一段时间再继续执行。
在C语言中,延迟操作通常使用delay函数来完成。
本文将介绍C语言中delay函数的用法,并讨论几种常见的延迟实现方法。
一、delay函数的基本用法delay函数是位于“dos.h”头文件中的一个标准库函数。
它需要一个整数作为参数,表示需要延迟的毫秒数。
下面是delay函数的基本用法示例:#include <stdio.h>#include <dos.h>int main() {printf("Delay 1 second\n");delay(1000); // 延迟1000毫秒,即1秒钟printf("Delay complete\n");return 0;}二、不同系统上delay函数的实现delay函数是依赖于操作系统提供的定时器服务来实现的。
因此,在不同的操作系统上,其具体实现可能会有所不同。
在Windows环境下,通常使用timeBeginPeriod和timeEndPeriod来设置定时器分辨率,并通过Sleep函数来进行延迟操作。
以下是一个Windows平台上实现延迟功能的示例代码:#include <windows.h>#include <stdio.h>int main() {printf("Delay 1 second\n");Sleep(1000); // 延迟1000毫秒,即1秒钟printf("Delay complete\n");return 0;}在Linux环境下,可以使用usleep函数来实现延迟操作。
以下是一个Linux平台上实现延迟功能的示例代码:#include <unistd.h>#include <stdio.h>int main() {printf("Delay 1 second\n");usleep(1000000); // 延迟1000000微秒,即1秒钟printf("Delay complete\n");return 0;}三、其他延迟实现方法除了使用delay函数之外,还有一些其他常见的延迟实现方法。