软件延时:(asm)
程序如下:
NOP
定时器延时:
AJMP DELAY
DELAY:CLR EX0
MOV TMOD,#01H ;设置定时器的工作方式为方式1
MOV TL0,#0B0H ;给定时器设置计数初始值
SETB TR0 ;开启定时器
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#0B0H
CLR TR0 ;定时器要软件清零
SETB EX0
RET
C语言延时程序:
void delay10ms(void)
{
unsigned char i,j,k;
}
void delay1s(void)
unsigned char h,i,j,k;
TH0=0xfd;
TR0=1; /*启动定时器*/
while(TF0==0);
TR0=0;
void delay_1ms(void)
额?延时指的是什么?你可以调用时间的函数,通过输入值来减少或者增加时间.但是增加或者减少时间的按键必须是同样的
其实这是不太精准的延时程序,其实质就是for循环,就是让处理器不停地做递减或递加运算,从而达到延时的目的.至于延时时间,完全是更具经验的得到的.
如果对时间要求不精确,用软延时即可.
#define uchar unsigned char
#define uint unsigned int
sbit s=P1^0;
sbit led=P1^1;
void delayms(uint i) //1ms延时程序
uchar j;
for(;i0;i--)
{;}
void delay1s(uint i) //1s延时程序
for(;i0;i--){delay1ms(1000);}
void main()
led=0;
while(1)
if (s==0)
如果对时间要求精确,则要用到定时器,还要确保电路外接有晶振,并已知晶振频率
void delay()//延时函数
unsigned char i,j; ?//定义两个变量,用于空循环
;
unsigned char flag;
unsigned char i;
flag=1;
EA=1; ? //开放总中断
EX0=1; ?//允许使用外中断
IT0=1; ?//选择负跳变来触发外中断
while(1) ? //用于反复循环
P1=~(1i); ? ?
? delay(); ?//调用延时函数
while(flag!=1);
i=0;
//
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编号为0
flag=~flag;
仿真图:
楼主的采纳率好低啊(时间久了,估计给你回答的人会变少),不过我还是希望楼主能采纳
不要用系统提供的getchar或者scanf这类输入函数
而是去调用系统api,来获取按键的按下抬起状态
这样在识别到按下时,就可以自行控制执行动作的周期,不会出现第一次的停滞
以上就是土嘎嘎小编为大家整理的c语言按键延时函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!