|
7-сегментный дисплей и микроконтроллер 8051
Статьи публикуются по мере поступления. Для упорядоченного тематического
поиска воспользуйтесь блоком "Карта сайта"
В этой статье рассказывается о том, как подключить семисегментный светодиодный дисплей к микроконтроллеру 8051. 7-сегментный светодиодный дисплей очень популярен и может отображать цифры от 0 до 9 и довольно много символов, таких как A, b, C,., H, E, e, F, n, o, t, u, y и т. Д. Знание о том, как связать семисегментный дисплей с микроконтроллером, очень важно при проектировании встроенных систем. Семисегментный дисплей состоит из семи светодиодов, расположенных в виде квадратного «8», слегка наклоненного вправо, и одного светодиода в качестве символа точки. Различные символы могут отображаться путем выборочного свечения необходимых светодиодных сегментов. Семь сегментных дисплеев имеют два типа: общий катод и общий анод. В общем катодном типе катод всех светодиодов соединен вместе с одним терминалом, который обычно обозначается как « com », а анод всех светодиодов остается отдельным, поскольку отдельные контакты, обозначенные как a, b, c, d, e, f , g & h (или точка). В обычном анодном типе анод всех светодиодов соединен вместе как один терминал, а катоды остаются отдельными в качестве отдельных контактов. На рисунке ниже показана схема выводов и изображение типичного 7-сегментного светодиодного дисплея.
Цифровой привод.
Цифровальная схема семисегментного светодиодного дисплея представляет собой просто различные логические комбинации его терминалов «от» до «h », чтобы отображать разные цифры и символы. Таблицы с общим числом дисков (от 0 до 9) семисегментного дисплея показаны в таблице ниже.
Электрическая схема, показанная выше, представляет собой счетчик 0-9 с микроконтроллером AT89S51, который имеет 7-сегментный светодиодный дисплей, сопряженный с ним, чтобы отображать счет. Эта простая схема иллюстрирует две вещи. Как настроить простой счетчик 0-9, используя 8051 и, что более важно, как подключить семисегментный светодиодный дисплей до 8051, чтобы отобразить конкретный результат. Общий 7-сегментный дисплей с диагональю катода подключается к порту 1 микроконтроллера (AT89S51), как показано на схеме. R3-R10 являются токоограничивающими резисторами. S3 является переключателем сброса, а R2, C3 формирует схему дебютации. C1, C2 и X1 связаны с тактовой схемой. Программная часть проекта должна выполнять следующие задачи.
Создайте счетчик 0-9 с заданной задержкой (около 1/2 секунды здесь). Преобразуйте текущий счет в цифровую схему диска. Поместите текущий шаблон накопителя цифр в порт для отображения.
Все вышеперечисленные задачи выполняются программой, приведенной ниже.
Программа.
ASM | |
copy code | |
|
|
01 |
ORG000H//initial starting address |
02 |
START:MOVA,#00001001B//initial value of accumulator |
03 |
MOVB,A |
04 |
MOVR0,#0AH//Register R0 initialized as counter which counts from10to0 |
05 |
LABEL:MOVA,B |
06 |
INCA |
07 |
MOVB,A |
08 |
MOVC A,@APC//adds thebyteinA to the program counters address |
09 |
MOVP1,A |
10 |
ACALL DELAY//calls the delay of the timer |
11 |
DECR0//Counter R0 decremented by1 |
12 |
MOVA,R0//R0 moved to accumulator to checkifit is zeroinnext instruction. |
13 |
JZSTART//Checks accumulatorforzeroandjumps to START.Done to checkifcounting has been finished. |
14 |
SJMPLABEL |
15 |
DB3FH//digit drive patternfor0 |
16 |
DB06H//digit drive patternfor1 |
17 |
DB5BH//digit drive patternfor2 |
18 |
DB4FH//digit drive patternfor3 |
19 |
DB66H//digit drive patternfor4 |
20 |
DB6DH//digit drive patternfor5 |
21 |
DB7DH//digit drive patternfor6 |
22 |
DB07H//digit drive patternfor7 |
23 |
DB7FH//digit drive patternfor8 |
24 |
DB6FH//digit drive patternfor9 |
25 |
DELAY:MOVR4,#05H//subroutinefordelay |
26 |
WAIT1:MOVR3,#00H |
27 |
WAIT2:MOVR2,#00H |
28 |
WAIT3:DJNZ R2,WAIT3 |
29 |
DJNZ R3,WAIT2 |
30 |
DJNZ R4,WAIT1 |
31 |
RET |
32 |
END |
О программе.
Инструкция MOVC A, @ A + PC - это инструкция, которая создает требуемую цифровую схему привода для дисплея. Выполнение этой команды добавит значение в аккумуляторе A с содержимым счетчика программ (адрес следующей инструкции) и переместит данные, присутствующие в результирующем адресе, в A. После этого программа возобновится из строки после MOVC A , @ A + PC. В программе начальное значение в A равно 00001001B. Выполнение MOVC A, @ A + PC добавит oooo1001B к контенту на ПК (адрес следующей инструкции). Результатом будет адрес метки DB 3FH (строка 15) и данные, присутствующие в этом адресе, т.е. 3FH (цифровую схему привода для 0) перемещается в аккумулятор. При перемещении этого шаблона в накопитель в порт 1 будет отображаться 0, что является первым счетчиком. При следующем подсчете значение в A будет продвигаться до 00001010, а после выполнения MOVC A, @ + PC, значение в A будет 06H, которое представляет собой шаблон дискретного символа для 1, и на нем будет отображаться 1, который является следующим количеством и этот цикл повторяется для последующих подсчетов. Причина, по которой аккумулятор загружается с 00001001B (9 в десятичной форме), состоит в том, что инструкции от строки 9 до строки 15 потребляют всего 9 байтов. Строки с 15 по 24 в программе, которая начинается с метки DB, могут быть вызваны в качестве таблицы Look Up (LUT) . label DB известен как Define Byte - который определяет байт. В этой таблице определяются шаблоны цифровых дисков для 7-сегментного дисплея в виде байтов (в шестнадцатеричном формате). Оператор MOVC извлекает байт из этой таблицы на основе результата добавления ПК и содержимого в накопитель. Регистр B используется как временное хранилище начального значения аккумулятора и последующие приращения, сделанные для аккумулятора, для выборочного считывания каждого символьного шаблона диска из таблицы поиска (LUT). Примечание. - В строке 6 Аккумулятор увеличивается на 1 каждый раз (каждая итерация цикла), чтобы выбрать следующий рисунок диска. Поскольку оператор MOVC использует значение в A для извлечения шаблона дискретных данных из LUT, значение в ACC должно быть соответственно увеличено / изменено. Образцы цифровых символов последовательно расположены в LUT. Регистр R0 используется в качестве счетчика, который рассчитывается от 10 до 0. Это гарантирует, что цифры от o до 9 будут непрерывно отображаться на 7-сегментном светодиоде. Вы можете отметить строки 4, 11, 12 и 13 в вышеуказанной программе. Строка 4 инициализирует R0 до 10 (OAh). Когда счетчик программ доходит до строки 11 в первый раз, 7-сегментный светодиод уже отобразил 0. Таким образом, мы можем уменьшить один счет, и именно поэтому мы написали DEC Ro. Нам нужно постоянно проверять, достигло ли R0 полного счета (то есть 0). Для этого используются линии 12 и 13. Мы перемещаем R0 в аккумулятор, а затем используем инструкцию Jump if Zero (JZ), чтобы проверить, достиг ли аккумулятор в ноль. Если Acc = 0, то мы заставляем программу перейти к START (начальное состояние), и, следовательно, мы перезапускаем 7-сегментный светодиод для отображения от 0 до 9. Если Acc не равно нулю, мы продолжаем программу для отображения следующей цифры (контрольная строка 14).