如何建立一个计算器?


15

我是电子领域的新手。我正在尝试从头开始构建一个计算器,这是一个简单的项目,也是我的业余爱好,以使我保持忙碌。

我的目标是建立一个简单的计算器,而不是科学或图形计算器,尽管我不介意仅仅为了踢球而接收到有关如何执行此操作的信息。

为此有一个很好的教程吗?我应该如何开始?


2
有一个包在这里建立一个基本的4函数计算器:spikenzielabs.com/Catalog/...
jwygralak67

Answers:


26

这是一个无需太多电子知识即可构建的计算器示例。它具有全功能,但不包括附加功能。

Yes I'm joking, don't take this too seriously


大声笑。那是什么?我不确定我是否曾经看过电影。很想知道我是否能帮助其中之一。您是否有名称或指向其中之一的链接?
Philoxopher



@KerxPhilo-哈哈哈哈哈哈哈哈哈哈哈...
康纳·沃尔夫,

@markrages,对您的问题表示敬意,非常有趣:)
Philoxopher

18

那不是一个微不足道的项目。有许多教育子项目值得担心。一种是按钮和反跳。另一种是将字符写入显示器。是否要实现此功能的决定是您是否有兴趣从一大堆的nand门中制作出来,还是想采用微控制器或其他处理器并编写软件?您是否有兴趣使用fpga并在RTL中进行所有数学运算?您需要将问题分解为这些组件,并一次工作/学习一个组件,然后将它们组合在一起。例如,如果核心数学引擎实际上是微控制器上的软件,则一项任务将包括在台式计算机上编写一些C函数,您可以将这些C函数输入击键并输出字符,这些字符最终将显示在显示器上。如果您以前从未编程过,那么这是一项艰巨的任务。

作为一个教育项目,我要做的是得到一些msp430 launchapads,每个价格低于5美元,或者STM32价值线发现(基于stm32 / arm的一个而不是另一个),每个价格约12美元。许多人会引导您转向arduino,这也是一个很好的平台,它有其优点和缺点,我不会将其作为我的第一个微控制器。买一个简单的两行液晶面板,以前的大地液晶是一个好地方,也许只是去星火。拿一个微控制器板将其连接到LCD面板,并学习如何在显示屏上放置字符。然后,我将学习如何在微控制器上使用uart,它通常是先发送字节,然后再接收和回显。使用uart接收器接收要放在显示器上的东西,然后使用哑终端(putty,hyperterm,minicom)从计算机中输入内容并确保其正常工作。接下来使用另一个微控制器,使用您的uart进出经验,并在核心数学引擎上工作,首先从计算机中将其输入0-9,+,-,=,然后再乘以除法,然后再浮点(如果您足够勇敢)为此(或拥有适合的库)。数学模块的输出将在输入=时回显输入数字并打印结果,等等。然后找出如何处理按钮,找到按钮数组,以某种方式将其馈入第三个微控制器,进行反跳,然后将其变成从0-9,u,+,-,=中的uart发送到数学微控制器。然后,将所有这些简化为一个微控制器,而无需在中间添加uart的东西。利用您的uart进出经验,并在核心数学引擎上工作,首先从计算机中输入0-9,+,-,=,然后加乘除运算,然后加上浮点运算(如果您对此有足够的勇气)(或合适的库)。数学模块的输出将在输入=时回显输入数字并打印结果,等等。然后找出如何处理按钮,找到按钮数组,以某种方式将其馈入第三个微控制器,进行反跳,然后将其变成将uart从0-9,+,-,=转换为数学微控制器。然后,将所有这些简化为一个微控制器,而无需在中间添加uart的东西。利用您的uart进出经验,并在核心数学引擎上工作,首先从计算机中输入0-9,+,-,=,然后加乘除运算,然后加上浮点运算(如果您对此有足够的勇气)(或合适的库)。数学模块的输出将在输入=时回显输入数字并打印结果,等等。然后找出如何处理按钮,找到按钮数组,以某种方式将其馈入第三个微控制器,进行反跳,然后将其变成将uart从0-9,+,-,=转换为数学微控制器。然后,将所有这些简化为一个微控制器,而无需在中间添加uart的东西。数学模块的输出将在输入=时回显输入数字并打印结果,等等。然后找出如何处理按钮,找到按钮数组,以某种方式将其馈入第三个微控制器,进行反跳,然后将其变成将uart从0-9,+,-,=转换为数学微控制器。然后,将所有这些简化为一个微控制器,而无需在中间添加uart的东西。数学模块的输出将在输入=时回显输入数字并打印结果,等等。然后找出如何处理按钮,找到按钮数组,以某种方式将其馈入第三个微控制器,进行反跳,然后将其变成将uart从0-9,+,-,=转换为数学微控制器。然后,将所有这些简化为一个微控制器,而无需在中间添加uart的东西。

另一种选择是从knjn.com或brevia brevia(够大吗?)或许多其他产品中获得一块rs-232 fpga板,然后使用RTL语言处理每个功能块。它的某些部分将比等效的软件解决方案容易得多,某些部分将比软件解决方案难一些。

如果您可以提供有关您在想什么的更多信息,请使用一盒基于nand门或基于微控制器的解决方案,或者您是否在考虑其他问题?


7

您可以构建的最简单的电子计算器将是四功能二进制计算器。您可以使用输入二进制数的开关来构建它,并且7400系列基本逻辑元素可以处理将要执行加法运算的加法器。您可以使用单个LED来表示输出中的每个二进制数字,也可以使用几个七段显示器以十六进制显示数字。构建一个二进制计算器将使您避免构建十进制到二进制的转换器,并帮助您熟悉数字电子的工作原理。如果您打算以数字电子技术为爱好,则可能需要考虑获得Logisim,这是一个免费程序,可让您在构建电路之前模拟电路。


2
哇。在片上系统时代,您希望他为每位数字连接二十个门以增加?即使是第一个手持式计算器也没有做到这一点。单芯片计算器已经存在了三十年。
罗恩

好吧,您可以将74181用于4位片。如果没有别的,那会更容易。
W5VO 2011年

1
是的,如果他想用软件创建计算器,则可以用一个或两个芯片来完成(使用此示例中的微处理器)。也许使用分立组件构建整个计算器会花费太多时间,但是如果他想进入硬件领域,二进制计算器可能是一个不错的起点。
inventorM

正确理解二进制位数学,这实际上是一个好主意。我和我12岁的女儿做了一个半加法项目,而我们在面包板上没有空间时,她继续在Minecraft中“构建”该项目。她“了解”了门和添加位的概念,这才是重点。
罗恩·J。

值得一提的是,计算器(通常)在内部不以二进制形式进行转换,而是直接在BCD中起作用。一个四位片就足够了一个ALU(实际上这是Intel 4004的原始工作)。
Spehro Pefhany 2014年

6

这是我的方法。

选择组件:

Input Device(在我的情况下是4x4键盘。10个数字键,4个用于运算符,一个用于'=',一个用于'reset / refresh')

Processor(8位AVR)

Output device(16x2 LCD)

Power supply(带有9伏电池的LM7805稳压器)

BreadBoard(开始工作后制作PCB)

我选择在汇编中编程(学习),这是个人选择的问题。我将AVR Studio 4用作IDE,并使用了基于lpt的自制ISP编程器将十六进制闪存写入AVR。

然后我写了LCD和键盘驱动程序。当能够接受输入并产生输出时,开始使用十进制数字和运算符进行解析,然后解析表达式并阅读有关Infix,Postfix和Prefix方法的信息。我完成了组装工作,因此没有“ FLOAT数据类型支持”,最后我实现了自定义数据类型(基于BCD的数据类型用于保持15位十进制精度,但这对RAM来说是巨大的浪费!)。

所有这些都完成了,瞧,..我的计算器已经准备好了(我将其命名为BUB!)。

我的频率为1MHz,能够击败casio_991MS(就小数精度,乘法和除法而言)。

我希望这对其他人有帮助。


5

您可以将开发工具包与板上所有组件一起使用,以使您可以专注于软件。例如,http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858&part =DM240001该套件具有PIC,LCD和少量按钮。有很多标题可以添加其他按钮。一个缺点是LCD更大,那么您可能最初想使用它,但它一定会让您入门。

如果您四处搜寻,也许可以找到较小的(和更便宜的)开始。

使用这样的工具包将使它们的编写变得更加容易,因为它们将是一些示例,并且由于它们都已正确设置,因此消除了硬件问题。另一个缺点是该工具包使用高端图片,这对于计算器项目来说是过分的,但是它确实为您提供了成长和修改它的空间,以便将来执行其他任务。它还将为您提供原理图,以用作将来制作自己的电路板的起点。


5

我的书架上有H. Edward Roberts撰写的“电子计算器”,由Forrest M. Mims III编辑。1974年。

这是相当教育人们如何使用在1974年许多照片打造的计算器是一个大规模生产的MITS计算器的完整生命周期-原型(电线的意大利面条大混乱),PCB设计(铺设红膜上的照片绘图表),单个零件,装配线,波峰焊机和故障排除。

啊,从那以后很多事情都变了。如今的书籍通常都避免显示大的意大利面杂乱的电线。当今的计算器避免将电源电压直接施加到计算器PCB上。

许多事情还是一样。人们在进行原型制作时通常还是会把一大堆意大利面条弄得一团糟。


3

首先,您应该考虑需要的主要组件。您可能需要一个微控制器,一个键盘和一个LCD屏幕。一旦选择了这些组件,它应该与开发固件一样简单。


您可以提供的更多详细信息,请记住,我在建筑电子方面是个新手,我想把这个挑战作为我的第一个挑战。有了上面提供的信息,这是一个很好的开始,但是我不知道我需要什么微控制器。另外,如何开发固件?您是用C编写固件并将其上传到固件,还是必须用ASM编写?
Philoxopher 2011年

您还能提供一个很好的网站,以低廉的价格向业余爱好者出售电子设备吗?感谢您的支持!
Philoxopher 2011年

业余爱好者的两个主要微控制器是PIC和AVR。这两种设备都有C编译器。只要具有足够的输入/输出引脚与键盘和LCD接口的接口,一个简单的微控制器就能为您的项目工作。业余爱好者电子产品的好网站是SparkFun
Ryan

2
@KerxPhilo:是的,大多数嵌入式系统人员都使用C语言编写固件。Ladyada有很好的教程,说明如何用C语言编写固件并将其上传到微控制器,以及有关连接LCD和显示内容的教程
davidcary 2011年

3

我相信这可以是一个很好的初学者学习项目,但它并非易事,而且您将在此过程中需要学习很多,并且要耐心,因为该项目包括许多子项目,需要在学习过程中解决。办法。

您需要决定的第一个设计障碍是您希望在什么技术水平上进行?带有或不带有微控制器(基本上是自给自足的微处理器),带/不带算术单元(ALU)的离散逻辑(例如AND,OR,NOR门和触发器),可编程逻辑(CPLD,FPGA),我还没有其他没有提及或考虑过。首先应该考虑用于计算的技术,输入/输出控制是次要决定(LED七段显示器,LCD面板),主要受美学或成本影响。

有趣的Clive Maxfield撰写的一本非常易读的书,《如何进行数学运算》(ISBN:0471732788),是学习数字计算的一个可能有用的起点。这是在“软”编程或逻辑级别上编写的,您需要了解这些才能真正进行计算。

有人以uWatch(-- micro-Watch)项目为例,互联网上有很多电气工程师(或EE学生)在1970年代建造自己的计算器的参考。关于构建基于FPGA(可编程逻辑器件)的计算器也有一些细节

对于电子学(或数字电子学)的新手,我建议使用micrcontroller作为设计的起点,请查看上述书的网站,以感觉编程的复杂性(如果您有任何编程经验,则不多)为微控制器,然后从那里去。



0

硬件要求

  • 用于用户输入的键盘
  • 用于显示输入和结果的LCD
    在实际的计算器产品,你需要像显示的特殊字符的自定义LCD =-以及M(对于MCMRMS操作)的迹象。定制的LCD设计的成本高达3000美元,但是定制的LCD变得比其他通用LCD更经济。由于您的项目只是出于爱好,因此我建议您使用带有KS0108控制器的通用LCD。
  • 一个非常便宜且没有功能的微控制器
    您将需要一个非常基本的控制器,因为您将执行非常简单的任务。您可以使用便宜的PIC微控制器。

设计步骤

  • 驱动您的LCD
    管理驱动您的LCD。在上面写一些数字。为此编写一个软件界面。
  • 测试您的键盘
    执行与LCD相同的步骤。确保键盘上有软件控制。
  • 编写执行算术运算的算法。
    如果您使用可以相乘和除法的微控制器,则无需自己执行该运算;但是您必须为微控制器支付更多的费用,另一方面,您在项目过程中所学的知识却减少了。

如果要添加更高级的算术功能(例如平方根,正弦/余弦计算等),则需要使用牛顿法泰勒级数展开来实现相关的计算算法。

否则,这将是一个简单的项目。如果您以前没有太多经验,那么您的主要挑战将是驱动LCD和键盘。


根据一个人的抱负水平,可以使用一些移位寄存器和一些离散逻辑,以及一个“ ROM”(可能是EPROM或并行闪存)来构建一个非常粗糙的微控制器。使用20芯片或更少的芯片,可能是一个简单的计算器,尤其是。如果使用相当大的ROM。典型的指令是“在移位寄存器1上输出X,在移位寄存器2上Y,将输出选通脉冲设置为Z,然后从通过将某些寄存器的值连接到常数A所形成的地址中获取下一条指令”。
2013年

不需要任何电路来执行BCD加法-可以在代码中全部处理。如果一个人有两个可单独控制的移位寄存器,则按需要对其进行升序处理,以便将源和目标操作数进行排列,然后根据从每个值中获取的四位值,使用四条指令将CPU置于20种状态之一。接下来的四条指令可以从每个移位寄存器中获取接下来的四位,同时用计算结果的前四位覆盖其中之一。
2013年

我对“自定义LCD”要求有异议。计算器液晶显示器的外观几乎是商品,只有几处变化-打击垫间距,简单与科学(通常意味着8位数与10位数)。在上述给定的选择范围内,即使尺寸或字体略有不同,也会有数十个(即使不是数百个)功能上等效的项目。
克里斯·斯特拉顿

@ChrisStratton:如果想要一个没有警报器的8位数字显示,可以使用满足该描述的现成零件。我认为我没有见过任何在功能上等同于典型计算器的现成显示器。请注意,计算器易于使用斑马线连接,斑马线连接的制造成本比销子便宜,但在DIY项目中更难使用。
2013年

@supercat-廉价计算器中使用的LCD倾向于使用带有热激活胶的色带,而不是斑马线。而且他们可以制造运行之间互换主要是标准的现成的现货产品。
克里斯·斯特拉顿

0

实现计算器的最简单方法可能是使用微控制器。如果您决定走这条路线,第一步将是找到一些代码来实际进行计算。您需要一个接受操作数和运算符并吐出结果的程序。这个用c编写的相对简单的计算器模块应该让您知道什么是必要的。它可以进行加,减,乘,除以及一些按位运算,并且,如果您像科学计算器一样使用反向波兰表示法,则可以解决括号中的子表达式。因此,您将读取按下的按钮,将每个“令牌”收集到缓冲区中,将任何数字转换为实际数字值,然后在获得“ =”按钮时,将令牌列表输入此评估代码,从而减少并解决了表达式产生单个值。


0

对于初学者,这是我为您的项目建议的BOM:

  • 1个Arduino Uno或Leonardo开发板,上面装有所需的微控制器
  • HD44780基于1x 的LCD,就像无所不在的16x2的LCD
  • 1个4x4矩阵键盘

这将允许构建一个基本的计算器。

为了更高级的目的,这是我建议的BOM:

  • 1个Arduino Mega 2560或Arduino Due(在这种情况下程序会很大)
  • ST7920基于1x 的矩阵LCD,同时支持字符和图形
  • 1个用于键盘的Arduino USB主机护罩(仅限Mega 2560,由于具有本机USB主机功能)

这将使您能够构建精美的图形计算器,例如那些TI-83 Plus或TI-nSpire系列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.