基于单片机的流水灯设计:功能包括1、单灯亮灭流水灯,所有的灯逐个亮和灭 2、两灯亮灭流水灯。3、单灯逐一

亮后再灭

功能一:#include<reg51.h>
sbit P1_0=P1^0; //定义IO口
void delay02s(void) //延时0.2秒子程序
{
unsigned char i,j,k; //定义3个无符号字符型数据。
for(i=20;i>0;i--) //作循环延时
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void) //每一个C语言程序有且只有一个主函数,
{
while(1) //循环条件永远为真,以下程序一直执行下去。
{
P1_0=0; // I/O口P1.0输出低电平,小灯被点亮。
delay02s(); //延时经过0.2秒。
P1_0=1; // I/O口P1.0输出高电平,小灯熄灭。
delay02s(); //延时经过0.2秒。
}
}
功能二和功能三只需改变I/O就能实现了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-03
#include <reg51.H>
//假设P2口顺序接LED,并且高电平点亮;
typedef unsigned char uchar;
typedef unsigned int uint;
void delay1ms(uint);

main()
{

while(1)
{
static uchar order=1;
uchar n;
P2=0x00; //每种方式的开始,灯光全灭
if(order==1) //方式一:全灯逐个点亮,然后逐个灭掉
{
for(n=0;n<8;n++)
{
P2|=0x01<<n; //逐个点亮,直至全亮
delay1ms(500); //半秒间隔
}
for(n=0;n<8;n++)
{
P2<<=1; //逐个灭,直至全灭
delay1ms(500);
}
}
else if(order==2) //方式二:全灯两两先亮后灭;
{
for(n=0;n<8;n+=2)
{
P2=0x03<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
else //方式三:全灯逐个先亮后灭;
{
for(n=0;n<8;n++)
{
P2=0x01<<n;
delay1ms(500);
P2=0x00;
delay1ms(500);
}
}
if(++order>3)order=1; //order控制闪烁方式循环
}
}

void delay1ms(uint t)
{
uint i;
uchar j;
for(i=0;i<t;i++)
for(j=0;j<121;j++);
}
相似回答