当前位置: 首页 > news >正文

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

本次设计一个非常简洁的光立方,省略了限流电阻,用两节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();

    }

}

相关文章:

  • 排序之选择排序(C# C++)
  • 蓝桥杯-洛谷刷题-day5(C++)(为未完成)
  • COMDEL电源CDX1000 13.56MHz 2MHz DUAL RF GENERATOR手侧
  • 天地图(uniapp)搜索、定位自己、获取标记点的经纬度
  • 数据结构 day06
  • 【Qt 比较常用的字符串处理函数】查找、比较、转换、截取、替换、插入、删除、格式化、分割、比较排序
  • VSCode Error Lens插件介绍(代码静态检查与提示工具)(vscode插件)
  • 前端实现在PDF上添加标注(1)
  • D365(Dynamics 365 CE/PO)审计记录(Audit)一点点分析
  • linux下c++连接mysql
  • 数据结构:哈夫曼树
  • 【SpringBoot实现全局API限频】 最佳实践
  • Ceph集群搭建2025(squid版)
  • 【机器学习】线性回归与一元线性回归
  • Oracle日常管理(8)——DB日常管理(1)
  • Python(二十)实现各大跨境船公司物流查询新增[ARKAS Line]船司
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-plotting.py
  • 【ESP32接入国产大模型之Deepseek】
  • 2.5 模块化迁移策略:从传统项目到模块化系统
  • 算法——结合实例了解启发式搜索
  • 自己有了域名 怎么做网站/企业seo顾问服务
  • 娄底建设网站公司/今日热点新闻素材
  • 电商网站建设教程/地推公司
  • 自己电脑做网站服务器违法吗/外链群发平台
  • 做网站代理怎么样/口碑营销成功案例有哪些
  • 做国外网站做什么内容/百度指数快刷软件