STC 51单片机62——极简 4x4x4光立方

news/2025/2/11 21:56:12/

本次设计一个非常简洁的光立方,省略了限流电阻,用两节1.5V干电池直接驱动。

主控芯片:STC8H1K28,属于STC中比较新的系列单片机,管脚够用,也没有很多的空余。

电源直接使用带开关的电池盒,内含2节1.5v干电池。将电池盒的引线焊接到PCB上的电源孔,增加两个滤波电容:

程序下载电路,按照datasheet设计,需要加二极管和限流电阻:

核心部分是电路板上的4x4的共阴极LED矩阵:

 

然后是每层LED的公共极,连接一个三极管:

完整原理图:

并绘制出PCB:

焊接的时候,由于不喜欢LED躺着的光立方,所以设计一个模具,能够让LED直立:

把模具排开,做成二维图,用于激光切割亚克力板:

 

 

代码就先写了个框架,凑合试试:

#include "STC8H.h"

#include "usart.h"

#define u8 unsigned char

#define u16 unsigned int

sbit Ceng1=P3^7; //公共极图层1

sbit Ceng2=P3^6; //公共极图层2

sbit Ceng3=P3^5; //公共极图层3

sbit Ceng4=P3^4; //公共极图层4

u8 Tu1[8]={0x0f,0x00,0x0f,0x00,0x0f,0x00,0x0f,0x00};//一帧图像

u8 Tu2[8]={0xf0,0x00,0xf0,0x00,0xf0,0x00,0xf0,0x00};//一帧图像

u8 Tu3[8]={0x00,0x0f,0x00,0x0f,0x00,0x0f,0x00,0x0f};//一帧图像

u8 Tu4[8]={0x00,0xf0,0x00,0xf0,0x00,0xf0,0x00,0xf0};//一帧图像

void Mydelay(u8 t)

{

  unsigned char i,j,k;

    for(i=0;i<t;i++)

        for(j=0;j<20;j++)

            for(k=0;k<250;k++)

                ;

}

void IOInit()//IO初始化

{

    P0M0 = 0x00;

    P0M1 = 0x00;

    P1M0 = 0xff;

    P1M1 = 0x00;

    P2M0 = 0xff;

    P2M1 = 0x00;

    P3M0 = 0x00;

    P3M1 = 0x00;

    P4M0 = 0x00;

    P4M1 = 0x00;

    P5M0 = 0x00;

    P5M1 = 0x00;

}   

void XuanCeng(u8 CengN) //选择哪层亮

{

  switch (CengN){

      case 1: P3=0x10; break;

        case 2: P3=0x20; break;

      case 3: P3=0x40; break;

        case 4: P3=0x80; break;   

      default: P3=0x00;

    }

    Mydelay(1); //调整延时,控制显示速度

}                   

void YiZhen(u8 Table[])//显示一帧图像

{

    P1=Table[0];

    P2=Table[1];

  XuanCeng(1);

    P1=Table[2];

    P2=Table[3];

  XuanCeng(2);

    P1=Table[4];

    P2=Table[5];

  XuanCeng(3);

    P1=Table[6];

    P2=Table[7];

  XuanCeng(4);

}

void Donghua()//动画,由多个图像帧组成

{

    u8 i;

    for(i=0;i<10;i++)

    YiZhen(Tu1);

    for(i=0;i<10;i++)

    YiZhen(Tu2);   

    for(i=0;i<10;i++)

    YiZhen(Tu3);

    for(i=0;i<10;i++)

    YiZhen(Tu4);

}

void main()//主函数

{

  unsigned int n;

    n=0;

    IOInit();

    UartInitP();//串口初始化,用于调试

    //Mydelay();

    Ceng1=0;

    Ceng2=0;   

    Ceng3=0;   

    Ceng4=0;   

   

    P1=0x01;

    P2=0x01;

    while(1){

    Donghua();

    }

}


http://www.ppmy.cn/news/1571253.html

相关文章

shell解决xml文本中筛选的问题

shell解决xml文本中筛选的问题&#xff0c;将xml文件中多余的配置删除掉&#xff0c;达到符合单一配置的结果。 过于简单就不废话了。 #!/bin/bashconf_file$1 flag0 temp_file"__temp.xml"if [ -f "${temp_file}" ];thenrm "${temp_file}" fi …

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知 1. 获取通知权限2.编写通知工具类3. 进行任务栏消息通知 1. 获取通知权限 在 AndroidManifest.xml 里加上权限配置&#xff0c;如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…

半导体制造工艺讲解

目录 一、半导体制造工艺的概述 二、单晶硅片的制造 1.单晶硅的制造 2.晶棒的切割、研磨 3.晶棒的切片、倒角和打磨 4.晶圆的检测和清洗 三、晶圆制造 1.氧化与涂胶 2.光刻与显影 3.刻蚀与脱胶 4.掺杂与退火 5.薄膜沉积、金属化和晶圆减薄 6.MOSFET在晶圆表面的形…

海云安开发者智能助手(D10)全面接入DeepSeek,赋能开发者安全高效编码新范式

海云安正式宣布完成与DeepSeek&#xff08;深度求索&#xff09;的深度技术融合&#xff0c;旗下核心产品D10开发者智能助手全面接入DeepSeek R1模型。此次合作标志着海云安在"AI驱动开发安全"领域实现重要突破。数据显示&#xff0c;通过DeepSeek R1模型的优化与蒸馏…

Java怎么记录网络安全情报 java转网络安全

实验内容 掌握Socket程序的编写&#xff1b;掌握密码技术的使用&#xff1b;设计安全传输系统。 实验要求 要求一 结对实现中缀表达式转后缀表达式的功能 MyBC.java结对实现从上面功能中获取的表达式中实现后缀表达式求值的功能,调用MyDC.java 要求二 基于Java Socket实现…

Gitee AI上线:开启免费DeepSeek模型新时代

Gitee Al上线&#xff0c;并宣布开启免费DeepSeek模型的时代&#xff0c;这是一个非常值得关注的消息&#xff0c;因 为它标志着国内在AI领域的一个重要发展。DeepSeek模型是由阿里巴巴达摩院开发的&#xff0c;旨 在提供强大的自然语言处理(NLP)能力。下面是一些关于这一事件…

ES6具体有什么

在 ES6&#xff08;ECMAScript 2015&#xff09; 中&#xff0c;引入了许多新的特性和改进&#xff0c;旨在提升 JavaScript 的可读性和功能性。以下是一些重要的 ES6 特性&#xff0c;特别是你可能会在日常开发中使用到的&#xff1a; 1. let 和 const let&#xff1a;用于声…

ARM64 Linux 内核学习指南:从基础到实践

前言 ARM64 作为当今主流的处理器架构&#xff0c;被广泛应用于移动设备、嵌入式系统和服务器领域。学习 ARM64 在 Linux 内核中的实现&#xff0c;不仅有助于深入理解操作系统底层机制&#xff0c;还能提升在内核开发、驱动编写、虚拟化等领域的专业能力。 本指南面向对 Lin…