基于51单片机的心形流水灯
(仿真+程序+原理图+设计报告)
功能介绍
具体功能:
1.采用51单片机做为主控制器;
2.32个彩色LED接在单片机的32个双向IO口;
3.选好LED的限流电阻,使每种led的亮度接近;
4.九种流水灯花样自动变换,循环往复;
演示视频:
基于51单片机的心形流水灯设计
#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原理图、开题报告、参考论文、流程图、元件清单等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。