delay函數(shù)
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有革吉免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
功
能:
將程序的執(zhí)行暫停一段時(shí)間(毫秒)
(該函數(shù)是TC下特有的函數(shù),VC下應(yīng)使用Sleep()函數(shù))
用
法:
void
delay(unsigned
milliseconds);
程序例:
/*
Emits
a
440-Hz
tone
for
500
milliseconds
*/
#includedos.h
int
main(void)
{
sound(440);
delay(500);
nosound();
return
0;
}
C語(yǔ)言的延遲函數(shù)一般是利用無(wú)意義程序運(yùn)行來(lái)控制時(shí)間從而達(dá)到延時(shí)的目的
舉個(gè)例子:
for(i=0;ix;i++)
for(j=0;j120;j++);
這是延時(shí)x毫秒的for循環(huán)語(yǔ)句。
值得注意的是記得最后的;一定得記得寫。
下面是delay
函數(shù)原型:
原型:
void
Delay(unsigned
int
nDelay)
{
unsigned
int
i,j,k;
for
(
i=0;inDelay;i++
)
for
(
j=0;j6144;j++
)
k++;
}
用法:#include
system.h
功能:短暫延時(shí)
說(shuō)明:延時(shí)msec*4毫秒所以,delay的延遲時(shí)間是和你的cpu時(shí)鐘周期相關(guān)的
給你一個(gè)E2PROM下,控制LED顯示時(shí)間的程序希望對(duì)你的學(xué)習(xí)有幫助。
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
uchar flag,sec;
uint num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,//0x77,0x7c,
//0x39,0x5e,0x79,0x71
};
void delay()
void start() //開始信號(hào)
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //應(yīng)答
{
uchar i=0;
scl=1;
delay();
while((sda==1)(i250))i++;
scl=0;
delay();
}
void init()
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar date)
{
uchar i,temp;
temp=date;
scl=0;
for(i=0;i8;i++)
{
temp=temp1;
delay();
sda=CY;
delay();
scl=1;
delay();
scl=0;
delay();
}
sda=1;
delay();
}
uchar read_byte()
{
uchar i,k;
scl=0;
delay();
sda=1;
delay();
for(i=0;i8;i++)
{
scl=1;
delay();
k=(k1)|sda;
scl=0;
delay();
}
return k;
}
void delayms(uchar x)
{
uchar a,b;
for(a=x;a0;a--)
for(b=110;b0;b--);
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;//01111111
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
void main()
{
init();
num=0;
sec=read_add(1);
if(sec=100)
sec=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(sec/10,sec%10);
if(flag==1)
{
flag=0;
write_add(1,sec);
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
sec++;
flag=1;
if(sec==100)
{
sec=0;
}
}
}
定義一個(gè)延時(shí)xms毫秒的延時(shí)函數(shù)
void delay(unsigned int xms) // xms代表需要延時(shí)的毫秒數(shù)
{
unsigned int x,y;
for(x=xms;x》0;x--)
for(y=110;y》0;y--);
}
使用:
void Delay10us(uchar Ms)
{
uchar data i;
for(;Ms》0;Ms--)
for(i=26;i》0;i--);
}
i=[(延時(shí)值-1.75)*12/Ms-15]/4
擴(kuò)展資料
1、在C51中進(jìn)行精確的延時(shí)子程序設(shè)計(jì)時(shí),盡量不要或少在延時(shí)子程序中定義局部變量,所有的延時(shí)子程序中變量通過(guò)有參函數(shù)傳遞。
2、在延時(shí)子程序設(shè)計(jì)時(shí),采用do…while,結(jié)構(gòu)做循環(huán)體要比f(wàn)or結(jié)構(gòu)做循環(huán)體好。
3、在延時(shí)子程序設(shè)計(jì)時(shí),要進(jìn)行循環(huán)體嵌套時(shí),采用先內(nèi)循環(huán),再減減比先減減,再內(nèi)循環(huán)要好。