在引入正文之前,我们暂且不说模拟、数字电路单片机之前的区别,先来通过模拟电路实现一则简单的数学计算器。
用电路进行数学计算
通过电路进行数学计算,应该怎么做呢?为了便于理解,下面我举个很简单的例子。
在这个电路中,电阻R1=R2,我给A、B两点分别接入3V和5V电压,这个时候,C点的电压则为(5+3)/2=4V。这个电路完成了一个求平均值的操作,如果我们用1V表示数字1,它计算出来3和5的平均值是4;如果我们定义1mV表示数字1,这个电路就计算出了3000和5000的平均值是4000。
如果我能通过巧妙的方法,利用电阻电容乃至晶体管等元器件的特性,设计出很多类似这样的电路,它就可以完成很复杂的四则运算,以及平方、开方、对数等运算。这就是通过电路来帮助我们进行数学计算的简单例子。在这个例子中,并不见得能体现到电路计算相比于我们用笔纸计算的优势。但是如果我们把电路做的足够复杂,它的计算速度是相当快的,并且只要有电能供应,它就永远不知疲倦的计算,而且不容易出错。
上面我们设计了一个简单的模拟电路计算器,它能计算两个数的平均值,我们用电压值直接表示数字。但是这个电路在实际中工作并没有那么理想。做基本电学实验测量电压的时候,大家会发现,电压的测量总是有误差的,电压表有误差,读数也有误差,并且基本上无法避免。自然界中很多东西都是有误差的。在这里除了电压表测出来的值和实际值不同,实际C点电压值也并不完全等于AB电压值的平均,因为我们很难保证R1和R2阻值完全一致,并且导线也有电阻。于是我们计算出来的结果,更可能是3.99或者4.01而不是精确的4.00,这就导致我们的计算出了误差。如果电路复杂了,误差会逐步累积,越来越大,最后导致计算结果完全没有意义,而减小电路的误差也是相当不容易的。
模拟电路与数字电路、十进制与二进制
于是数字电路诞生了。相较于模拟电路的不精确,数字电路就有很大优势了。注意,数字电路是相对于模拟电路而言的,数字电路的本质也是模拟电路。通常我们所说的模拟电路,指的是除数字电路以外的电路。
我们人类用十进制计数法表示数字,原因是我们有十个手指。而数字电路中使用二进制数字来进行运算,因为很多电子器件往往会有两种很确定的状态,比如开关的“开”和“关”,灯的“亮”和“灭”。
二进制数其实比十进制数简单多了。十进制中,从0到9,满10就向高位进位,即9+1=10;而二进制满二进一,所以二进制中1+1=10。一开始我们会感觉这样很别扭,实际上并非二进制有多难,只是我们习惯了十进制而已。二进制与十进制的转换等更多知识可以自行学习。
数字电路中,我们使用的比较多的一种用电压表示二进制数字的方式,称为TTL电平(TTL = Transistor-Transistor Logic,原意为逻辑门电路)。它规定+5V电压为高电平,表示数字“1”,0V电压为低电平,表示数字“0”。由于电路自身特点,实际上这种TTL电平电路输出的电压,并非绝对准确的5V和0V,而是规定将>2.4V的电压视为高电平, 电压<0.4V则视为低电平。也正是因为这样的特点,我们根本不需要将电压控制的很准确,就能很准确的表示出我们想要表示的数字。和前面的模拟平均数计算电路相比,明显很有优势。而这也正是数字电路得以广泛应用的根本原因。
传统数字电路和单片机
数字电路的介绍就到此为止,在原理篇中会有更详细的介绍。事实上,单片机的本质也是数字电路。下面我们要说的传统数字电路,指的是除单片机这类可编程器件以外的数字电路。下面我们来看看单片机和传统数字电路的区别。
利用一些常用的传统数字电路器件(一般都是集成电路芯片),我们可以设计出如下图的电路。它是一个电子表,有六个数码管显示时间,图中正显示的就是00:00:18。可以看出来这个电路还是挺复杂的,设计起来也是很费时间的。
但是单片机的出现,使得实现相同功能的电路设计难度大大降低。下图就是使用单片机设计的电路。同样是电子表,不仅显示效果比前面的那个要好,而且功能更强大了,两个按键可以像市面上常见的两个按键的手表一样调整时间和日期;而电路却简单了很多。我们只需要给单片机写进去特定的程序,就可以让它按照我们设计好的方式工作。
如果某天,我们想要给这个电子表增加马表计时的功能,对于前面的那个数字电路,恐怕整个电路都得重新设计制作;但是对于单片机制作的这个电路,我们只需要修改程序代码,然后重新写进去就可以了,就像在电脑上安装软件一样,根本不需要修改电路,十分方便。
传统数字电路和单片机的关系就像非智能手机和智能手机的关系一样,智能手机最大的优势在于它可以安装各种软件游戏,而非智能手机就没有这么强大的功能。单片机也是如此,同样的电路,你可以给它下载各种程序,让它按照你的想法去工作。对于单片机来说,硬件电路是单片机的躯体,而程序才是它的灵魂,而写程序的你,就是它的上帝。