По какому принципу работает калькулятор. Калькулятор - Устройства на микроконтроллерах - Схемы устройств на микроконтроллерах. Перевод в десятичные дроби

Внешний вид картонного четырёхбитного калькулятора из картона. Хорошо видны полусумматор вверху и три сумматора в средней и нижней части калькулятора

Давным-давно, до изобретения электроники, люди изготавливали механические компьютеры из подручных материалов. Самым известным и сложным примером такой машины является антикитерский механизм - сложнейшее устройство из не менее чем 30 шестерёнок использовалось для расчёта движения небесных тел и позволяло узнать дату 42 астрономических событий.

В наше время механические компьютеры (калькуляторы) - скорее предмет развлечения гиков и повод устроить забавное шоу. Например, как компьютер из 10 000 костяшек домино , который складывает произвольные четырёхзначные бинарные числа и выдаёт пятизначную двухбитную сумму (математическая теория этого калькулятора и архитектура). Такие перфомансы позволяют детям лучше понять, как работают битовые логические операции в программировании, как устроены логические вентили. Да и вообще сделать маленький компьютер своими руками из подручных материалов очень интересно, тем более если вы делаете это вместе с ребёнком.



Логическая операция AND в компьютере из 10 000 костяшек домино

Для изготовления механического калькулятора отлично подходит конструктор Lego. На YouTube можно найти немало примеров таких калькуляторов .

Калькулятор из компьютера Lego

Вдохновлённый примером компьютера из домино и механических калькуляторов из конструктора Lego, программист C++ под ником lapinozz вместе со своими младшими сестричками решил соорудить в домашних условиях нечто подобное для школьного научного проекта одной из сестёр. Он задумал и реализовал полностью функциональный четырёхбитный калькулятор LOGIC (Logic cardbOard Gates Inpredictable Calculator) . Для изготовления этой вычислительной машины не требуется ничего кроме картона и клея, а работает она не на электричестве, а на шариках и земной гравитации. Калькулятор умеет складывать числа от 0 до 15 с максимальной суммой 30.

В отличие от костяшек доминов и кубиков Lego, в производстве этого калькулятора не использовались никакие фабричные компоненты. Все элементы калькулятора склеены из картона с нуля, что хорошо понятно по фотографиям устройства. В этом смысле данное устройство можно считать уникальным.

Цель проекта

Наглядное представление, как складывать бинарные числа. Обучение школьника навыкам перевода из десятичной в двоичную систему счисления и обратно. Изучение битовых логических операций и основных логических схем.

Внешний вид калькулятора

Как можно рассмотреть на фотографии калькулятора, в верхней части располагается зона для ввода данных. После прохождения всех логических операций шарики показывают результат операции внизу.

Ввод данных осуществляется шариками. Шарик есть - 1, шарика нет - 0. Бит справа - это наименьший бит числа. Перед началом работы некоторые части калькулятора следует привести в исходное положение. После указания исходных значений отодвигается полоска картона, которая удерживает шарики в исходном положении - и начинается процесс сложения.

Например, так выглядит исходное положение шариков для операции 7+5 (0111 + 0101).

Устройство калькулятора

Логические операции картонного калькулятора осуществляется схожим образом, как и в вышеупомянутом компьютере из домино .

Схематически логические вентили для всех логических операций показаны на схеме.

То есть логический вентиль «И» (AND) означает, что при поступлении 0 шариков на входе получается 0 на выходе. При поступлении 1 шарика на входе получается 0 на выходе. При поступлении 2 шариков на входе получается 1 на выходе.

1 на входе, 0 на выходе

2 на входе, 1 на выходе

Логический вентиль XOR сделать немного сложнее. В этом случае если поступает один шарик, он должен пройти. А если поступает два шарика, то они должны аннулировать друг друга, то есть на выходе будет 0. Автор показывает, как это делать, через вертикально висящий кусочек картона с узким горлышком. Если два шарика приходят одновременно, то они блокируют друг друга - и таким образом эффективно реализуют логическую операцию XOR.

Логический вентиль XOR

Чтобы оптимизировать систему и не городить массу логических вентилей AND и XOR, автор реализовал полусумматор - комбинационную логическую схему, имеющую два входа и два выхода. Полусумматор позволяет вычислять сумму A + B, при этом результатом будут два бита S и C, где S - это бит суммы по модулю 2, а C - бит переноса. В нашей картонной конструкции это означает, что если на входе у нас 1 шарик, то он попадает на выход C, а если на входе 2 шарика, то 1 шарик попадает на выход S, а второй никуда не попадает.

Программист придумал довольно простую и эффективную схему для полусумматора. В ней 1 шарик на входе спокойно продолжает свой путь, переворачивая барьер, и проходя в отверстие C. Но если поступают два шарика, то второй шарик уже не может пройти через барьер, перевёрнутый первым шариком - и проваливается в отверстие, прибивая новый путь S. Это и есть полусумматор.

Один шарик на входе полусумматора

Два шарика на входе полусумматора

Наконец, настоящим шедевром является сумматор. Обычно его делают из двух полусумматоров и логического вентиля «ИЛИ», но автор реализовал другую конструкцию, которая фактически является небольшой модификацией полусумматора.

Один шарик на входе - один шарик по пути 1

Два шарика на входе - один шарик по пути 2

Три шарика на входе - один шарик по пути 1, а другой по пути 2

Весь калькулятор целиком состоит из одного полусумматора и трёх сумматоров.

Калькулятор выдаёт корректный результат вычислений в случае, если шарики падают с правильной скоростью, не слишком быстро и не слишком медленно, и не отскакивают друг от друга. Сама логика безупречна, но на практике калькулятор иногда глючит.

Математический-Калькулятор-Онлайн v.1.0

Калькулятор выполняет следующие операции: сложение, вычитание, умножение, деление, работа с десятичными, извлечение корня, возведение в степень, вычисление процентов и др. операции.


Решение:

Как работать с математическим калькулятором

Клавиша Обозначение Пояснение
5 цифры 0-9 Арабские цифры. Ввод натуральных целых чисел, нуля. Для получения отрицательного целого числа необходимо нажать клавишу +/-
. точка (запятая) Разделитель для обозначения десятичной дроби. При отсутствии цифры перед точкой (запятой) калькулятор автоматически подставит ноль перед точкой. Например: .5 - будет записано 0.5
+ знак плюс Сложение чисел (целые, десятичные дроби)
- знак минус Вычитание чисел (целые, десятичные дроби)
÷ знак деления Деление чисел (целые, десятичные дроби)
х знак умножения Умножение чисел (целые, десятичные дроби)
корень Извлечение корня из числа. При повторном нажатие на кнопку "корня" производится вычисление корня из результата. Например: корень из 16 = 4; корень из 4 = 2
x 2 возведение в квадрат Возведение числа в квадрат. При повторном нажатие на кнопку "возведение в квадрат" производится возведение в квадрат результата Например: квадрат 2 = 4; квадрат 4 = 16
1 / x дробь Вывод в десятичные дроби. В числителе 1, в знаменателе вводимое число
% процент Получение процента от числа. Для работы необходимо ввести: число из которого будет высчитываться процент, знак (плюс, минус, делить, умножить), сколько процентов в численном виде, кнопка "%"
( открытая скобка Открытая скобка для задания приоритета вычисления. Обязательно наличие закрытой скобки. Пример: (2+3)*2=10
) закрытая скобка Закрытая скобка для задания приоритета вычисления. Обязательно наличие открытой скобки
± плюс минус Меняет знак на противоположный
= равно Выводит результат решения. Также над калькулятором в поле "Решение" выводится промежуточные вычисления и результат.
удаление символа Удаляет последний символ
С сброс Кнопка сброса. Полностью сбрасывает калькулятор в положение "0"

Алгоритм работы онлайн-калькулятора на примерах

Сложение.

Сложение целых натуральных чисел { 5 + 7 = 12 }

Сложение целых натуральных и отрицательных чисел { 5 + (-2) = 3 }

Сложение десятичных дробных чисел { 0,3 + 5,2 = 5,5 }

Вычитание.

Вычитание целых натуральных чисел { 7 - 5 = 2 }

Вычитание целых натуральных и отрицательных чисел { 5 - (-2) = 7 }

Вычитание десятичных дробных чисел { 6,5 - 1,2 = 4,3 }

Умножение.

Произведение целых натуральных чисел { 3 * 7 = 21 }

Произведение целых натуральных и отрицательных чисел { 5 * (-3) = -15 }

Произведение десятичных дробных чисел { 0,5 * 0,6 = 0,3 }

Деление.

Деление целых натуральных чисел { 27 / 3 = 9 }

Деление целых натуральных и отрицательных чисел { 15 / (-3) = -5 }

Деление десятичных дробных чисел { 6,2 / 2 = 3,1 }

Извлечение корня из числа.

Извлечение корня из целого числа { корень(9) = 3 }

Извлечение корня из десятичных дробей { корень(2,5) = 1,58 }

Извлечение корня из суммы чисел { корень(56 + 25) = 9 }

Извлечение корня из разницы чисел { корень (32 – 7) = 5 }

Возведение числа в квадрат.

Возведение в квадрат целого числа { (3) 2 = 9 }

Возведение в квадрат десятичных дробей { (2,2) 2 = 4,84 }

Перевод в десятичные дроби.

Вычисление процентов от числа

Увеличить на 15% число 230 { 230 + 230 * 0,15 = 264,5 }

Уменьшить на 35% число 510 { 510 – 510 * 0,35 =331,5 }

18% от числа 140 это { 140 * 0,18 = 25,2 }

Из этой статьи вы узнаете, как пользоваться основными функциями научного (инженерного) калькулятора. Научный калькулятор пригодится при изучении алгебры, геометрии и тригонометрии.

Шаги

Часть 1

Основные сведения

    Найдите основные функции. На калькуляторе есть несколько функций, которые понадобятся для решения алгебраических, тригонометрических, геометрических и других задач. Найдите на калькуляторе следующие функции:

    Основные операции
    Операция Описание операции
    + Сложение
    - Вычитание (а не знак «минус»)
    x Умножение (для переменных есть отдельная кнопка x)
    ÷ Деление
    ^ Возведение в степень
    y x «y» в степени «x»
    √ или Sqrt Квадратный корень
    e x Экспонента
    sin Синус
    sin -1 Арксинус
    cos Косинус
    cos -1 Арккосинус
    tan Тангенс
    tan -1 Арктангенс
    ln Натуральный логарифм (с основанием e)
    log Десятичный логарифм (с основанием 10)
    (-) или neg Знак «минус»
    () Скобки (указывают порядок операций)
    π Значение числа Пи
    Mode Переключение между градусами и радианами
  1. Ознакомьтесь с дополнительными функциями. Наиболее важные функции указаны на самих кнопках (например, SIN для синуса), а дополнительные функции - над кнопками (например, SIN-1 для арксинуса или √ для квадратного корня).

    • На некоторых калькуляторах есть кнопка «Shift» вместо кнопки «2ND».
    • Во многих случаях цвет кнопки «Shift» или «2ND» соответствует цвету текста функции.
  2. Всегда закрывайте круглые скобки. Если вы ввели левую скобку, обязательно введите правую (закрывающую) скобку. Если, например, вы ввели пять левых скобок, введите пять правых скобок.

    • Это важно при длинных вычислениях с множеством операций - если вы забудете ввести закрывающую скобку, полученный результат будет неверным.
  3. Переключайтесь между градусами и радианами. Можно работать со значениями в градусах (от 0 до 360) или радианах (вычисляются с помощью числа Пи). Нажмите «MODE» (Режим), кнопками со стрелками выберите опцию «RADIANS» (Радианы) или «DEGREES» (Градусы), а затем нажмите «ENTER».

    • Это важно при выполнении расчетов в тригонометрии. Если полученное значение представляет собой десятичную дробь, а не градусы (или наоборот), переключитесь с радианов на градусы (или обратно).
  4. Научитесь сохранять и восстанавливать результаты. Это понадобится при длинных вычислениях. Существует несколько способов использования сохраненной информации:

  5. Очистите экран. Чтобы выйти из меню или удалить несколько строк выражения с экрана калькулятора, нажмите «CLEAR» (Очистить) в верхней части клавиатуры.

    • Также можно нажать «2ND» или «Shift», а затем нажать любую кнопку с надписью «QUIT» (Выйти). В большинстве случаев такой кнопкой является «MODE» (Режим).

    Часть 2

    Примеры использования калькулятора
    1. Извлеките квадратный корень. Например, извлеките квадратный корень из 9. Вам, конечно, известно, что ответом будет число 3, поэтому это хороший способ потренироваться нажимать кнопки в правильном порядке:

      • найдите символ квадратного корня (√);
      • нажмите кнопку с символом квадратного корня или сначала нажмите кнопку «SHIFT» или «2ND», а затем нажмите кнопку с символом квадратного корня;
      • нажмите «9»;
      • нажмите «ENTER», чтобы получить ответ.
    2. Возведите число в степень. В большинстве случаев это делается так: введите первое число (основание степени), нажмите кнопку с символом «^», а затем введите второе число (показатель степени).

      • Например, чтобы вычислить 2 2 , введите 2^2 и нажмите «ENTER».
      • Чтобы убедиться, что вы не нарушили порядок ввода обоих чисел, вычислите 2 3 . Если в качестве ответа вы получите 8 , порядок ввода чисел не нарушен. Если на экране отобразилось число 9 , вы вычислили 3 2 .
    3. Используйте функции тригонометрии. Когда вы работаете с синусами, косинусами и тангенсами, помните о двух вещах: порядке нажатия на кнопки и радианах/градусах.

      • Например, вычислите синус 30°. Он равен 0,5.
      • Выясните, нужно ли сначала ввести 30 или сначала нажать кнопку «SIN». Если сначала нужно нажать «SIN», а затем ввести 30 , ответом будет 0,5 ; в этом случае калькулятор работает с градусами. Если ответ равен -0,988 , калькулятор работает с радианами.

Калькулятор может выполнять следующие математические операции: знаковое сложение и вычитание с плавающей запятой; знаковое умножение и деление с плавающей запятой; знаковое возведение в степень и нахождение обратного числа (1/Х) с плавающей запятой. Вводимые числа могут содержать не более четырех цифр, т.е. максимальное вводимое число по модулю равно |9999|, а минимальное по модулю равно |0,999|. Максимальный результат по модулю равен |99999999|.
Вводимые числа и результат представлены в следующем формате: REG*10EXP. В регистре REG находится непосредственно шестнадцатеричный код числа с учетом знака. В регистре EXP – показатель степени с учетом знака (-127 Приципиальная электрическая схема


Для индикации используется 10-разрядный жк-индикатор с контроллером HT1611. Питание данного индикатора подается на вторую слева (GND) и на крайнюю правую клеммы (+1,5В). Вывод HK (пятая клемма) следует соединить с общим проводом. Для управления индикатором используется интерфейс SPI, поэтому вход данных индикатора DI (4 клемма) соединен через резистор R6 с выходом данных SPI, а тактовый вход CLK (3 клемма) через резистор R5, с тактовым выходом SPI. Также следует соединить общие провода индикатора и микроконтроллера. Более подробную информацию о данном индикаторе, а также и заказать его, вы можете на сайте фирмы «Телесистемы» - www.telesys.ru.
Клавиатура реализована следующим образом: выводы RB4-RB7 подтянуты к Vdd, т.е. при чтении порта возвращают логическую единицу. Четыре вывода из RA0-RA5 также находятся в высоком состоянии, а один – в низком, причем этот вывод периодически меняется. Если какая-либо из кнопок нажата, то при логическом нуле на соответствующем выводе порта А, ноль будет и на одном из выводов порта В. Таким образом, зная какие из выводов портов А и В в данный момент находятся в низком состоянии, можно определить, какая кнопка нажата.
Блок-схема программы

Рассмотрим алгоритм работы данного устройства. В начале программы подготавливаются все используемые регистры, и выводится ноль на индикацию. Затем, начинается описанное выше, сканирование клавиатуры. После нажатия кнопки, определяется, что было нажато – цифра или команда. При нажатии цифры, следует проверка на переполнение водимого числа (не больше 4-х цифр) и уменьшение его порядка, если до этого была нажата точка. Затем формируются двоично-десятичные коды для преобразования числа в двоичный код, и отдельно – для индикации. После этого вводимое число появляется на индикаторе. Если была нажата математическая команда, то ее код сохраняется в специальном регистре, и формируется двоичный код первого числа, который заносится в регистр первого числа. Затем подготавливаются регистры для ввода второго числа, и микроконтроллер снова переходит к сканированию клавиатуры. При нажатии точки, устанавливается флаг «точка», при наличии которого, происходит декрементирование порядка вводимого числа с каждой новой нажатой цифрой. Если же была нажата команда +/-, то происходит инвертирование знака вводимого числа. При нажатии кнопки «равно», формируется двоичный код второго числа, который заносится в регистр второго числа. Затем считывается код нажатой математической операции, и происходит ее выполнение. После этого результат оптимизируется и выводится на индикатор.

В данном архиве (calc.rar) находятся: calc.hex - файл-прошивка для микроконтроллера; calc.asm - файл программы MpLab с подробнейшими комментариями; bc_bcd.inc, bcd_bc.inc, degree.inc, divf.inc, minf.inc, multf.inc, sumf.inc - файлы с математическими подпрограммами; calc.sch и calc.pcb - соответственно принципиальная схема и печатная плата в формате ACCEL EDA.

Как обычно, слишком мудрит, и я подумал, что будет неплохо, если вкратце опишу принцип его работы.

Существует огромное количество всевозможных моделей калькуляторов. Есть простые, есть сложные. С питанием от солнечных батарей или от сети. Есть обычные, программируемые, бухгалтерские, специализированные модели. Порой, и не найдешь той грани, которая отделяет калькулятор от компьютера.

Я буду описывать работу самой простой модели калькулятора.

Это калькулятор CASIO HS-8LU. Они примерно все работают одинаково. По большому счету, в простых моделях ничего не меняется уже лет тридцать.

Калькулятор состоит из корпуса, клавиатуры с резиновыми кнопками и платы.

В данной модели плата сделана в виде пленки с нанесенными на нее проводниками. Питание - от солнечной батареи. Над солнечной батареей расположен жидкокристаллический индикатор.
На задней крышке корпуса расположены токопроводящие контакты. При нажатии на кнопку она прижимает пленку к задней крышке и происходит электрический контакт. Часто токопроводящий контакт наносят на обратную сторону кнопки. В том случае сама кнопка прижимается к плате для создания контакта.

С обратной стороны под солнечной батареей расположен чип микропроцессора. Он управляет работой калькулятора.

Как работает индикатор на жидких кристаллах.

Микропроцессор калькулятора принципом работы очень мало отличается от обычного персонального компьютера с процессором, памятью, клавиатурой и видеокартой.
Если быстро посмотреть на фото кристаллов, то можно примерно поделить на три области: область постоянного запоминающего устройства (ПЗУ) с программной ("прошивкой"), область оперативного запоминающего устройства (ОЗУ), где хранятся регистры памяти калькулятора, и остальные цепи процессора, которые включают арифметическо-логическое устройство (АЛУ), драйвер индикатора, драйвер клавиатуры, преобразователи напряжения и другие вспомогательные цепи.

Это структурная схема процессора калькулятора МК-62.
В верхней части мы видим, что есть блоки:
- генератор опорной частоты (ГОЧ), который задает частоту, с которой регенерируется изображение на индикаторе;
- схема удвоения напряжения, умножающая напряжение солнечное батареи на два, чтобы хватило для индикатора;
- генератор, формирователь импульсов общих электродов и регистр-формирователь сегментного кода постоянно выводят заданные для вывода сегменты на индикатор. Там есть специальный регистр памяти, куда микропроцессор записывает информацию, какие надо отображать сегменты, а какие не надо. После этого процессор не отвлекается на отображение, и эти блоки выводят все сами;
- ОЗУ с регистрами данных и ПЗУ с прошивкой;
- и узел с процессором, состоящим из АЛУ с обвязкой. Счетчик адреса АЛУ выбирает очередное слово программы из ПЗУ. Разрядность этого слова может быть разной в разных калькуляторах. Отдельные биты в слове определяют работу АЛУ: например, сложить два 4-х битных числа из регистров, или считать из ОЗУ цифру, или сравнить два числа, или сдвинуть на один разряд и т. д.

Как работает микропроцессор.

Сначала срабатывает сброс по питанию. При подаче электричества специальный узел заставляет программу работать с начального адреса. Команда за командой извлекается из ПЗУ и исполняется. Вначале происходит обнуление регистров, формирование числа "0.", сброс всяких признаков переполнения, операций и прочее. После сброса программа ожидает события от клавиатуры (нажатие кнопки).
Когда нажата кнопка, то процессор через некоторое время еще раз опрашивает клавиатуру, чтобы подавить дребезг кнопок (когда из-за плохого контакта может произойти одновременно несколько нажатий).
А дальше, в зависимости от предыдущих состояний, он по программе определяет, что с этим нажатием делать. Например, если идет ввод числа и введена цифра, то продолжить ввод. Если нажата кнопка операции, то выполнить операцию.
Сам алгоритм и логика выполнения операций целиком лежит на ПЗУ и программистах, которые писали прошивки.
Что интересно, все простые операции выполняются так, как их учат в школе.
- сложение и вычитание. В столбик. Выравниваются порядки двух введенных чисел и происходит сложение или вычитание.
- умножение и деление. Так же в столбик. Разряд за разрядом. Сначала последовательным сложением умножают на младшую цифру множителя, затем вторую и так далее до старшей. Деление - последовательным вычитанием.
После выполнения операции отдельная подпрограмма нормализует результат: отбрасывает незначащие нули и сдвигает его вправо.
Если в калькуляторе есть тригонометрические функции, то они также выполняются, как их запрограммировал программист. Есть разные способы вычисления элементарных функций: разложение в ряд Тейлора или по методу "Cordic".

Вот примерно так работает калькулятор.

Я вам дам ссылку на несколько сайтов. В одном вы можете еще прочитать про то, как они работают: http://datamath.org/Story/Intel.htm#The .

А еще две ссылки - очень познавательный интерактивный сайт, где обратным реверсом считали прошивку и сделали симулятор. Там можно "прогнать" работу процессора реального калькулятора.
http://files.righto.com/calculator/TI_calculator_simulator.html и
http://files.righto.com/calculator/sinclair_scientific_simulator.html .

А также заходите в мой музей, где я собираю советскую цифровую электронику: