✌ 作者简介:盐焗小星球_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单片机的萌新,这完全就是保姆级教程啦!下面是这个小项目的大致的设计流程图:
【单片机】心形流水灯の制作指南(保姆级)-编程知识网


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

一、原理图设计

A、模块电路设计

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

1.最小系统

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

2.烧录电路

【单片机】心形流水灯の制作指南(保姆级)-编程知识网

3.LED电路

【单片机】心形流水灯の制作指南(保姆级)-编程知识网
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

4.供电电路

A、常用的DC供电电路
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
B、可自动切换DC供电(时可以给电池充电)和电池供电电的电路
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

5.其他电路

A、红外电路
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
B、蜂鸣器电路
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

B、整体电路设计

方案一:(AD20绘制)

【单片机】心形流水灯の制作指南(保姆级)-编程知识网
PCB的3D效果展示:

心形流水灯PCB展示!

方案二:(立创DEA绘制)

【单片机】心形流水灯の制作指南(保姆级)-编程知识网
PCB的3D效果展示:

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

二、写程序仿真

1.Keil 5 编写程序

a.main.c函数

#include <REGX51.H>
#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<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned charuchar 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 绘制仿真电路

【单片机】心形流水灯の制作指南(保姆级)-编程知识网

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

三、PCB布局

提示:以下虽是AD20画板流程,但用立创EDA画板时同样可以参考绘制流程
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

1.布局、布线和放置Logo

【单片机】心形流水灯の制作指南(保姆级)-编程知识网

2.铺铜和DRC检查

a、顶层
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
b、底层
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

3.生成Gerber文件

生成Gerber文件
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
检查DRC
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
导出到工程文件夹
【单片机】心形流水灯の制作指南(保姆级)-编程知识网【单片机】心形流水灯の制作指南(保姆级)-编程知识网

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

1.打板

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

2.采样

下面是元器件采样清单(仅供参考)
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

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

【单片机】心形流水灯の制作指南(保姆级)-编程知识网

3.焊接

准备好焊接工具:电烙铁、锡丝和铁架台(海绵垫)即可
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
准备好PCB板和元器件:
a、PCB电路板:
【单片机】心形流水灯の制作指南(保姆级)-编程知识网
【单片机】心形流水灯の制作指南(保姆级)-编程知识网

b、元器件:

4.烧录

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

五、成品展示


总结