基于单片机的流水灯介绍_51单片机流水灯的五种实现方法

-回复 -浏览
楼主 2020-09-05 13:46:46
举报 只看此人 收藏本贴 楼主

51单片机流水灯原理

下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。

实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。

1、通过改变赋值实现流水灯

void main()

{ while(1) {

P2=0xfe;

delay1ms(500); P2=0xfd; delay1ms(500); P2=0xfb;

delay1ms(500); P2=0xf7; delay1ms(500); P2=0xef; delay1ms(500); P2=0xdf;

delay1ms(500); P2=0xbf; delay1ms(500); P2=0x7f;

delay1ms(500); } }

2、通过公式运算实现流水灯

void main() {

while(1) {

uinta,b=1; P2=0xfe; delayms(500); for(a=0;a<7;a++)

P2-=b; // P2=P2-b delayms(500); b=b*2; //都化为同一类型进制运算 } } }

3、通过操作符<<与“|”实现流水灯 (通过移位实现流水灯)

void main() {

uchara,i;

while(1) {

a=0xfe; //点亮第一位LED灯 for(i=0;i<8;i++)

{ P2=a;

a=a<<1; //左移一位

a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); } } }

4、通过库函数_crol_(字符左移)实现流水灯

void main()

{

uint a; a=0xfe; while(1) {

P2=a;a=_crol_(a,1); delay_ms(500); } }

5、采用数组实现流水灯

uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void main(void) {

uchari;

while (1) {

for(i=0;i<8;i++) //循环点亮8只LED灯 {

P2=table[i];

delay_ms(500); //延时500毫秒 } } }

文章来自:电子发烧友 网络整理



我要推荐
转发到

友情链接