【单片机】心形流水灯——27种流水方式

✌ 作者简介:神奇的汪同学,一名在读的电子信息工程专业大学生.
📑 个人主页:神奇的汪同学主页
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥 如果感觉博主的文章还不错的话,还请不吝👍关注、点赞、收藏三连支持👍一下博主哦


前言

提示:这里是本篇文章的前言内容

1、视频展示

【单片机】心形流水灯之20种花式流水

2、具体流水方式展示

提示:以下是本篇文章正文内容

一、原理图部分

总图展示

在这里插入图片描述
具体部分展示

在这里插入图片描述
在这里插入图片描述

二、代码部分

代码的 main.c 函数部分:

#include <REGX51.H>
#include "display.h"

//Ö÷º¯Êý
void main()
{
	while(1)
	{
		disp0_f_3(); //状态1 所有LED闪烁3次
		disp0_f_all();//状态2  所有LED交替闪烁
		disp0_f_plus();//状态3  LED灯交替闪烁(频率有慢变快)
		disp0_f_updown();//状态4  LED上下交替闪烁
		disp0_f_left(); //状态5  LED左右交替闪烁
		disp0_f_diagonal(); //状态6  LED对角交替闪烁
		disp0_f();//状态7  LED(下半部分)一直亮,上半部分LED向外扩张亮,然后闪烁3次
			
		disp1_CW();//状态1  LED顺时针转一圈
	  	disp1_CW_B();//状态2  LED顺时针转一圈(全亮),并且速度会逐步提高
		disp1_CCW();//状态3  LED逆时针转一圈
		disp1_CCW_B();//状态4  LED顺时针转一圈(全亮),并且速度会逐步提高
		disp1_cwcc_4();//状态5  4个LED同时顺时、逆时针移动1/4圈
		disp1_CW_4();//状态6   4个LED亮并顺时针旋转
		disp1_CW_4B();//状态7  4个LED亮并顺时针旋转(直到全部点亮)
		disp1_CCW_4();//状态8 	  4个LED亮并逆时针旋转
		disp1_CCW_4B();//状态9   4个LED亮并逆时针旋转(直到全部点亮)
		disp1_CW_2();//状态10  2个LED同时顺时针移动半圈
		disp1_CCW_2();//状态11  2个LED同时逆时针移动半圈
		disp1_updown_2();//状态12   LED自上而下逐个点亮
  		disp1_updown_2B();//状态13   LED自上而下逐个点亮(全亮)
		disp1_updown_2plus();//状态14  2个LED自上而下逐个点亮(循环5次,且频率渐快,到最快时持续循环16次,然后循环5次频率再逐渐降低)
		disp1_downup_2();//状态15  LED自下而上逐渐点亮
		disp1_downup_2B();//状态16  LED自下而上逐渐点亮(直到全部点亮)
		disp1_Lout();//状态17  LED从左往右开始点亮(直到全亮),然后从中间往左右边熄灭
		disp1_Rout();//状态18  LED从右往左开始点亮(直到全亮),然后从左右两边开始熄灭(直到全部熄灭)
			
			
		disp2_bright_cwout();//状态1 从LED全部亮到全不亮(间断8格的4个LED开始逆时针熄灭)
		disp2_bright_ccwout();//状态2 从LED全部亮到全不亮(间断8格的4个LED开始顺时针熄灭)
	}
}

代码的 display.c (部分代码):

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char


uchar i,j,k;//定义循环变量
uint tt=70;//定义时间指数
uint time=200;
uint time1=80;

uchar code table0[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED从低位往高位移
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//LED从高位往低位移

uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//LED从1个亮到8个都点亮(从低位往高位)
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//LED从1个亮到8个都点亮(从高位往低位)

uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//LED从8个全亮到一个都不亮(从低位往高位)
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//LED从8个全亮到一个都不亮(从高位往低位)



 //延时函数
void delay(uint time)        
{
	uint x,y;
	for(x=time;x>0;x--)
	for(y=110;y>0;y--);
}

 //状态1 所有LED闪烁3次
void disp0_f_3()
{
	for(i=0;i<3;i++)
	{
		P0=0x00; P2=0x00; P1=0x00; P3=0x00;
		delay(200);
		P0=0xff; P2=0xff; P1=0xff; P3=0xff;
		delay(200);
	}
}

//状态2  所有LED交替闪烁
void disp0_f_all()
{
	for(i=0;i<8;i++)
	{
		P1=~P1;
		P3=~P3;
		P2=~P2;
		P0=~P0;
		delay(100);
	}
}

//状态3  LED灯交替闪烁(频率有慢变快)
void disp0_f_plus()
{
	for(i=0;i<9;i++)
	{
		P0=0x00; P1=0x00; P2=0x00; P3=0x00;
		delay(time);
		P0=~P0; P1=~P1; P2=~P2; P3=~P3;
		delay(time);
		time=time-22;
		if(time==2) time=200;
	}
}

//状态4  LED上下交替闪烁
void disp0_f_updown() 
{
	for(i=0;i<8;i++)
	{
		P1=0x00; P0=0x00;
		P2=0xff; P3=0xff;
		delay(100);
		P1=0xff; P0=0xff;
		P2=0x00; P3=0x00;
		delay(100);
	}
}

//状态5  LED左右交替闪烁
void disp0_f_left()
{
	for(i=0;i<8;i++)
	{
		P1=0x00; P3=0x00;
		P0=0xff; P2=0xff;
		delay(100);
		P1=0xff; P3=0xff;
		P0=0x00; P2=0x00;
		delay(100);
	}
}

//状态6  LED对角交替闪烁
void disp0_f_diagonal()
{
	for(i=0;i<8;i++)
	{
		P1=0x00; P2=0x00;
		P0=0xff; P3=0xff;
		delay(100);
		P1=0xff; P2=0xff;
		P0=0x00; P3=0x00;
		delay(100);
	}
	P0=0xff; P3=0xff;
}

//状态7  LED(下半部分)一直亮,上半部分LED向外扩张亮,然后闪烁3次
void disp0_f()
{
	P2=0x00;P3=0x00;
	for(i=0;i<8;i++)
	{
		P1=table2[i];
		P0=table2[i];
		delay(100);
	}
	disp0_f_3();
	P0=0xff;P1=0xff;
	P2=0xff;P3=0xff;
}

//状态1  LED顺时针转一圈
void disp1_CW()
{
	for(i=0;i<8;i++)
	{
		P0=table0[i];
		delay(100);
	}
	P0=0xff;
	for(i=0;i<8;i++)
	{
		P2=table0[i];
		delay(100);
	}
	P2=0xff;
	for(i=0;i<8;i++)
	{
		P3=table1[i];        
		delay(100);
	}
	P3=0xff;
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		delay(100);
	}
	P1=0xff;
}


//状态2  LED顺时针转一圈(全亮),并且速度会逐步提高
void disp1_CW_B()
{
	for(j=0;j<3;j++)
	{
		for(i=0;i<8;i++)
		{
			P0=table2[i];
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P2=table2[i];
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P3=table3[i];        
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P1=table3[i];
			delay(time1);
		}
		time1=time1-20;
		if(time1<30) time1=80;
		P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
	}
}

//状态3  LED逆时针转一圈
void disp1_CCW()
{
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		delay(100);
	}
	P1=0xff;
	for(i=0;i<8;i++)
	{
		P3=table0[i];
		delay(100);
	}
	P3=0xff;
	for(i=0;i<8;i++)
	{
		P2=table1[i];        
		delay(100);
	}
	P2=0xff;
	for(i=0;i<8;i++)
	{
		P0=table1[i];
		delay(100);
	}
	P0=0xff;
}

//状态4  LED顺时针转一圈(全亮),并且速度会逐步提高
void disp1_CCW_B()
{
	for(j=0;j<3;j++)
	{
		for(i=0;i<8;i++)
		{
			P1=table2[i];
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P3=table2[i];
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P2=table3[i];        
			delay(time1);
		}
		for(i=0;i<8;i++)
		{
			P0=table3[i];
			delay(time1);
		}
		time1=time1-20;
		if(time1<30) time1=80;
		P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
	}
}

 //状态5  4个LED同时顺时、逆时针移动1/4圈
void disp1_cwcc_4()
{
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P3=table1[i];
		P2=table0[i];
		P0=table0[i];
		delay(100);
	}
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		P3=table0[i];
		P2=table1[i];
		P0=table1[i];
		delay(100);
	}
}

//状态6   4个LED亮并顺时针旋转
void disp1_CW_4()
{
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P3=table1[i];
		P2=table0[i];
		P0=table0[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}

代码的 display.h 部分:

#ifndef __DISPLAY_H__
#define __DISPLAY_H__

/*--------闪烁--------*/
void disp0_f_3();
void disp0_f_all();
void disp0_f_plus();
void disp0_f_updown();
void disp0_f_left();
void disp0_f_diagonal();
void disp0_f();

/*--------单个流水--------*/
void disp1_CW();
void disp1_CW_B();
void disp1_CCW();
void disp1_CCW_B();
void disp1_cwcc_4();
void disp1_CW_4();
void disp1_CW_4B();
void disp1_CCW_4();
void disp1_CCW_4B();
void disp1_CW_2();
void disp1_CCW_2();
void disp1_updown_2();
void disp1_updown_2B();
void disp1_updown_2plus();
void disp1_downup_2();
void disp1_downup_2B();
void disp1_Lout();
void disp1_Rout();


/*--------全亮/全灭--------*/
void disp2_bright_cwout();
void disp2_bright_ccwout();



#endif

总结

那么今天的分享就到这里吧 如果觉得博主的这篇文章不错的话麻烦给博主一个三连。需源码的小伙伴可以私信我哦,你的三连就是对我最大的支持。

  • 48
    点赞
  • 273
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇的汪同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值