添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Steam游戏:深圳IO

近期,接触到深圳IO这个游戏,在学习深度学习网络的主线任务中开启了汇编语言的支线任务,发现学习下汇编语言还是挺有趣的,而且还挺锻炼编程思维。
在这里插入图片描述
身为一个完全没学过嵌入式系统或者汇编语言的小白,目前已经“玩”了 38h,玩到了 精确食品称 这一关,记录一些理解。

讽刺的是,这个“Shenzhen IO”游戏并不能在国服玩,要注册海外账号才行。

精确食品称功能需求

在这里插入图片描述
和我们日常使用的电子秤别无二致,这个秤有“开机”,“关机”,“净重”(去皮)这三个功能。

这个设计实现的思路很简单,左边的芯片用来判断目前电子秤的状态,在按下“按钮”后,应该开机(dat置1),还是关机(dat置0),还是纪录皮重,并把目前重量清零(dat置3)。
这个设计确实可以满足需求,但是看下结果,在全球玩家中属于吊车尾的段位。
在这里插入图片描述
而看到产品成本最佳是¥5,那毫无疑问:
这个电子秤是可以用一个MC6000实现的!

代码的优化思路

在学习高级语言的时候,往往会应用 把多条简单的逻辑组合起来,做很复杂的功能 的逻辑,也就是说,有的时候打代码,都可以“不带脑子”,只要按条件,简单粗暴地全部敲完就完事了。
但是这种做法,在汇编这种“低级”语言,往往行不通,主要因为: 芯片限制了代码行数,而且汇编语言在嵌套逻辑中的能力,比较高级语言确实非常难用。

起码在深圳IO这个游戏中是这样的,涉及到嵌套逻辑,真的是非常头疼,而高级语言直接多写几层if就行了

所以在用汇编的时候,必须要“带脑子”,在写程序之前就要想好代码如何能做的精简且聪明。而我个人总结的最重要的方法就是:进行 条件合并 ,找到关键条件。

代码优化方法

如果只使用一块MC6000芯片,那可以操作的acc必须用来做净重,dat用为记录皮重(输入为毛重)

本设计任务的核心重点&难点就在于如何区分“开机”,“关机”,“置零(去皮)”这三个功能。

①开机条件

  • 按钮=100
  • 重量(毛重)=0
  • 皮重=999(开机前的状态必定时关机,关机状态定义为净重=-999)

②关机条件

  • 按钮=100
  • 重量(毛重)=0
  • 皮重=0

③置零条件

  • 按钮=100
  • 重量(毛重)>0
  • 皮重=0(目前皮重还是0,在下一个状态,皮重会等于此时的毛重)

下面开始整理合并,首先,三个功能可以合并成两个, 开机和置零本质上是一个状态(开机皮重为0)
接下来,只要从以上条件中,找到 最简洁的能区分关机和置零状态的充分条件 就行了。
那就是:
①置零条件

  • 重量≠皮重

②关机条件

  • 重量=皮重

找到这个条件,就可以构建新的设计了。

在这里插入图片描述
运行结果,world best design!
在这里插入图片描述

For the best SHENZHEN I/O experience, we highly recommend printing this manual and assembling a binder that you can refer to as you play. To assemble the binder, simply follow these instruct io ns: • Get a 0.5-inch 3-ring binder (such as this one) and a set of 5-part tabbed dividers (such as this one). • Print this PDF, ensuring that the “Fit to page” opt io n is unchecked. • Place the Cover Sheet in the front of the binder. • Fold or cut the Reference Card into quarters. • Place the three Story Documents (two emails and one visa applicat io n form) in the inside front pocket. 深圳 精敏工业级别20点I/O工控板JMDM-12D IO 8A IO rar,一、简介 JMDM-12D IO 8A IO 深圳 市精敏数字机器有限公司自主研发的一款具有8路光电隔离数字量输入和4路模拟量输入,4路继电器输出和4路模拟量输出,高可靠稳定性的工业单片机串口控制器,也叫20点单片机I/O工控板。二、功能特性 1、工作电源:DC12V~24V 1A或AC9V~18V 1A;控制板自带防雷击保护电路,稳定可靠。 2、8位高性能单片机控制:程序存储空间:32K;数据存储空间:16K (若有特定需要),保存数据,断电数据不丢失。3、一种通信接口:一路RS232接口,可用来下载程序和与电脑等上位机通信。4、I/O: 1) 8路光电隔离数字量输入:输入电压范围为直流12V~24V;也可定制为5V(购买前需特别说明),输入电流为5~10MA;可用于检测外部各种信号的传感器输入,如光电传感器、红外传感器、霍尔传感器、接近开关、点动开关等数字量输入器件等; 2) 4路继电器输出:可以有效防止该产品上电时瞬间产生误动作,稳定可靠。继电器的触点可承受的交流电压为125V~277V,最大输出电流为10A~12A。 3)4路模拟量输入:外接4路模拟量电压信号,采集电压范围是0~10V,采集精度可达到18位; 4)4路模拟量输出:可外接4路模拟量控制装置(如比例阀等),电压输出精度可达到12位; 5、程序下载说明:连接好电脑和控制器之间的串口通讯线。使用STC-ISP下载软件将编译好的HEX文件下载到控制器。(注意:下载的过程中有一个手动断电和上电的过程)。 6、系统稳定性:具有工业级防雷击、抗强电磁干扰、高可靠性能,无死机现象。7、2种工作方式:支持独立控制(根据KEIL C 语言 编写的程序逻辑自动控制)、RS232串口监控(需编写上位机、下位机程序);8、数字量工作状态指示灯:每路数字量输入或输出都有一个指示灯,方便观察输入或输出点工作状态。9、带有2位拨码开关,以便进行地址或其它功能的模式选择。10、外形尺寸: 线路板尺寸:长×宽×高: 122mm×86mm×23mm。 外壳尺寸: 长×宽×高: 145mm×90mm×40mm。 安装尺寸: 长×宽: 135mm×70mm。三、编程说明 在KEIL C编程环境下,本公司提供编程范例,客户可在此基础上二次 开发 应用程序。1.控制单个继电器输出点:sbit OUT1 = P2^4; 第一个继电器输出端口定义;sbit OUT2 = P2^5; 第二个继电器输出端口定义;sbit OUT3 = P2^6; 第三个继电器输出端口定义;sbit OUT4 = P2^7; 第四个继电器输出端口定义; OUT3 =0; 打开第三个继电器; OUT3 =1; 关闭第三个继电器;2.读输入点命令:sbit IN1 = P0^0; 第一个输入点定义;sbit IN2 = P0^1; 第二个输入点定义;sbit IN3 = P0^2; 第三个输入点定义;sbit IN4 = P0^3; 第四个输入点定义;sbit IN5 = P0^4; 第五个输入点定义;sbit IN6 = P0^5; 第六个输入点定义;sbit IN7 = P0^6; 第七个输入点定义;sbit IN8 = P0^7; 第八个输入点定义; if((IN3 ==0)&& (IN3 ==0)) 判断第三个输入点有没有信号输入;3.读拨码开关命令:sbit SW1 = P1^2; //拨码开关1sbit SW2 = P1^1; //拨码开关2 目录数据手册接口简单 I/OXBus简单 I/O 对比 XBus 语言 参考程序结构注释标签条件语句寄存器accdatp0、p1、x0、x1、x2、x3null 伪寄存器指令操作数基本指令算法指令 以下介绍摘自未来软件园        《 深圳 IO (SHENZHEN I/O)》是由硬核编程游戏 开发 商Zachtronics打造一款玩法新颖的模拟+解谜游戏。游戏中玩家需要利用手头的芯片,按照要求条件输出信号,制成一些电器元件产品。由于游 默认情况html代码下载到WebView后,webkit开始解析网页各个节点,发现有外部样式文件或者外部脚本文件时,会异步发起网络请求下载文件,但如果在这之前也有解析到image节点,那势必也会发起网络请求下载相应的图片。在网络情况较差的情况下,过多的网络请求就会造成带宽紧张,影响到css或js文件加载完成的时间,造成页面空白loading过久。解决的 其实一开始我也没完全 理解 这个 语言 的写法,后来才 理解 各种判断的实现。先写一段类似java的程序:if (a>b){mov 0 p1;if (c>d){mov 100 p0;}else{mov 0 p0;}}else{mov 100 p1;}mov 50 p3;这段程序在 深圳 IO 中的 汇编语言 是这样实现:tgt a b- mov 100 p1- jmp end+ mov 0 p1+ tgt ... 左边的是信号发生器,这题只用到了rx接口,这个接口是XBUS数据类型的,只能用x0,x1,x2,x3这种XBUS接口才能接。 右边的蜂鸣器buzzer并不是通电就能响,需要反复输出时钟才能让它响起来。 XBUS总线数据从-999到999,接通XBUS需要等待数据的到来 slx x0 #等待x0数据,程序一直卡着 Simple IO 引脚数据从0到100 RX输入不是时钟,连的是信号发生器 buzzer是simple io 类型的引脚,连接一个(假的)蜂鸣器 当数据包从信 一、 IO 的定义 IO 即IN“”和“OUT”的组合, IO 流用来处理设备之间的数据传输,Java程序中,对于数据的输入/输出操作 都是以“流”的方式进行的。java. io 包下提供了各种“流”类的接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。 比如我们常用的System.out.print()就是 io 的应用 二、 IO 汇总 按照流的方向(输出输入都是站在程序所在内存的角度划分的): 输入... http://storage.it168.com/a2011/0323/1169/000001169755_all.shtml#0-baidu-1-41052-29471509e6ee672a61f105bf71aa61aa 【IT168 应用】作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能 IO 性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花 输入输出指令。外部设备通过I/O端口与处理器交换信息。输入指令IN将外设数据传送至CPU,而输出指令则将CPU数据传送至外设。8086中,只有这组指令能够实现与外设的信息交换,并且只能利用AL/AX寄存器与I/O端口通信。 1、输入指令ININ   AL,i8          ;字节输入:AL←I/O端口 i8IN   Ax,i8          ;字输出: AL←I/O端口 i8,A