Методические указания по выполнению работы
Для отображения цифровой и простейшей символьной информации в микропроцессорных системах очень часто используются светодиодные сборки, называемые семисегментными индикаторами. Как следует из его названия, индикатор состоит из семи сегментов, ориентированных таким образом, что подсветка различных комбинаций сегментов позволяет формировать алфавитно-цифровые символы. Каждый сегмент подсвечивается своей цепочкой светодиодов с возможностью индивидуального включения сегмента. Поскольку в первую очередь индикатор предназначен для отображения цифр, то в его состав включена также десятичная точка. Внешний вид и схема включения светодиодов всех сегментов индикатора показаны на рис. 3.3.
Рис. 3.3. Семисегментный индикатор |
В лабораторном стенде используется набор из пяти семисегментных индикаторов, позволяющий выводить пятиразрядные числа. Каждый разряд такого числа последовательно, один за другим, выводится с помощью одного порта МК на соответствующий индикатор.
Однако для вывода числа на индикатор необходимо подавать на него не код числа, а код его отображения на индикаторе. Например, для вывода числа 3 необходимо подать высокий уровень сигнала на входы a, b, c, d и g.
В случае, когда сегменты индикатора a ÷ g подключены к разрядам используемого порта МК 0 ÷ 7 соответственно, то все коды отображения чисел на индикаторе можно представить в виде, сведенном в табл. 3.2. Последние строки в таблице необходимо заполнить самостоятельно.
Таблица 3.2.
№ ножки | Код отображения | ||||||||
Сегмент | h | g | f | e | d | c | b | a | |
Цифра «0» | 0x3F | ||||||||
Цифра «1» | 0x06 | ||||||||
Цифра «2» | 0x5B | ||||||||
Цифра «3» | 0x4F | ||||||||
Цифра «4» | 0x66 | ||||||||
Цифра «5» | 0x6D | ||||||||
Цифра «6» | 0x7D | ||||||||
Цифра «7» | ? | ? | ? | ? | ? | ? | ? | ? | ? |
Цифра «8» | ? | ? | ? | ? | ? | ? | ? | ? | ? |
Цифра «9» | ? | ? | ? | ? | ? | ? | ? | ? | ? |
Для организации процесса последовательного вывода разрядов отображаемого числа и управления им используются специальные микросхемы − восьмиразрядные регистры-защелки 74HC573. Функция такой микросхемы состоит в том, что при подаче на вход LE (Latch Enable) управляющего сигнала высокого уровня в ее внутренний регистр записывается комбинация восьми входных сигналов D0…D7, затем, после подачи на LE сигнала низкого уровня, входные линии отключаются и введенная комбинация сохраняется (защелкивается) во внутреннем регистре. При подаче на второй управляющий вход OE (Output Enable) сигнала низкого уровня, эта предварительно запомненная комбинация входных сигналов выводится на выходные линии микросхемы-защелки Q0…Q7. В схеме лабораторного стенда ножка OE заземлена, то есть всегда имеет низкий уровень, и, следовательно, управление производится только уровнем сигнала на выводе LE.
Схема подключения индикаторов к МК с использованием регистров-защелок показана на рис. 3.4.
Рис. 3.4. Схема включения семисегментных индикаторов |
В стенде используются семисегментные индикаторы, в каждом сегменте которых расположена цепочка из нескольких последовательно соединенных светодиодов, вследствие чего для зажигания сегмента требуется ток в несколько десятков миллиампер, недопустимый для выходных линий регистра-защелки. Поэтому в схеме предусмотрено включение между регистром-защелкой и индикатором силового драйвера – микросхемы ULN2003, предназначенной для подключения устройств с сильноточной нагрузкой. В данном случае драйвер является инвертирующим – при подаче на его вход логической единицы на выходе формируется логический ноль. Графически инверсия иллюстрируется наличием небольшого кружка на выходной линии драйвера.
Как видно из схемы, входные линии всех защелок подключены к линиям параллельного порта PORTC, через который выводится код отображаемого символа. Входы LE регистров-защелок 1…5 подсоединены к линиям PA1…PA5 порта PORTA соответственно. Такое включение индикаторов позволяет последовательно выводить через порт PORTC код символа отображаемого разряда десятичного числа, затем стробом 0-1-0, подаваемым в одну из линий порта PA1…PA5 запоминать этот код в соответствующем отображаемому разряду регистре-защелке. После окончания процедуры заполнения регистров-защелок для всех пяти индикаторов на каждом из них будет отображен символ, код которого был ранее сохранен в его защелке.
Из логики работы используемой схемы включения следует, что вывод на индикатор с пятью десятичными разрядами любого целого числа производится поразрядно и для выполнения этой операции необходимо предварительно выделить значение цифры в каждом разряде выводимого числа.
Вычислить значения цифр в разрядах пятиразрядного десятичного числа поможет следующая функция, которую можно без изменений использовать в разрабатываемых программах.
unsigned char Digit (unsigned int d, unsigned char m){
//[]-----------------------------------------------------[]
//| Назначение: выделение цифр из разрядов пятиразрядного |
//| десятичного положительного числа |
//| Входные параметры: |
//| d - целое десятичное положительное число |
//| m - номер разряда (от 1 до 5, слева направо) |
//| Функция возвращает значение цифры в разряде m числа d |
//[]-----------------------------------------------------[]
unsigned char i = 5, a;
while(i){ // цикл по разрядам числа
a = d%10; // выделяем очередной разряд
if(i-- == m) break; // выделен заданный разряд - уходим
d /= 10; // уменьшаем число в 10 раз
}
Return(a);
}
Примеры использования функции:
Unsigned char k;
unsigned int f = 7236;
k = Digit(f,5); // функция возвращает k = 6
k = Digit(f,2); // функция возвращает k = 7
k = Digit(f,1); // функция возвращает k = 0
Поскольку двоичный код отображаемой цифры не совпадает с ее байтом индикации, то в программе должна осуществляться перекодировка в соответствии с таб. 3.2, ставящей в соответствие двоичный код индицируемой цифры своему байту индикации, который и выдается в выходной порт для отображения цифры на индикаторе.
С учетом сказанного, для формирования цифр, отображаемых на пятиразрядном семисегментном индикаторе стенда, нужно выполнить для k = 1 ÷ 5 следующую последовательность действий:
1. с помощью функции Digit получить цифру k-го десятичного разряда выводимого числа;
2. по информации, представленной в таб. 2.2, сформировать код отображения полученной цифры;
3. вывести код отображения в порт PORTC;
4. защелкнуть код отображения в регистре-защелке k, для чего подать сигнал LE = 1, записав 1 в разряд k порта PORTA, сделать паузу 1 мкс и подать 0 для выдачи сигнала LE = 0;
5. если k = 5, то закончить, иначе – перейти к п. 1.
Варианты заданий
Рассчитать и с паузой в 1 сек вывести последовательно на индикатор 20 членов числовой последовательности, сформированной по формуле арифметической прогрессии
x(i+1) = x(i) + d
для вариантов заданий, представленных в табл. 3.3.
Таблица 3.3
№ варианта | x(0) | d | № варианта | x(0) | d |
Лабораторная работа № 2
Цель работы. Программирование процедур вывода информации на светодиодную матрицу с использованием параллельного порта.
Перед выполнением работы установите тумблеры конфигурации стенда в состояние, показанное на рис. 3.5.