Калькулятор может выполнять следующие математические операции: знаковое сложение и вычитание с плавающей запятой; знаковое умножение и деление с плавающей запятой; знаковое возведение в степень и нахождение обратного числа (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.Источник: picro.narod.ru