【单片机】心形流水灯の制作指南(保姆级)

✌ 作者简介:盐焗小星球_wyb,一名电子信息大学生.
个人主页:盐焗小星球_wyb的主页
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
如果感觉博主的文章还不错的话,还请不吝 关注、点赞、收藏三连哦!
人生格言:天行健,君子以自强不息!

文章目录

  • 前言
  • 一、原理图设计
    • A、模块电路设计
      • 1.最小系统
      • 2.烧录电路
      • 3.LED电路
      • 4.供电电路
      • 5.其他电路
    • B、整体电路设计
      • 方案一:(AD20绘制)
      • 方案二:(立创DEA绘制)
  • 二、写程序仿真
    • 1.Keil 5 编写程序
      • a.main.c函数
      • b.display.c函数
      • c.display.h函数
    • 2.Proteus 8 绘制仿真电路
  • 三、PCB布局
    • 1.布局、布线和放置Logo
    • 2.铺铜和DRC检查
    • 3.生成Gerber文件
  • 四、打板、采样、焊接和烧录
    • 1.打板
    • 2.采样
    • 3.焊接
    • 4.烧录
  • 五、成品展示
  • 总结


前言

提示:这里是本文的前言内容:
希望这条博客能帮助到一些刚入门51单片机的萌新,这完全就是保姆级教程啦!下面是这个小项目的大致的设计流程图:
【单片机】心形流水灯の制作指南(保姆级)_第1张图片


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

一、原理图设计

A、模块电路设计

做这个项目之前可以先用 Proteus画出仿真电路图,仿真没有问题后;在用嘉立创EDA或者AD20绘制原理图再生成PCB打板。这里的模块设计是提供一个绘制原理图的设计思路:

1.最小系统

提示:如果对最小系统不熟悉或者还不是很了解的,可以点击这里: 最小系统
【单片机】心形流水灯の制作指南(保姆级)_第2张图片

2.烧录电路

【单片机】心形流水灯の制作指南(保姆级)_第3张图片

3.LED电路

【单片机】心形流水灯の制作指南(保姆级)_第4张图片
【单片机】心形流水灯の制作指南(保姆级)_第5张图片

4.供电电路

A、常用的DC供电电路
【单片机】心形流水灯の制作指南(保姆级)_第6张图片
B、可自动切换DC供电(时可以给电池充电)和电池供电电的电路
【单片机】心形流水灯の制作指南(保姆级)_第7张图片

5.其他电路

A、红外电路
【单片机】心形流水灯の制作指南(保姆级)_第8张图片
B、蜂鸣器电路
【单片机】心形流水灯の制作指南(保姆级)_第9张图片

B、整体电路设计

方案一:(AD20绘制)

【单片机】心形流水灯の制作指南(保姆级)_第10张图片
PCB的3D效果展示:

心形流水灯PCB展示!

方案二:(立创DEA绘制)

【单片机】心形流水灯の制作指南(保姆级)_第11张图片
PCB的3D效果展示:

【单片机】心形流水灯贴片版为了能免费打板用立创eda又重新画了一遍!新增电源管理模块可以给3.7v锂电池充电供电还有一些个人喜欢的logo

二、写程序仿真

1.Keil 5 编写程序

a.main.c函数

#include 
#include "display.h"

//主函数
void main()
{
	while(1)
	{
		disp0_f_3();
		disp0_f_all();
		disp0_f_plus();
		disp0_f_updown();
		disp0_f_left();
		disp0_f_diagonal();
		disp0_f();
			
		disp1_CW();
	  	disp1_CW_B();
		disp1_CCW();
	    disp1_CCW_B();
		disp1_cwcc_4();
		disp1_CW_4();
		disp1_CW_4B();
		disp1_CCW_4();
		disp1_CCW_4B();
		disp1_CW_2();
		disp1_CCW_2();
		disp1_updown_2();
 		disp1_updown_2B();
		disp1_updown_2plus();
		disp1_downup_2();
		disp1_downup_2B();
		disp1_Lout();
		disp1_Rout();
			
		disp2_bright_cwout();
		disp2_bright_ccwout();

	}
}

b.display.c函数

#include
#include
#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};
uchar code table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table2[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
uchar code table3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};

uchar code table4[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
uchar code table5[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};



void delay(uint time)        
{
	uint x,y;
	for(x=time;x>0;x--)
	for(y=110;y>0;y--);
}


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);
	}
}

void disp0_f_all()
{
	for(i=0;i<8;i++)
	{
		P1=~P1;
		P3=~P3;
		P2=~P2;
		P0=~P0;
		delay(100);
	}
}


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;
	}
}


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);
	}
}


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);
	}
}


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;
}


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;
}

void disp1_CW()
{
	for(i=0;i<8;i++)
	{
		P0=table0[i];
		delay(100);
	}
	P0=0xff;
	for(i=0;i<8;i++)
	{
		P2=table1[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;
}



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=table3[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;
	}
}


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=table0[i];        
		delay(100);
	}
	P2=0xff;
	for(i=0;i<8;i++)
	{
		P0=table1[i];
		delay(100);
	}
	P0=0xff;
}

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=table2[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;
	}
}


void disp1_cwcc_4()
{
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P3=table1[i];
		P2=table1[i];
		P0=table0[i];
		delay(100);
	}
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		P3=table0[i];
		P2=table0[i];
		P0=table1[i];
		delay(100);
	}
}


void disp1_CW_4()
{
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P3=table1[i];
		P2=table1[i];
		P0=table0[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}


void disp1_CW_4B()
{
	for(i=0;i<8;i++)
	{
		P1=table3[i];
		P3=table3[i];
		P2=table3[i];
		P0=table2[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}


void disp1_CCW_4()
{
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		P3=table0[i];
		P2=table0[i];
		P0=table1[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}


void disp1_CCW_4B()
{
	for(i=0;i<8;i++)
	{
		P1=table2[i];
		P3=table2[i];
		P2=table2[i];
		P0=table3[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}


void disp1_CW_2()
{
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		P2=table0[i];
		delay(100);
	}
	P1=0xff;
	P2=0xff;
	for(i=0;i<8;i++)
	{
		P3=table0[i];
		P0=table1[i];
		delay(100);
	}
	P3=0xff;
	P0=0xff;
}


void disp1_CCW_2()
{
	for(i=0;i<8;i++)
	{
		P3=table1[i];
		P0=table0[i];
		delay(100);
	}
	P3=0xff;
	P0=0xff;
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P2=table1[i];
		delay(100);
	}
	P1=0xff;
	P2=0xff;
}


void disp1_updown_2()
{
	for(i=0;i<8;i++)
	{
		P1=table0[i];
		P0=table0[i];
		delay(50);
	}
	P1=0xff;P0=0xff;
	for(i=0;i<8;i++)
	{
		P3=table0[i];
		P2=table1[i];
		delay(50);
	}
	P3=0xff;P2=0xff;
}


void disp1_updown_2B()
{
	for(i=0;i<8;i++)
	{
		P1=table2[i];
		P0=table2[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P3=table2[i];
		P2=table3[i];
		delay(50);
	}
	P1=0xff;P0=0xff;
	P3=0xff;P2=0xff;
}


void disp1_updown_2plus()
{

	for(j=0;j<5;j++)
	{
		for(i=0;i<8;i++)
		{
			P1=table0[i];
			P0=table0[i];
			delay(tt);
		}
		P1=0xff; P0=0xff;
		for(i=0;i<8;i++)
		{
			P3=table0[i];
			P2=table1[i];
			delay(tt);
		}
		P3=0xff; P2=0xff;
		tt=tt-10;
	}


	for(j=0;j<16;j++)
	{
		for(i=0;i<8;i++)
		{
			P1=table0[i];
			P0=table0[i];
			delay(20);
		}
		P1=0xff; P0=0xff;
		for(i=0;i<8;i++)
		{
			P3=table0[i];
			P2=table1[i];
			delay(20);
		}
		P3=0xff; P2=0xff;
	}
	
	tt=20;

	for(j=0;j<5;j++)
	{
		for(i=0;i<8;i++)
		{
			P1=table0[i];
			P0=table0[i];
			delay(tt);
		}
		P1=0xff; P0=0xff;
		for(i=0;i<8;i++)
		{
			P3=table0[i];
			P2=table1[i];
			delay(tt);
		}
		P3=0xff; P2=0xff;
		tt=tt+10;
	}
	tt=70; 

}


void disp1_downup_2()
{
	for(i=0;i<8;i++)
	{
		P3=table1[i];
		P2=table0[i];
		delay(100);
	}
	P3=0xff;
	P2=0xff;
	for(i=0;i<8;i++)
	{
		P1=table1[i];
		P0=table1[i];
		delay(100);
	}
	P1=0xff;
	P0=0xff;
}


void disp1_downup_2B()
{
	for(i=0;i<8;i++)
	{
		P3=table3[i];
		P2=table2[i];
		delay(100);
	}
	for(i=0;i<8;i++)
	{
		P1=table3[i];
		P0=table3[i];
		delay(100);
	}
	P1=0xff;	P3=0xff; 	P2=0xff;	P0=0xff;
}


void disp1_Lout() 
{
	P1=0xff;P0=0xff;
	P2=0xff;P3=0xff;
	for(i=0;i<8;i++)
	{
		P1=table2[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P3=table2[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P2=table2[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P0=table3[i];
		delay(50);
	}
	
	delay(100);
	for(i=0;i<8;i++)
	{
		P1=table4[i];
		P0=table4[i];
		delay(50);
	}
	P1=0xff;P0=0xff;
	for(i=0;i<8;i++)
	{
		P3=table4[i];
		P2=table5[i];
		delay(50);
	}
	P3=0xff;P2=0xff;
	delay(100); 
}


void disp1_Rout()  
{
	P1=0xff;P0=0xff;
	P2=0xff;P3=0xff;
	for(i=0;i<8;i++)
	{
		P0=table2[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P2=table3[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P3=table3[i];
		delay(50);
	}
	for(i=0;i<8;i++)
	{
		P1=table3[i];
		delay(50);
	}
	
	delay(100);
	for(i=0;i<8;i++)
	{
		P1=table4[i];
		P0=table4[i];
		delay(50);
	}
	P1=0xff;P0=0xff;
	for(i=0;i<8;i++)
	{
		P3=table4[i];
		P2=table5[i];
		delay(50);
	}
	P3=0xff;P2=0xff;
	delay(100); 
}


void disp2_bright_cwout()
{
	P1=0x00; P3=0x00; P2=0x00; P0=0x00;
	for(i=0;i<8;i++)
	{
		P1=table5[i];
		P3=table5[i];
		P2=table5[i];
		P0=table4[i];
		delay(100);
	}
	P1=0xff; P3=0xff;P2=0xff;P0=0xff;
}


void disp2_bright_ccwout()
{
	P1=0x00; P3=0x00; P2=0x00; P0=0x00;
	for(i=0;i<8;i++)
	{
		P1=table4[i];
		P3=table4[i];
		P2=table4[i];
		P0=table5[i];
		delay(100);
	}
	P1=0xff; P3=0xff;P2=0xff;P0=0xff;
}

c.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

2.Proteus 8 绘制仿真电路

【单片机】心形流水灯の制作指南(保姆级)_第12张图片

【单片机】Proteus仿真心形流水灯

三、PCB布局

提示:以下虽是AD20画板流程,但用立创EDA画板时同样可以参考绘制流程

1.布局、布线和放置Logo

【单片机】心形流水灯の制作指南(保姆级)_第13张图片

2.铺铜和DRC检查

a、顶层
【单片机】心形流水灯の制作指南(保姆级)_第14张图片
b、底层
【单片机】心形流水灯の制作指南(保姆级)_第15张图片

3.生成Gerber文件

生成Gerber文件
【单片机】心形流水灯の制作指南(保姆级)_第16张图片
检查DRC
【单片机】心形流水灯の制作指南(保姆级)_第17张图片
导出到工程文件夹
【单片机】心形流水灯の制作指南(保姆级)_第18张图片【单片机】心形流水灯の制作指南(保姆级)_第19张图片

四、打板、采样、焊接和烧录

1.打板

上传Gerber文件后,选择层数、尺寸和板子数量(默认5片)
【单片机】心形流水灯の制作指南(保姆级)_第20张图片
确认生产稿选择:不需要(其他默认如图设置)
【单片机】心形流水灯の制作指南(保姆级)_第21张图片
可以选择自己喜欢的阻焊颜色:这里默认绿色(嘉立创紫色也挺好看的)
【单片机】心形流水灯の制作指南(保姆级)_第22张图片
选择交期:默认选择免费加急
【单片机】心形流水灯の制作指南(保姆级)_第23张图片
SMT贴片:选择不需要
【单片机】心形流水灯の制作指南(保姆级)_第24张图片
激光网选项:选择不需要
【单片机】心形流水灯の制作指南(保姆级)_第25张图片
填写自己的收货地址和联系方式
【单片机】心形流水灯の制作指南(保姆级)_第26张图片

2.采样

下面是元器件采样清单(仅供参考)
【单片机】心形流水灯の制作指南(保姆级)_第27张图片
【单片机】心形流水灯の制作指南(保姆级)_第28张图片
【单片机】心形流水灯の制作指南(保姆级)_第29张图片

平台是有优惠券的,可以选择优惠券再下单哦!

【单片机】心形流水灯の制作指南(保姆级)_第30张图片

3.焊接

准备好焊接工具:电烙铁、锡丝和铁架台(海绵垫)即可
【单片机】心形流水灯の制作指南(保姆级)_第31张图片
准备好PCB板和元器件:
a、PCB电路板:
【单片机】心形流水灯の制作指南(保姆级)_第32张图片
【单片机】心形流水灯の制作指南(保姆级)_第33张图片

b、元器件:

4.烧录

准备好一个烧录器:
【单片机】心形流水灯の制作指南(保姆级)_第34张图片
用STC-ISP软件把写好得hex文件下载到单片机里面
【单片机】心形流水灯の制作指南(保姆级)_第35张图片

五、成品展示


总结

你可能感兴趣的:(51单片机教程,单片机,嵌入式硬件)