可是这段代码在软件调试中发现循环1000次这个1毫秒的延时语句时却跟1秒差距有点大(大于5ms对于单片机来说是一个很大的误差),在《手把手教你学51单片机》文档的4.4节也提到C 语言的延时时间是不能通过程序看出来的,所以我们只能在软件中继续调试新的延时1秒的代码。
软件延时:(asm)晶振12MHZ,延时1秒 程序如下:DELAY:MOV 72H,#100 LOOP3:MOV 71H,#100 LOOP1:MOV 70H,#47 LOOP0:DJNZ 70H,LOOP0 NOP DJNZ 71H,LOOP1 MOV 70H,#46 LOOP2:DJNZ 70H,LOOP2 NOP DJNZ 72H,LOOP3 MOV 70H,#48 LOOP4:DJNZ 70H,LOOP4 定时器延时:晶振12MHZ,延时1s,...
keilc51好像也是用C编程,一般延迟程序就是增加系统负载比如:int i,j;yanchi(){ for(i=0;i<1000;i++)for(j=0;j<1000;j++);} 这样就可以达到延迟的目的,具体参数你可以随便设。
就可以用Sleep() 了 S大写
如果你用的是4M的晶振的话。void delay(uint x){ uint a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}
先写一个延时程序 void delay_ms(int time){ int x,y;for(x=110;x>0;x--)for(y=time;y>0;y--);} 然后到主程序:main(){ while(1){ 先让灯亮;delay(500);再让灯灭;delay(500);} } 这样就OK了,至于灯亮和灯灭 要看你是共阴还是共阳了 相信这个是很容易处理的。
比如菲博的那个数列,16次就够了
这个程序相对比较好实现,就直接设置一个标志位,然后只要K1确认按下了,那么这个标志位置位嘛,然后就开始在定时器中计时,不占系统资源,方便,快捷.
C语言 C++ proteus仿真 STC51 相关软件 dev-c c-free VB6.0 VC6.0 vc2010 PIC AVR Atmel PHP JAVA SQL MSP ARM Fortran VisualStudio VS2008 VS2010 VS2012 VS2013 VS2015 VS2017 VS2019 VS2022 VS2005 vscode 芯片相关 电子电路 外围电路 python Keil 2 Keil 3 Keil 4 Keil 5 文章归档 2023年10月 ...