只有当表达式为0时才会跳出循环;所以可以用while做延时用
a=50000;
while(a--);
当a减到为0时 循环结束;
想要永远循环得话可以这样用
while( 1 ){
a=500;
while( a-- );
}
软件延时
编写一个让第一个灯闪烁的程序
#include <reg52.h>
unsigned int a;
void main()
{
while(1){
a=50000;
P1=0xfe;
while( a-- );
a=50000;
P1=0xff;
while( a-- );
}
}
中间用了两次延时程序;
子程序调用
延时子程序
void delay()
{
uint x,y;
for(x=100;x>0;x--)
for(y=2000;y>0;y--);
}
延时时间为 100*2000*机器周期
完整程序 实现灯闪烁
#include <reg52.h> //头文件
#define uint unsigned int //宏定义
sbit led1=P1^0;
void delay(); //声明函数
void main()
{
while(1)
{
led1=0;
delay(); //延时
led1=1;
delay(); //延时
}
}
void delay() //延时子程序
{
uint x,y;
for(x=100;x>0;x--)
for(y=2000;y>0;y--);
}
带参数的子程序调用
#include <reg52.h>
#define uint unsigned int
sbit led1=P1^0;
void delay(uint); //声明函数
void main()
{
while(1)
{
led1=0;
delay(500);
led1=1;
delay(500);
}
}
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
C51库函数的调用
aa=_crol_(aa,1);
aa左移一位 并把结果再次给aa
用c51库函数调用完成流水灯
#include <reg52.h>
#include <intrins.h> //包含_crol_函数所在的头文件
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
uchar aa; //定义一个中间量,来给P1赋值
void main()
{
aa=0xfe; //赋值11111110
while(1)
{
P1=aa; //第一个灯亮
delay(500); //延时
aa=_crol_(aa,1); //将aa循环左移1位再赋值给aa
}
}
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
蜂鸣器
当b接低电平的时候 ec导通 蜂鸣器启动
b是由单片机上P2.3口控制的
#include <reg52.h>
#define uint unsigned int
sbit fmq=P2^3;
void delay(uint);
void main()
{
while(1)
{
fmq=0;
delay(500);
fmq=1;
delay(100);
}
}
void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}