#include<reg52.h>
sbit led1=P1^0; //将P1口的第一位赋值给sbit 型的变量led1
void main(){
while(1){ //使表达式始终为真
led1=0; //将P1口的第一位置零 ,即电路连通,点亮第一个发光二级管
}
}
流水灯就是使二极管一会亮,一会暗从而产生闪烁的效果
二极管高电平时灭,低电平时亮,程序如下
#include<reg52.h>
sbit led1=P1^0; //将P1口的第一位赋值给sbit 型的变量led1
void main(){
unsigned int a;
a=5000; //数据随便定义
while(1){ //使表达式始终为真
led1=0; //将P1口的第一位置零 ,即电路连通,点亮第一个发光二级管
while(a--); //做延迟使用
a=5000;
led1=1; //将P1口的第一位置1 ,即电路断开,熄灭第一个发光二级管
while(a--); //做延迟
a=5000;
}
}
第一个二极管就闪烁了
为了方便调用,我们可以写一个延时的函数
如下:
void delay(){
unsigned int a;
a=10000;
while(a--);
}
或者
void delay(){
unsigned int x,y;
for(x=100;x>0;x--)
for(y=100;y>0;y--)
{};
}
我们也可以给延时函数加上参数,由我们自己来控制亮灭的时间
void delay(unsigned int x, unsigned int y){
for(x=100;x>0;x--)
for(y=100;y>0;y--)
{};
}
第一个的亮灭我们已经搞定,接下来的也很easy了,只要调用函数,多写几个,流水灯就出来了
我的流水灯如下
#include<reg52.h>
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
void delay();
void main (){
while(1) {
led1=0;
delay();
led1=1;
led2=0;
delay();
led2=1;
led3=0;
delay();
led3=1;
led4=0;
delay();
led4=1;
led5=0;
delay();
led5=1;
led6=0;
delay();
led6=1;
led7=0;
delay();
led7=1;
led8=0;
delay();
led8=1;
}
}
void delay(){
uint x,y;
for(x=100;x>0;x--)
for(y=100;y>0;y--)
{};
}
看上去很长,其实很简单,都是一些重复性的工作
当然对于做流水灯,我们也可以调用c 库里的函数_crol_()
语法:
#include <intrins.h>
unsigned char _crol_ (
unsigned char c, /* character to rotate left */
unsigned char b); /* bit positions to rotate */
_crol_(char a,2)
即将一个字符型变量循环左移2位
char a,b;
a=cxA5; //10100101
b=_crol_(a,3); //左移三位 ,多出的三位补到右边
b=0X2D ; //00101101
由此函数可得流水灯如下
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
void delay();
void main(){
unsigned char a;
a=0xFE;
P1=a;
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
P1=_crol_(P1,1);
delay();
}
void delay(){
uint x,y;
for(x=100;x>0;x--)
for(y=100;y>0;y--)
{};
}
流水灯完成
带参数的延时函数
void delay(unsigned int time){
unsigned int j,i;
for(j=time;j>0;j--)
for(i=115;i>0;i--);
}
当time为1时,延时1毫秒。当time为500时延时500毫秒。当time为1000时,延时1秒