我是电子新手。我正在尝试从头开始构建一个计算器作为一个简单的项目和业余爱好来让我忙碌。
我的目标是构建一个简单的计算器,而不是科学或图形计算器,尽管我也不介意接收有关如何做到这一点的信息,只是为了好玩。
有没有一个很好的教程?我应该如何开始?
我是电子新手。我正在尝试从头开始构建一个计算器作为一个简单的项目和业余爱好来让我忙碌。
我的目标是构建一个简单的计算器,而不是科学或图形计算器,尽管我也不介意接收有关如何做到这一点的信息,只是为了好玩。
有没有一个很好的教程?我应该如何开始?
这是一个计算器示例,您无需太多电子知识即可构建。它功能齐全,但不包括附加功能。
这不是一个微不足道的项目。有许多教育子项目需要担心。一是按钮和去抖动。另一个是将字符写入显示器。您决定如何实现这一点您是有兴趣从一大盒与非门中制作它还是想要使用微控制器或其他处理器并编写软件?您是否有兴趣使用 fpga 并在 RTL 中进行所有数学运算?您需要将问题分解为这些组件,一次工作/学习一个组件,然后将它们组合在一起。例如,如果核心数学引擎实际上是微控制器上的软件,那么一项任务将包括在您的台式计算机上编写一些 C 函数,您可以输入击键并输出最终将显示的字符。如果您以前从未编程过,这是一项不平凡的任务。
作为一个教育项目,我会做一些 msp430 启动板,每个不到 5 美元,或者每个 12 美元左右的 STM32 价值线发现(基于 stm32/arm 的一个而不是另一个)。许多人会引导您使用 arduino,这也是一个很好的平台,它有其优点和缺点,我不会将它作为我的第一个微控制器。买一个简单的两线液晶面板,地球液晶曾经是个好地方,也许只是去sparkfun。将一块微控制器板连接到液晶面板,并学习如何在显示屏上放置字符。然后,我将学习如何在微控制器上使用 uart,它通常从输出字节开始,然后是接收和回显。使用 uart 接收器接收要放在显示器上的东西,然后使用哑终端(putty、hyperterm、minicom)从计算机输入内容并确保其正常工作。接下来拿另一个微控制器,使用您的 uart 输入和输出经验并在核心数学引擎上工作,从您的计算机首先输入 0 - 9、+、-、=,然后添加乘法和除法,然后如果你足够勇敢的话,再添加浮点数为此(或有一个适合的库)。数学模块的输出将回显输入数字并在发送 = 时打印结果等。然后找出如何处理按钮,找到一组按钮,以某种方式将它们输入第三个微控制器,去抖动,然后将其变成uart out of 0 - 9, + , - , = 到数学微控制器。然后,将所有这些减少到一个微控制器中,中间没有 uart 的东西。使用您的 uart 输入和输出经验并在核心数学引擎上工作,首先从您的计算机输入 0 - 9、+、-、= 然后添加乘法和除法,然后如果您有足够的勇气(或者有一个适合的图书馆)。数学模块的输出将回显输入数字并在发送 = 时打印结果等。然后找出如何处理按钮,找到一组按钮,以某种方式将它们输入第三个微控制器,去抖动,然后将其变成uart out of 0 - 9, + , - , = 到数学微控制器。然后,将所有这些减少到一个微控制器中,中间没有 uart 的东西。使用您的 uart 输入和输出经验并在核心数学引擎上工作,首先从您的计算机输入 0 - 9、+、-、= 然后添加乘法和除法,然后如果您有足够的勇气(或者有一个适合的图书馆)。数学模块的输出将回显输入数字并在发送 = 时打印结果等。然后找出如何处理按钮,找到一组按钮,以某种方式将它们输入第三个微控制器,去抖动,然后将其变成uart out of 0 - 9, + , - , = 到数学微控制器。然后,将所有这些减少到一个微控制器中,中间没有 uart 的东西。数学模块的输出将回显输入数字并在发送 = 时打印结果等。然后找出如何处理按钮,找到一组按钮,以某种方式将它们输入第三个微控制器,去抖动,然后将其变成uart out of 0 - 9, + , - , = 到数学微控制器。然后,将所有这些减少到一个微控制器中,中间没有 uart 的东西。数学模块的输出将回显输入数字并在发送 = 时打印结果等。然后找出如何处理按钮,找到一组按钮,以某种方式将它们输入第三个微控制器,去抖动,然后将其变成uart out of 0 - 9, + , - , = 到数学微控制器。然后,将所有这些减少到一个微控制器中,中间没有 uart 的东西。
另一种选择是从 knjn.com 或 lattice brevia(足够大吗?)或其他一些 rs-232 fpga 板中获取一个,然后使用 RTL 语言处理每个功能块。它的某些部分将比等效的软件解决方案容易得多,某些部分将比软件解决方案更难一些。
如果您可以提供有关您的想法的更多信息,一盒基于 nand 门或微控制器的解决方案,还是您在考虑其他事情?
这是我的做法。
选择组件:
Input Device
(在我的例子中是 4x4 键盘。10 个数字键,4 个运算符,一个用于“=”,一个用于“重置/刷新”)
Processor
(8位AVR)
Output device
(16x2 液晶显示器)
Power supply
(LM7805稳压器,9伏电池)
BreadBoard
(开始工作后制作PCB)
我选择在汇编中编程(学习),个人选择。我使用 AVR Studio 4 作为 IDE 和一个自制的基于 lpt 的“ISP”程序员,用于将十六进制闪存到 AVR。
然后我为 LCD 和键盘编写了驱动程序。当能够接受输入并产生输出时,开始解析十进制数字和运算符,然后我解析表达式并阅读有关Infix、Postfix 和 Prefix方法的信息。我在汇编中完成了我的工作,因此没有“FLOAT 数据类型支持”,我最终实现了我的自定义数据类型(基于 BCD 的数据类型,用于保持 15 位十进制精度,但这对 RAM 来说是一个巨大的浪费!)。
所有这些都完成了,瞧……我的计算器准备好了(我把它命名为 BUB!)。
我的运行 @ 1MHz 并且能够击败 casio_991MS(在十进制精度和乘法和除法方面)。
我希望这对其他人有帮助。