java led_LED学习及一个花样流水灯的实现

本文介绍了如何在STC89C52RC单片机中使用Java控制8位红光LED灯模块,展示了位定义和总线方式点亮LED的方法,并提供了一个花样流水灯的详细实现过程,包括由右至左、由左至右流动以及各种模式的闪烁效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在STC89C52RC中,负责显示的有8个LED灯,8位数码管,并且支持1602和12864两种液晶显示屏;本篇总结的是8位红光LED灯模块。

0_12955235954z45.gif

主要处理的是点亮和熄灭灯的操作。0是点亮,1是熄灭。其中点亮一位LED灯,有两种方法:一个是定义一个可以位寻址的变量;一个是利用总线方式直接为P0口赋值。

方法1例子:

/********************************************************

位定义方式点亮一个LED灯********************************************************/

#include

sbit p0_0=P0^0; //位定义P0口的第一位为p0_0

/*主函数*/

void main() //主函数

{

p0_0=0; //p0_0置低,点亮第一个LED灯

while(1);

}

方法2例子:

/******************************************

用总线方式点亮一个LED灯

******************************************/

#include

void main() //主函数

{

P0=0xfe; //直接给P0口的8个位赋值:0xfe=11111110B,低电平点亮末位LED

while(1); //死循环,让程序停在此处

}

利用时延,在不同的时间段点亮不同位置的灯,可以实现花样流水灯。

一下给出一个例子:

/*****************************************************************

花样流水灯:

8个LED间隔300ms由右至左,再由左至右,再重复一次,然后全部熄灭再以

300ms间隔全部闪烁3次。之后,间隔300ms第一次一个LED亮并流动一次,

第二次两个LED亮并流动一次,……依次到8个LED亮后全部熄灭。最后,间

隔300ms先奇数亮再偶数亮,循环三次;两个LED分别从两边往中间流动三次;

再从中间往两边流动三次;8个LED再全部闪烁3次;关闭发光管,程序停止。

*****************************************************************/

#include

#include

void delay(int z);//声明延时函数

void flow1();

void flow2();

void flow3();

/*主函数*/

void main()

{

flow1();//调用flow1,完成第一部分的任务

delay(300);//延时300ms

flow2();

delay(300);

flow3();

P0=0xff;

while(1);

}

/*定义延时函数*/

void delay(int z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/*定义实现第一部分功能的函数:

8个LED间隔300ms由右至左,再由左至右,再重复一次,然后全部熄灭再以

300ms间隔全部闪烁3次。*/

void flow1()

{

int x,y,z;

int a;

P0=0x7f;//点亮l8

delay(300);//延时300ms

for(a=0;a<2;a++)

{

for(x=0;x<7;x++)//左移

{

P0=_cror_(P0,1);//调用循环左移函数,并赋值给P0

delay(300);

}

P0=0xfe;//点亮l1

delay(300);

for(y=0;y<7;y++) //右移

{

P0=_crol_(P0,1);

delay(300);

}

}

for(z=0;z<3;z++) //全部亮和全部暗闪烁三次

{

P0=0xff;

delay(300);

P0=0x00;

delay(300);

}

}

/*定义完成第二部分功能的函数flow2:第一次一个LED亮并流动一次,

第二次两个LED亮并流动一次,……依次到8个LED亮后全部熄灭*/

void flow2()

{

int x;

P0=0xfe;//点亮一个灯,左移

delay(300);

for(x=0;x<7;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0xfc;//点亮两个灯,左移

delay(300);

for(x=0;x<6;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0xf8;//点亮三个灯,左移

delay(300);

for(x=0;x<5;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0xf0;//点亮四个灯,左移

delay(300);

for(x=0;x<4;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0xe0; //点亮五个灯,左移

delay(300);

for(x=0;x<3;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0xc0;//点亮六个灯,左移

delay(300);

for(x=0;x<2;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0x80;//点亮七个灯,左移一次

delay(300);

for(x=0;x<1;x++)

{

P0=_crol_(P0,1);

delay(300);

}

P0=0x00;//点亮八个灯

delay(300);

P0=0xff;//全部熄灭

}

/*定义完成第三部分功能的函数:间隔300ms先奇数亮再偶数亮,循环三次;两个LED分

别从两边往中间流动三次;再从中间往两边流动三次;8个LED再全部闪烁3次;*/

void flow3()

{

int x;

for(x=0;x<3;x++) //先奇数亮,再偶数亮,循环三次

{

P0=0x55;

delay(300);

P0=0xAA;

delay(300);

}

for(x=0;x<3;x++) //从两边往中间流动三次

{

P0=0x7e;

delay(300);

P0=0xbd;

delay(300);

P0=0xdb;

delay(300);

P0=0xe7;

delay(300);

}

for(x=0;x<3;x++) //从中间往两边流动三次

{

P0=0xe7;

delay(300);

P0=0xdb;

delay(300);

P0=0xbd;

delay(300);

P0=0x7e;

delay(300);

}

for(x=0;x<3;x++) //全暗全亮闪烁三下

{

P0=0xff;

delay(300);

P0=0x00;

delay(300);

}

}

个人认为,LED灯的学习还是比较简单的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值