По какому принципу работает калькулятор. Калькулятор - Устройства на микроконтроллерах - Схемы устройств на микроконтроллерах. Перевод в десятичные дроби
Внешний вид картонного четырёхбитного калькулятора из картона. Хорошо видны полусумматор вверху и три сумматора в средней и нижней части калькулятора
Давным-давно, до изобретения электроники, люди изготавливали механические компьютеры из подручных материалов. Самым известным и сложным примером такой машины является антикитерский механизм - сложнейшее устройство из не менее чем 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
Основные сведения-
Ознакомьтесь с дополнительными функциями. Наиболее важные функции указаны на самих кнопках (например, SIN для синуса), а дополнительные функции - над кнопками (например, SIN-1 для арксинуса или √ для квадратного корня).
- На некоторых калькуляторах есть кнопка «Shift» вместо кнопки «2ND».
- Во многих случаях цвет кнопки «Shift» или «2ND» соответствует цвету текста функции.
-
Всегда закрывайте круглые скобки. Если вы ввели левую скобку, обязательно введите правую (закрывающую) скобку. Если, например, вы ввели пять левых скобок, введите пять правых скобок.
- Это важно при длинных вычислениях с множеством операций - если вы забудете ввести закрывающую скобку, полученный результат будет неверным.
-
Переключайтесь между градусами и радианами. Можно работать со значениями в градусах (от 0 до 360) или радианах (вычисляются с помощью числа Пи). Нажмите «MODE» (Режим), кнопками со стрелками выберите опцию «RADIANS» (Радианы) или «DEGREES» (Градусы), а затем нажмите «ENTER».
- Это важно при выполнении расчетов в тригонометрии. Если полученное значение представляет собой десятичную дробь, а не градусы (или наоборот), переключитесь с радианов на градусы (или обратно).
-
Научитесь сохранять и восстанавливать результаты. Это понадобится при длинных вычислениях. Существует несколько способов использования сохраненной информации:
-
Очистите экран. Чтобы выйти из меню или удалить несколько строк выражения с экрана калькулятора, нажмите «CLEAR» (Очистить) в верхней части клавиатуры.
- Также можно нажать «2ND» или «Shift», а затем нажать любую кнопку с надписью «QUIT» (Выйти). В большинстве случаев такой кнопкой является «MODE» (Режим).
Часть 2
Примеры использования калькулятора-
Извлеките квадратный корень. Например, извлеките квадратный корень из 9. Вам, конечно, известно, что ответом будет число 3, поэтому это хороший способ потренироваться нажимать кнопки в правильном порядке:
- найдите символ квадратного корня (√);
- нажмите кнопку с символом квадратного корня или сначала нажмите кнопку «SHIFT» или «2ND», а затем нажмите кнопку с символом квадратного корня;
- нажмите «9»;
- нажмите «ENTER», чтобы получить ответ.
-
Возведите число в степень. В большинстве случаев это делается так: введите первое число (основание степени), нажмите кнопку с символом «^», а затем введите второе число (показатель степени).
- Например, чтобы вычислить 2 2 , введите 2^2 и нажмите «ENTER».
- Чтобы убедиться, что вы не нарушили порядок ввода обоих чисел, вычислите 2 3 . Если в качестве ответа вы получите 8 , порядок ввода чисел не нарушен. Если на экране отобразилось число 9 , вы вычислили 3 2 .
-
Используйте функции тригонометрии. Когда вы работаете с синусами, косинусами и тангенсами, помните о двух вещах: порядке нажатия на кнопки и радианах/градусах.
- Например, вычислите синус 30°. Он равен 0,5.
- Выясните, нужно ли сначала ввести 30 или сначала нажать кнопку «SIN». Если сначала нужно нажать «SIN», а затем ввести 30 , ответом будет 0,5 ; в этом случае калькулятор работает с градусами. Если ответ равен -0,988 , калькулятор работает с радианами.
Найдите основные функции. На калькуляторе есть несколько функций, которые понадобятся для решения алгебраических, тригонометрических, геометрических и других задач. Найдите на калькуляторе следующие функции:
Операция | Описание операции |
---|---|
+ | Сложение |
- | Вычитание (а не знак «минус») |
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/Х) с плавающей запятой. Вводимые числа могут содержать не более четырех цифр, т.е. максимальное вводимое число по модулю равно |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 .
А также заходите в мой музей, где я собираю советскую цифровую электронику: