✌ 作者简介:盐焗小星球_wyb,一名电子信息大学生.
📑 个人主页:盐焗小星球_wyb的主页👀
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
🔥 如果感觉博主的文章还不错的话,还请不吝 关注、点赞、收藏三连哦!
💬人生格言:天行健,君子以自强不息!
文章目录
前言
提示:这里是本文的前言内容:
希望这条博客能帮助到一些刚入门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 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 绘制仿真电路
【单片机】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文件下载到单片机里面