基于51单片机的心形流水灯设计

基于51单片机的心形流水灯

(仿真+程序+原理图+设计报告)

功能介绍

具体功能:

1.采用51单片机做为主控制器;

2.32个彩色LED接在单片机的32个双向IO口;

3.选好LED的限流电阻,使每种led的亮度接近;

4.九种流水灯花样自动变换,循环往复;

#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
							            //延时
void delay(uint k)    
{	
	uint i,j;
	for(i=k;i--;i>0)
		for(j=100;j--;j>0);
}

void main()
{	
	uchar temp0,temp1;
	uchar yi;
	uchar yi0,yi1;                   
	uint i,j,k,a,b;
	j=k=a=b=3;	
									//全部亮
	P0=P1=P2=P3=0x00;
	delay(700);
	P0=P1=P2=P3=0xff;	
									//每个io口独自亮
	for(i=2;i--;i>0)
	{
		P1=P0=0x00;
		delay(500);
		P1=P0=0xff;
		P3=P2=0x00;
		delay(500);
		P3=P2=0xff;
	}
									//全部亮,闪三次
	for(i=2;i--;i>0)
	{
		P0=P1=P2=P3=0x00;
		delay(100);
		P0=P1=P2=P3=0xff;
		delay(100);
	}
									//P1、P2亮,P3、P0暗
	for(i=3;i--;i>0)
	{
		P1=0x00,P2=0x00; P3=0xff,P0=0xff;
		delay(500);
		P1=0xff,P2=0xff,P3=0x00,P0=0x00;
		delay(500);
	}

									//四个点的流水

	while(j>0)
	{
		temp0=0xfe,temp1=0x7f;
		P1=P3=temp0,P2=P0=temp1;
		delay(100);
		for(i=7;i--;i>0)
		{
			temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
			P1=P3=temp0,P2=P0=temp1;
			delay(100);
		} 
		 j--;
	 }
									 //全部亮,闪三次
	for(i=3;i--;i>0)
	{
		P0=P1=P2=P3=0x00;
		delay(300);
		P0=P1=P2=P3=0xff;
		delay(300);
	}			   

									//四个IO口同样跟踪流水
	while(k>0)
	{
		temp0=0xfe,temp1=0x7f;
		P1=P3=temp0,P2=P0=temp1;
		delay(60);
		for(i=7;i--;i>0)
		{
			temp0=temp0<<1,temp1=temp1>>1;
			P1=P3=temp0,P2=P0=temp1;
			delay(60);
		}
		k--;
	 }
	 P0=P1=P3=P2=0xff;
	 while(k<3)
	 {
	 	  temp0=0x7f,temp1=0xfe;
		  P1=P3=temp0,P2=P0=temp1;
		  delay(60);
		  for(i=7;i--;i>0)
		  {
		  	temp0=temp0>>1,temp1=temp1<<1;
			P1=P3=temp0,P2=P0=temp1;
			delay(60);
		  }
		  k++;
	 }
	 P3=P2=0xff;
						             //两边单个从上向下流水
	yi=0xfe;
	P1=P0=yi;
	delay(50);
	for(i=7;i--;i>0)
	{
		yi=_crol_(yi,1);
		P1=P0=yi;
		delay(50);
	}
	P1=P0=0xff;
	yi=0xfe;
	P3=P2=yi;
	delay(50);
	for(i=7;i--;i>0)
	{
		yi=_crol_(yi,1);
		P3=P2=yi;
		delay(50);
	}
	P3=P2=0Xff;
	 					                //两边单个返回流水
	for(i=7;i--;i>0)			 
	{
		yi=_cror_(yi,1);
		P3=P2=yi;
		delay(50);
	}
	P3=P2=0xff;
	for(i=7;i--;i>0)
	{
		yi=_cror_(yi,1);
		P0=P1=yi;
		delay(50);
	}				 				 
				                          //全部亮,闪三次
	P0=P1=P3=P2=0xff;
	for(i=3;i--;i>0)
	{
		P0=P1=P2=P3=0x00;
		delay(100);
		P0=P1=P2=P3=0xff;
		delay(100);
	}
	                                            //流水灯

	yi0=0xfe,yi1=0x7f;
	P3=P2=yi1,P1=P0=yi0;
	delay(100);
	for(i=7;i--;i>0)
	{
		 yi0=yi0<<1, yi1=yi1>>1;
		 P1=P0=yi0,P3=P2=yi1;
		 delay(100);
	}
	P1=P2=P3=P0=0xff;
	delay(200);
	yi0=0x7f,yi1=0xfe;
	P1=P0=yi0,P3=P2=yi1;
	for(i=7;i--;i>0)
	{
		yi0=yi0>>1,yi1=yi1<<1;
		P1=P0=yi0,P3=P2=yi1;
		delay(100);	
	}
	                                           	  //大循环跟踪流水
	P1=P2=P3=P0=0xff;
	for(i=8;i--;i>0)
	{
		 P1=P1<<1;
		 delay(50);
	}
	for(i=8;i--;i>0)
	{
		 P3=P3<<1;
		 delay(50);
	}

	for(i=8;i--;i>0)
	{
		 P2=P2>>1;
		 delay(50);
	}
	for(i=8;i--;i>0)
	{
		 P0=P0>>1;
		 delay(50);
	}						
			                    	            //逆向大循环跟踪流水

	P1=P2=P3=P0=0xff;
	for(i=8;i--;i>0)
	{
		 P0=P0<<1;
		 delay(50);
	}
	for(i=8;i--;i>0)
	{
		 P2=P2<<1;
		 delay(50);
	}
	for(i=8;i--;i>0)
	{
		 P3=P3>>1;
		 delay(50);
	}
	for(i=8;i--;i>0)
	{
		 P1=P1>>1;
		 delay(50);
	} 


				                              //全部亮,闪三次
	P0=P1=P3=P2=0xff;
	for(i=4;i--;i>0)
	{
		P0=P1=P2=P3=0x00;
		delay(100);
		P0=P1=P2=P3=0xff;
		delay(100);
	}
								   		//全部亮,只有一个暗的在流水
	
	temp0=0x01,temp1=0x00;
	P1=P0=temp0,P3=P2=temp1;
	delay(100);
	for(i=7;i--;i>0)
	{
		temp0=_crol_(temp0,1);
		P1=P0=temp0;
		delay(100);
	}
	P1=P0=0x00;
	temp1=0x01;
	P3=P2=temp1;
	delay(100);
	for(i=7;i--;i>0)
	{
		temp1=_crol_(temp1,1);
		P3=P2=temp1;
		delay(100);
	}
	 									//全部亮,逆向一个暗在流水
	temp0=0x00,temp1=0x80;
	P1=P0=temp0,P3=P2=temp1;
	delay(100);
	for(i=7;i--;i>0)
	{	
		temp1=_cror_(temp1,1);
		P3=P2=temp1;
		delay(100);
	}
	P3=P2=0x00;
	temp0=0x80;
	P1=P0=temp0;
	delay(100); 
	for(i=7;i--;i>0)
	{
		temp0=_cror_(temp0,1);
		P1=P0=temp0;
		delay(100);
	}
			                           			  //花样
	temp0=0xaa,temp1=0x55;
	P1=P3=temp0,P2=P0=temp1;
	delay(500);
	for(;a--;a>0)
		{
			for(i=7;i--;i>0)
			{
				temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
				P1=P3=temp0,P2=P0=temp1;
				delay(500);	
			}

		 }
	for(;b--;b>0)
		{
			temp0=0xee,temp1=0x77;
			P1=P3=temp0,P2=P0=temp1;
			delay(300);
			for(i=7;i--;i>0)
			{
				temp0=_crol_(temp0,1),temp1=_cror_(temp1,1);
				P1=P3=temp0,P2=P0=temp1;
				delay(300);	
			}
		}  	
					  						//环形逐个亮
												
	

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

底座:DIP-40;晶振:12M;

电阻:510欧、10K;

瓷片电容:20pf;

电解电容:10uf;

线路板:FR-4单面板;

直流座子:DC5.5;

电源开关:8.5*8.5;

USB转DC线:DC5.5;

LED:5mm雾状;

导线:若干;

流程图:

设计资料

01 仿真图

本设计使用proteus7.8和proteus8.9两个版本设计,向下兼容,无需担心!具体如图!

02 原理图

本系统原理图采用Altium Designer19设计,具体如图!

03 程序

本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!

04 设计报告

一万一千字设计报告,具体如下!

05 设计资料

全部资料包括仿真源文件 、程序(含注释)、AD原理图、开题报告、参考论文、流程图、元件清单等。具体内容如下,全网最全! !

下面是开源51单片机设计资料

​大家共同学习进步:

链接:百度网盘 请输入提取码

提取码:n7u3

点赞分享,一起学习进步!一起成长。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值