基于51的光立方制作

2023-05-16

  单片机入门者必然会从点亮一盏LED灯开始,如果LED数量比较多,就不能使用单个引脚去控制,例如光立方,利用锁存器和人体的视觉暂留效果就可以占用少量引脚实现光立方。

  所需材料:STC89C52一个、12MHz晶振一个、30pF瓷片电容两个、按键开关一个、10K色环电阻一个、10uF电解电容一个、10K九脚排阻一个、74HC573锁存器九个、LED灯512个、洞洞板、焊锡丝、导线。



  电路结构:每一个灯板有64个LED灯,横向共阴,纵向共阳,各灯板同一行的共阴端连接在一起。单片机P0端与9个573的输入端连接在一起,一个573的输出端与8个灯板的同行共阴端对应连接,另外8个573各与每个灯板的共阳端对应连接,一个573的使能端与P1.0连接,另外8个573的使能端与P2对应连接。

  电路分析:先从P0口给控制共阴端的573送入相应数据,再给控制共阳端的573送入相应数据,各个LED的高低电平对应就点亮相应的灯了,用动态扫描的方式就可以出现动态效果。


附上代码:

#include<reg51.h> 

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit line_LATCH=P1^0;//定义锁存使能端口 行扫描的锁存端口
sbit LATCH1=P2^0;//定义锁存使能端口 第一灯板的字节锁存
sbit LATCH2=P2^1;                 
sbit LATCH3=P2^2;
sbit LATCH4=P2^3;
sbit LATCH5=P2^4;
sbit LATCH6=P2^5;
sbit LATCH7=P2^6;
sbit LATCH8=P2^7;
									
void Delay(unsigned int t)
{
	while(--t);
}
unsigned char line[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};// 显示行值01234567	
//显示程序
void display(unsigned char *Data)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DataPort=line[i]; //先给行(灯板的公共端)输入数据
       	        line_LATCH=1;     //打开锁存,把数据line[i]放进去
   		line_LATCH=0;	  //关闭锁存,阻止外部数据进来
	
		DataPort=Data[i];	 //把数组Data[0~7]里的值依次传给第一灯板的573锁存器中
		LATCH1=1;LATCH1=0;
		DataPort=Data[8+i];LATCH2=1;LATCH2=0;	
		DataPort=Data[16+i];LATCH3=1;LATCH3=0;     		
		DataPort=Data[24+i];LATCH4=1;LATCH4=0;
		DataPort=Data[32+i];LATCH5=1;LATCH5=0;     			
		DataPort=Data[40+i];LATCH6=1;LATCH6=0;							
		DataPort=Data[48+i];LATCH7=1;LATCH7=0;     			
		DataPort=Data[56+i];LATCH8=1;LATCH8=0;
		Delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影	       
		DataPort=0xff; // 清空行锁存器里数据,防止出现乱码
       	        line_LATCH=1;line_LATCH=0;
	}				
}
//点亮所有灯
void light()		
{
	unsigned int i;
	for(i=0;i<5000;i++)
	{
		DataPort=0x00;
		line_LATCH=1;line_LATCH=0;	 		
		DataPort=0xff; 	  //把0xff送进锁存器1~8中,使它们的输出引脚都输出高电平,与行锁存器的0x00相对,点亮所有的灯
		LATCH1=1;LATCH1=0;
		LATCH2=1;LATCH2=0;		
		LATCH3=1;LATCH3=0; 		
		LATCH4=1;LATCH4=0;
		LATCH5=1;LATCH5=0;
		LATCH6=1;LATCH6=0;
		LATCH7=1;LATCH7=0;
		LATCH8=1;LATCH8=0;
	}				  
}
//熄灭所有灯
void dark()			
{
	unsigned int i;
	for(i=0;i<5000;i++)
	{
		DataPort=0x00; 
          	line_LATCH=1;line_LATCH=0;	 
		DataPort=0x00; 
		LATCH1=1;LATCH1=0;
		LATCH2=1;LATCH2=0;		
		LATCH3=1;LATCH3=0; 		
		LATCH4=1;LATCH4=0;
		LATCH5=1;LATCH5=0;
		LATCH6=1;LATCH6=0;
		LATCH7=1;LATCH7=0;
		LATCH8=1;LATCH8=0;
	}
}
void fb()		
{
	unsigned char i;
	unsigned char code fb0[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//定义空间为64的数组并赋值,用以传递给显示子程序
					 		   	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							   	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						       	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							   	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					           	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		   	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		   	  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
							  	 };
	unsigned char code fb1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							   	  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
						          0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
							     };		
	unsigned char code fb2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
						          0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
						         };
	unsigned char code fb3[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
						         };	
	unsigned char code fb4[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					  		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					  		      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
					  		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
				        	      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
				                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
							     };	
	unsigned char code fb5[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
				     		      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					  		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
						         };	
	unsigned char code fb6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
							     };	
	unsigned char code fb7[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
					 		      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
							      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
						         };
	for(i=0;i<10;i++)	 display(fb0);//调用显示子程序display,并把数组fb0的数组名作为实参传给指针式形参
	for(i=0;i<10;i++)    display(fb1);
	for(i=0;i<10;i++)    display(fb2);
	for(i=0;i<10;i++)    display(fb3);
	for(i=0;i<10;i++)    display(fb4);
	for(i=0;i<10;i++)    display(fb5);
	for(i=0;i<10;i++)    display(fb6);
	for(i=0;i<10;i++)    display(fb7);
	for(i=0;i<10;i++)    display(fb7);
	for(i=0;i<10;i++)    display(fb6);
	for(i=0;i<10;i++)    display(fb5);
	for(i=0;i<10;i++)    display(fb4);
	for(i=0;i<10;i++)    display(fb3);
	for(i=0;i<10;i++)    display(fb2);
	for(i=0;i<10;i++)    display(fb1);
	for(i=0;i<10;i++)    display(fb0);
}
void main()
{
	unsigned char i;
	while(1)
       {	
		for(i=0;i<2;i++) fb();
		for(i=0;i<20;i++) light();
		for(i=0;i<20;i++) dark();
       }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51的光立方制作 的相关文章

  • USB连接到centos7虚拟机出现错误(VMware USB Arbitration Service无法启动)

    USB连接到centos7虚拟机出现错误 有可能是因为VMware USB Arbitration Service出现无法自启动的问题 windows主机中WIN 43 R打开运行界面 xff0c 输入 接着查看VMware USB Arb
  • Centos7下配置网卡网桥

    简介 xff1a Linux系统下开启虚拟机需要配置网桥 xff0c 从而使得Linux系统里虚拟化软件的虚拟交换机与宿主机的物理网卡绑定一起 虚拟机与宿主机互相独立的IP 物理网卡监听这些IP xff0c 从而达到虚拟机与物理机在同一个局
  • 【玩转cocos2d-x之二十五】数据结构CCArray

    原创作品 xff0c 转载请标明 xff1a http blog csdn net jackystudio article details 16938787 CCArray是从cocos2d中移植过来的 xff0c 类似于Apple的NSM
  • 5、钉钉平台

    文章目录 文章目录 应用管理运行环境应用类型编程模式风神工作台基础应用信息接口权限应用发布 钉钉集成参数设置钉钉接口地址常量 钉钉集成登录钉钉事件回调接口注册通讯录事件回调群会话事件回调签到事件回调审批事件回调 日志管理签到事件回调审批事件
  • CentOS常用防火墙命令

    systemctl启动 停止 查看防火墙状态 systemctl从CentOS7 x开始引入的一个服务管理工具命令 xff0c 集 service和chkconfig的功能于一体 启动防火墙 systemctl start firewall
  • ARDUINO LCD显示简单的汉字、符号(二 已写成的字模和基于Python的检索系统)

    北 61 0x0A 0x0A 0x0A 0x1B 0x0A 0x0A 0x0A 0x1B 京 61 0x04 0x1F 0x0E 0x0A 0x0E 0x15 0x15 0x0C 市 61 0x04 0x1F 0x04 0x1F 0x15
  • MindSpore图像分类训练resnet50实现

    目录 一 mindspore简介 二 训练环境 三 数据集与数据加载 四 模型训练和验证 五 迁移学习 六 模型测试和导出 一 mindspore简介 MindSpore 是华为开源的全场景深度学习框架 xff0c 旨在实现易开发 高效执行
  • 最快的远程控制软件radmin的配置和使用

    Remote Administrator Radmin 是最快的远程控制软件 又因为它不被杀毒软件查杀 从而成为远程控制的首选 nbsp 一 radmin的配置 首先下载并解压Radmin2 1 解压后有七个文件 打开 配置r server
  • 介绍一个成功的 Git 分支模型

    英文原文 xff0c A successful Git branching model xff0c 翻译 xff1a 开源中国 在这篇文章中 xff0c 我提出一个开发模型 我已经将这个开发模型引入到我所有的项目里 xff08 无论在工作还
  • 浪潮服务器通过BMC远程安装系统

    浪潮服务器的BMC xff0c 类似于IBM服务器的IPMI xff0c 可以远程安装系统或者其他操作 前提 xff1a 1 带外ip xff1a 192 168 1 100 在bios的 lan channel 1 里面配置带外ip xf
  • Linux|错误集锦|prometheus Error on ingesting samples that are too old or are too far into the future的解决

    前情回顾 xff1a 二进制prometheus部署完成后 xff0c 在prometheus的web界面进行一些数据验证工作 下面这个是我已经恢复正常的 xff0c 其实是查询不到数据的 grafana也接收不到任何数据 问题排查 xff
  • 《软件工程导论》/ 第一章 软件工程学概述 / 1.3 软件生命周期

    概括地说 xff0c 软件生命周期由3个时期组成 xff0c 每个时期又进一步划分成若干个阶段 xff1a 软件定义 xff08 问题定义 可行性研究 需求分析 xff09 软件开发 xff08 总体设计 详细设计 编码和单元测试 综合测试
  • python开发PC端桌面应用

    项目场景 xff1a 很多情况下需要用很短的时间开发一款在windows上离线运行的小工具 xff0c 以便解决一些现实问题 比如公司近期有个紧急项目 xff0c 需要根据算法需求人工标注海量的地址信息 xff0c 开发周期和工具易用性上都
  • Vue和Flask实现前后端分离

    引言 近期了解了下目前比较热门的前端框架Vue js xff0c 新技能嘛 xff0c 只有实践了用起来了 xff0c 才能有比较直观的体验 因此考虑写个小demo练练手 xff0c 后端采用Flask提供几个Restfull风格的API
  • C/S架构的应用程序开发实战(一)

    项目背景 近期需要开发一个对巨量的图片数据进行车辆品牌信息标注的工具 xff0c 为了提高标注效率 xff0c 准备先通过现有车辆品牌识别的算法模型进行下预标注 xff0c 标注人员在此基础上进行审核和修改即可 另外 xff0c 需要统计出
  • Nginx服务安全漏洞修复

    1 安全漏洞说明 使用Nginx提供服务的产品 xff0c 经过安全扫描工具扫描后报出三个高风险 三个中风险安全漏洞 2 nginx版本过低自带安全漏洞 升级nginx版本到1 21 1后 xff0c 三个高风险漏洞消失 3 HTTP 信息
  • C/S架构的应用程序开发实战(二)

    后端服务 后端用python实现 xff0c 采用flask web框架 可从github上获取flasky源码 xff0c 在此基础上进行业务逻辑的实现 程序结构如下 xff1a app 业务逻辑实现代码 common 公共函数实现 这里
  • MySql安装相关

    windows安装mysql xff1a 1 获取并解压安装包 xff1a mysql 8 0 20 winx64 zip 2 配置环境变量 xff1a 3 管理员权限打开cmd xff0c 进入安装目录 xff1a H gt cd H t
  • MySql之索引

    通常小型项目涉及数据量比较小 xff0c 数据查询频率不高 xff0c 索引通常会被忽略 但当数据量较大 xff0c 涉及多个表 xff0c 查询较为频繁时 xff0c 我们需要对查询性能进行优化 xff0c 此时 xff0c 建立合适的索
  • jupyter-notebook二次开发

    背景 公司内部提供给算法人员用于模型训练的平台开发需求中提出了嵌入Jupyter Notebook模块 xff0c 而Jupyter Notebook是开源的 xff0c 方便后续对部分细节进行功能定制和优化 xff0c 需要对其进行调研

随机推荐

  • python中大数据文件读取

    python中大数据文件读取 python中经常会遇到读取大文件的场景 文件较小时 xff0c 我通常采用下面方法 xff0c readlines xff08 xff09 xff0c 该方法会一次性读取文件的所有行 xff0c 并将其放入l
  • Linux|奇怪的知识|locate命令---文件管理小工具

    前言 Linux的命令是非常多的 xff0c 有一些冷门的命令 xff0c 虽然很少用 xff0c 但可能会有意想不到的功能 xff0c 例如 xff0c 本文将要介绍的locate命令 xff08 平常很少会想到使用此命令 xff0c f
  • python之装饰器

    引言 软件开发中 xff0c 当需要创建高度重复的代码时 xff0c 需要寻求一种优雅的解决方案 python中的元编程即解决这类问题 xff0c 通过创建函数和类来修改 生成或包装已有的代码 装饰器就是python中用来包装函数的一种机制
  • docker容器中程序退出异常,GPU未释放

    1 问题描述 近期在docker容器中对一批数据通过算法进行清洗时 xff0c 当数据处理完成后发现进程未正常退出 xff0c GPU内存未正常释放 span class token punctuation span root 64 ai6
  • 初识Redis

    什么是Redis Remote Dictionary Server xff0c 即远程字典服务 xff0c 是一款开源的 基于内存也支持持久化的key value数据库 xff0c 提供多种语言API 通常应用于需要处理大规模数据读写的场景
  • python之闭包

    前言 闭包作为python高级特性中的一个 xff0c 初学总觉其披着一层神秘的面纱 xff0c 这里我们来一起揭开这层面纱吧 那什么是闭包呢 xff1f 闭包 xff0c 又称闭包函数 xff0c 和普通的嵌套函数类似 xff0c 闭包中
  • 三个基础排序算法

    排序在计算机算法中非常常见也非常基础 xff0c 不管是准备面试还是纯属兴趣 xff0c 掌握它都很有必要 选择排序 基本思想 xff1a 预置list i 为最小 xff0c 逐个比较range i len list 里的元素 xff0c
  • 数据结构之链表

    和顺序表相对应 xff0c 有个链式存储的数据结构 xff0c 命名曰链表 单链表 节点中只存储后项节点指针的链表 xff0c 称为单链表 定义节点 class LinkNode object def init self data 61 N
  • 数据结构之哈希表

    概念 哈希表是一种数据结构 xff0c 通过哈希函数来组织数据 xff0c 以支持快速插入和搜索 哈希表的关键思想是使用哈希函数将键映射到存储桶 更确切地说 xff0c 当我们插入一个新的键时 xff0c 哈希函数将决定该键应该分配到哪个桶
  • 图片数据清洗

    前言 数据对于深度学习算法模型的效果至关重要 通常 xff0c 在对采集到的大量数据进行标注前需要做一些数据清洗工作 对于大量的数据 xff0c 人工进行直接清洗速度会很慢 xff0c 因此开发一些自动化清洗工具对批量数据首先进行自动清洗
  • PyQt5 多线程实例

    前言 PyQt的所有窗口都在UI主线程中 xff0c 也就是main函数中执行了QApplication exec 的线程中 xff0c 在该线程中执行耗时较长的操作时 xff0c 会导致当前窗口停止响应 为了避免上述情况发生 xff0c
  • 模型评价标准

    机器学习 机器学习是通过一些让计算机可以自动学习的算法 xff0c 从数据中分析获得规律 xff0c 然后利用规律对新样本进行预测 评价标准 为了了解模型的泛化能力 xff0c 即判断模型的好坏 xff0c 我们需要用某个指标来衡量 xff
  • postgresql|数据库|【postgresql-12的基于pg_basebackup的主从复制部署】

    前言 xff1a postgresql数据库说实话是真心好用 xff0c 但 xff0c 想用好是比较困难的 那么 xff0c 造成该数据库使用困难的是它的内置工具非常的多 xff0c 并且整体优化是比较难的 比如 xff0c 自带的备份工
  • windows上的中文文件名上传到linux上乱码问题解决

    问题描述 有很多多层文件夹存放的数据保存在windows上 xff0c 文件夹和文件名均含有中文 xff0c 将这些文件目录传到linux上 xff0c 中文名显示乱码 问题分析 windows上中文默认编码格式是gbk xff0c 而li
  • JAVA 面试题经典(附答案)

    JAVA JAVA8大基本数据类型 J AVA8大基本数据类型 HashMap和Hashtable的比较 Hashtable xff1a 1 Hashtable不允许key或者value为null xff0c 线程安全 xff0c 实现线程
  • u盘写入映像时提示:主引导记录(mbr)写入失败!!

    在使用软件写入U盘镜像时 xff0c 出现下面的提示 xff1a 解决方法是使用DiskGenius重新建立MBR
  • debian SID安装笔记

    1 声卡设置问题 添加了声卡驱动 xff0c 但是进入桌面没有声音 xff1f 一般是没有给用户使用设备的权限 解决方法 xff1a adduser audio eg adduser jerry audio xff08 解决 xff09 你
  • ubuntu下vncserver配置

    Ubuntu下设置VNCServer Virtual Network Computing VNC 是进行远程桌面控制的一个软件 客户端的键盘输入和鼠标操作通过网络传输到远程服务器 xff0c 控制服务器的操作 服务器的图形界面通过网络传输会
  • vsftp配置实例-虚拟用户锁定目录

    一 实验步骤 1 创建用户 创建ftpuser1登录用户 useradd g ftp d share soft s sbin nologin ftpuser1 为ftpuser1设置登录密码 passwd ftpuser1 2 编辑配置文件
  • 基于51的光立方制作

    单片机入门者必然会从点亮一盏LED灯开始 xff0c 如果LED数量比较多 xff0c 就不能使用单个引脚去控制 xff0c 例如光立方 xff0c 利用锁存器和人体的视觉暂留效果就可以占用少量引脚实现光立方 所需材料 xff1a STC8