C语言延时的子程序怎么写

#include<reg51.h>
#include<intrins.h>
#define GPIO_LED P2
sbit K1=P0^0;
void Delay10ms( );
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main(void)
{
unsigned int i,j;
j=0x01;

while(1)
{
GPIO_LED=j;
if(K1==0)
{
Delay10ms();
if(K1==0)
{
j=_cror_(j,1);//1000 0000
while((i<50)&&(K1==0)) //检测按键是否松开
{
Delay10ms();
i++;
}
i=0;
}
}
}
}

void Delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
最后这个延时子程序是咋写的,有什么规则没。上面调用的延时10ms,不太懂怎么回事。

其实这是不太精准的延时程序,其实质就是for循环,就是让处理器不停地做递减或递加运算,从而达到延时的目的。至于延时时间,完全是更具经验的得到的。追问

能不能给我讲讲怎样写这种样式的延时子程序

追答

很简单嘛,就仿照你给的例子写
void Delay10ms(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
你可以
void Delay(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<1000;j++);
}
也可以:
void Delay(unsigned char t)
{
unsigned char i,j;

for(i=0;i<t;i++)
for(j=0;j<1000;j++);
}

其实就是for循环,你没学过C语言?

追问

这下面的i与j的取值范围与上面延时时间有啥关系

追答

这里的延时其实就是让CPU做一些无用功,浪费一点时间,而这浪费的时间,就是你要延时的时间。
for循环次数越多,意味着cpu做无用功的时间越长,延时也就越长。
你如果有51开发板或仿真电路,可以更改for的循环次数,查看效果。

追问

哦,好的

谢谢啊大神

温馨提示:内容为网友见解,仅供参考
无其他回答

如何用c语言实现单片机延时?
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)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--);}

求C语言单片机延时10分钟子程序
void main{ TMOD=0x01;\/\/设置定时器0为工作方式1 TH0=(65536-50000)\/256;TL0=(65536-50000)%256;EA=1;\/\/开总中断 ET0=1;\/\/开定时器0中断 TR0=1;\/\/启动定时器0 c=0;while(1){ if(c==12000){c=0;} \/\/10分钟 很精确 } } void time0()interrupt 1 { c++;TH0=(65536-50000...

用C语言编写1ms延迟子程序,不明白for (j=0;j<120;j++),求助大大们_百度...
{ int i,j;for (i=0;i<x;i++) \/\/计数x次,延迟x 1ms for (j=0;j<120;j++); \/\/计数120次,延迟1ms } 这是一个for循环嵌套,每执行一次第一个for语句,那么第二个for语句要执行120次 for (j=0;j<120;j++); 就是没执行一次第一个for循环,就令 j =0,再判断是否 j ...

怎么用C语言写可以调节的延时程序,请大侠帮忙
(2)延时1MS

关于C语言for循环延时函数
for循环实现C语言精确延时 (晶振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--);} 产生的汇编:C:0x0800 7F0F MOV R7,#0x0F C:0x0802 7ECA MOV ...

你好 能不能帮我用c语言写一个延时1ms的子程序 非常感谢~~~
void delay_ms(unsigned int ms) \/\/1ms延时 { uchar a;while(ms--)for(a=0;a<123;a++);}

C语言 单片机编写两位数码管不用定时器延时1s,怎么编
void delay(void) \/\/延时子程序 { unsigned char m,n,s;for(m=20;m>0;m--)for(n=20;n>0;n--)for(s=248;s>0;s--);} 具体延时时间要根据你单片机的速度,晶振频率,指令计算

c语言延时程序
算法是这样的:这个用编译软件,如KEIL,编译通过之后,进入软件调试功能,就可以测出来是延时多少秒。具体我帮你调试过了,如果单片机接12MHz晶振的话,这个是延时0.2秒的子程序。你调用一次delay();就延时0.2秒。请选为最佳答案哦亲。

C语言如何实现延时完成之后去执行延时后一条语句
ET0=1;\/\/允许中断 EA=1;TH0=(65536-50000)\/256;\/\/定时50ms TL0=(65536-50000)%256;中断程序 void Timer0(void) interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;a++;} 延时100ms子程序:void Delay(100ms){ a=0 ;TR0=1;while(a!=2);TR0=0;} ...

C语言精确延时
DFF6 DJNZ R7,C:0802 22 RET 三. 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--); } 产生的汇编 C:0x0800 7F05 MOV R7,#0x05 7E04 MOV R6,#0x04 7DF8 MOV R5,#0xF8 C:0x0806 DDFE DJNZ...

相似回答