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

2022-12-15  

前言

希望这条博客能帮助到一些刚入门51单片机的萌新,这完全就是保姆级教程啦!

下面是这个小项目的大致的设计流程图:


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

一、原理图设计

A、模块电路设计

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

1.最小系统

提示:如果对最小系统不熟悉或者还不是很了解的,可以点击这里: 最小系统

2.烧录电路


3.LED电路



4.供电电路

A、常用的DC供电电路

B、可自动切换DC供电(时可以给电池充电)和电池供电电的电路


5.其他电路

A、红外电路

B、蜂鸣器电路


B、整体电路设计

方案一:(AD20绘制)


PCB的3D效果展示:

方案二:(立创DEA绘制)


PCB的3D效果展示:

二、写程序仿真

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 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 绘制仿真电路


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。