電卓院亜紀良,计算器收藏家。欢迎加入【计算器交流群】1005929396 阅读原文 这个问题还正好适合我的答题领域——计算器。因为本人收藏了的非常多的计算器,所以能说自己是几乎重新见证了整个电子计算器的发展史。 先向大家说明一点,这里说的是计算器(Calculator),不是计算机(Computer)。已经步入信息时代的我们,大多数人对于一些不起眼的电子产品都失去了兴趣,认为不值一提。然而,这些产品却曾经在科技发展的历程中书写下浓墨重彩的一笔。人类对于计算的需求从未消失过,但计算的工具却见证了人类科技的发展历程。从我国古代的算盘,到现在的超级计算机,我们要解决的核心问题都离不开计算二字。 一台普通的电子计算器。 我们在路边商店里花几块钱就能买个袖珍电子计算器,我们的手机里面也有各式各样的计算器 APP,我们的电脑上也能从简单的计算器到复杂的大型计算软件都安装个遍,可以说对于今天的人们来说,计算的实现异常轻松,不足为奇。然而有多少人想过,计算器为什么能算呢? 前不久我写过一篇回答,如果深入思考这个问题,那么你就会发现,如此不起眼的事物,竟然也包含着我们现代社会各种科技产品的基本原理和结构,因为计算器在本质上也是属于计算机。 为什么这么说呢? 我们知道计算机包含五个基本组成部分:控制器、运算器、存储器、输入、输出。 计算器也有处理器,即控制器和运算器;计算器要存储运算所需的程序,所以有存储器;计算器有键盘,所以有输入部分;计算器有显示屏(早期有使用打印机代替显示屏的计算器),所以有输出部分。实际上,输入和输出部分是人和计算机(计算器)交互的渠道,大多数计算器把输入(键盘)和输出(显示屏)以及主板上芯片之外的东西都除去之后,剩下的部分就是一个单片机。 所以计算器本质上就是计算机,可能你觉得这个结论很好笑,但却是不折不扣的事实。既然它也算是计算机,那么就不得不从最基本的东西——二进制以及逻辑电路说起。 电子计算器用二进制来表示数,二进制是所有电子产品的逻辑基础。 所谓的二进制,是只用 0 和 1 这两个数码来表示数。我们今天所说的计算器,都是指从 1964 年夏普推出的 CS-10A 开始算起的电子计算器。在此之前有电气式计算器,二进制的两个数码在它的电路中是真正的通和断,然而在电子式计算器中,能实现“通”和“断”这两种状态的电路却很复杂,“通”和“断”两种状态也不一定是电路的导通和断开,更普适一些的说法应该是使用两种电路状态来表示二值逻辑的 0 和 1 这两种逻辑状态。在电子电路中,这两种电路状态用高、低“电平”来表示,一般是输出信号的电压的高、低。 在电子技术中,半导体元器件是最重要的。实现电子电路的高、低电平两种状态,并实现与、或、非、与非、或非、与或非这些逻辑运算,都是利用了半导体元器件在不同电压条件下的工作特性。实现基本逻辑运算和复合逻辑运算的电路称为门电路。门电路可以由半导体二极管组成,也可以由双极型三极管(BJT)组成,还可以由金属 - 氧化物 - 半导体场效应管(MOS 管)组成。目前应用最广泛的是 CMOS 门电路。将大量的门电路集成到一块很小的半导体芯片上,组成大规模集成电路,就能形成非常复杂的功能了。我们拆开计算器时看到的一小块黑色胶装物质,或者是有很多引脚的塑料块,里面就是封装的计算器的集成电路芯片。 我们今天日常用到的手机、电脑等电子产品,里面最核心的部分都是处理器,其内部执行的运算也正是大量的二进制逻辑运算。 电子计算器通过键盘接收输入的信息,键盘是人机交互的输入接口。 有人拆过计算器吗?是否看过键盘底下是什么构造? 似乎都长得差不多,实际上每个按键都是一个简单的开关。 一个计算器有好几十个按键,如果每一个开关都直接引一根线到芯片上,那么芯片的接口可想而知会有很多。而且每次我们只按一个按键,芯片要来判断几十个接口上是哪个接口被导通了,这也是很麻烦的。为了简化设计,节约硬件资源,自然有一种很好的解决办法,那就是矩阵键盘。 矩阵键盘顾名思义就是将键盘排列成矩阵的形式,把键盘上按键的两个引脚分别连接在不同的端口上。我们以像下图这样的 16 个按键的键盘为例,16 个按键只需要 8 条线就能够完成按键的判断。其中 4 条作为列电平输入,另外 4 条作为行电平输出,这样就可以从行列读取被按下的按键。 这里矩阵键盘还是用了 8 条线,如果希望进一步精简,则可以使用编码器,将这线的电平状态进行编码,用多位二进制值来表示按下的按键,最后用更少的线就能完成键盘按键的检测。计算器得到我们按键的编码,就可以进一步地转换成相应的二进制数,然后进行后续的运算了。不过我们输入的也不仅仅是数,也可能是其他的指令,原理也是一样的。 我们每天用到的实体键盘(注意这里说的是实体键盘,不是触摸屏上的那种虚拟键盘),仍然是应用这些原理工作的。 当然我们日常用到的电子产品,能输入信息的不只有键盘。以智能手机为例,它没有实体键盘,很显然,它的触摸屏的触控部分就是输入信息用的,它用于输入触摸的位置、移动、触控点数目等等信息。还有话筒、相机、光线传感器等等,它们分别输入的是声音、图像、光强信息。 计算器依靠人工给定的规则执行运算,逻辑运算规则是所有电子产品的运行准则。 我们先回想一下我们小学的时候是怎么学计算的。以乘法为例,我们到底是如何学会整数、小数、分数的乘法的? 背诵乘法口诀表 → 学习一个因数是一位数的乘法法则 → 学习一个因数是两位数的乘法法则 → 学习小数乘法法则 → 学习分数乘法法则 这些虽然都是我们要“背”的,但我们仔细分析一下,乘法口诀表是死记的,而后面四个都是计算的方法。所以计算器也一样,我们要给它最基本的“口诀”,然后再给它计算的方法,它就可以计算了。 前面我们提到了二进制,两个二进制之间的算术运算,最基本的加、减、乘、除,本质上都是化成若干步加法运算来完成的: 减法——使用补码转化为加法进行运算; 乘法——进行若干次被乘数左移,被乘数与部分积相加 除法——除数右移一位,从被除数或除数中减去除数 逻辑电路中将基本逻辑门进行简单的组合,可以设计出加法器,这里的加法器要考虑低位来的进位,如果进一步考虑运算的速度,加法器的结构就会更加复杂。 所以,加法器就是我们教给计算器的“口诀”,其他的都是教给计算器的“方法”。 四则运算我们实现了,更高级的函数运算怎么办呢?那就是各种数值计算方法大显神通的时候了。 我们从开平方说起。1973 年 CASIO 推出的“ROOT-8”,是卡西欧推出的第一款袖珍式可以开平方的计算器: CASIO ROOT-8 单这一个功能,就让这台计算器的价格高出当时其他计算器不少。但原理却很简单,用了数值计算方法中的牛顿迭代法。例如我们要计算 ,计算器内部就按如下方法进行迭代计算: , 迭代几次之后就达到了显示位数的精度。如果是科学计算器,一些初等函数的计算,就使用的多项式近似计算: 正弦函数: ; 对数函数: 指数函数: 反三角函数:由 ,将 替换为 ,又 ,对级数逐项积分即可。 具体可阅读: 计算器或计算机如何进行比较复杂的数学计算? 上世纪 90 年代出现的带有 CAS 功能(Computer Algebra System,计算机代数系统)的计算器,则又有一套符号计算的算法。这样的算法,不论是数字还是字母,都会被视为符号,因此计算机代数系统的算法都是以高精度整数运算开宗明义。 我们日常接触到的那些电子产品,归根结底,它们内部所有的处理过程都是不同复杂程度的逻辑计算过程。 计算器通过显示屏向人们传递信息,显示屏是人机交互的输出接口。 计算器算完了,要把计算的结果交给人们。我们已经讲了计算器是用二进制的,如果计算的结果也用二进制来表示,那肯定是不能看的。我们或许注意到,我们平时见到的计算器上的数字,都是这种 7 个笔画,再加一个小数点的样子,这种显示器叫七段数码管: 那么让计算器把数字显示在屏幕上的原理是什么呢?答案是显示译码器。它的原理和我们前面提到的编码器相反,计算器将二进制转化为十进制之后,每个数字仍然是用多位二进制数表示的数码(一般为 BCD 码,Binary-Coded Decimal,二进制编码十进制数),然后显示译码器将数码“翻译”成我们能看到的数字;不同的位也用编码表示并进行译码,让数字显示在指定的位置上。 当然,显示器不只有这种形式,最早的电子计算器是用辉光管显示的,那么辉光管里面是充入稀有气体,然后装入了 10 个数码形状的阴极和金属丝网的公共阳极,要显示哪个数字就导通哪个电极。后来有了荧光管显示的,最早的荧光管原理就和我们上面讲的七段数码管一样,但形状不同,后来才演变成我们现在所看到的七段数码管的形状: 再后来出现了更复杂的点阵显示屏,虽然原理更复杂,但本质上仍然是将计算器输出的信号进行“翻译”再表达在屏幕上。 我们日常使用的电子产品,大多数都是通过屏幕来输出信息。瞪大你的眼睛,凑近看屏幕,你会发现一个一个的像素点。这些像素点无非包括三个基本信息:红色亮度、绿色亮度、蓝色亮度,三种颜色不同强弱的亮度组合就能实现各种各样五彩缤纷的颜色。当然了,我们日常使用的电子产品,能够输出信息的不仅仅是屏幕,也不仅仅是输出的视觉信息。例如喇叭就是用来向人们输出声音信息的。 所以,小小的计算器,的确可以说是看起来平平无奇,却又是科技含量满满的事物。 阅读原文