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