Современная электроника №1/2020
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 77 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2020 ку светодиодов в столбце можно выпол- нять по одному последовательно. Тогда в программе инициализации микро- контроллера вместо одной команды POPTC=0b01111000, с помощью кото- рой подаются управляющие сигналы (логические нули) на катоды матрич- ного индикатора, нужно записать четыре команды POPTC=0b01111111, POPTC=0b11111110,POPTC=0b11111101, POPTC=0b11111011 и, соответственно, четыре раза выдержать паузу длитель- ностью в 1 мс – команда delay_ms (1) . Вывод символов на матричном индикаторе разрешением 8 × 8 В качестве примера рассмотрим вывод на экранмикросхемы точечного инди- катора разрешением 8 × 8 цифры5. Дво- ичный код данного символа представ- лен в таблице 1. Точки, которые нужно зажечь на матричноминдикаторе, обо- значены в таблице нулями, точки, кото- рые не используются – единицами. Формирование изображения на инди- каторе выполним при помощи програм- мы, написанной на языке С с включени- ем с помощьюдиректив #asm и #endasm ассемблерного кода, что позволит использовать регистрыR0–R31 микро- контроллера. При этом к регистру дан- ных порта PD можно обращаться по адресу ввода/вывода 0х12, а к регистру данных порта PС – по адресу 0х15. Текст программы представлен в листинге 1. Введём текст программы в окне кода CodeVisionAVR и с помощью команды основного меню Project → Build All запу- стим компиляцию, по окончании кото- ройвыдаётся отчёт оналичииошибок в коде программы. Еслиошибкине обнару- жены, на диске компьютера будет создан hex-файл для записивмикроконтроллер. Теперь перейдём в Proteus и в окне свойств микросхемы ATmega16 (окно открывают двойным щелчком левой кнопки мыши по выбранному на схе- ме микроконтроллеру) в поле Program File укажем путь к файлу прошивки на диске компьютера (см. рис. 6). С помо- щью команды основного меню Debug → Run Simulation запустим в Proteus моде- лирование собранной схемы (резуль- тат представлен на рисунке 7) и про- анализируем её работу. Программным путём были даны ука- заниямикроконтроллеру через порт PD отправить на нижние выводы микро- схемы точечного индикатора двоич- Таблица 1. Двоичный код символа «5» 1 1 0 0 0 0 0 1 1 2 1 0 0 1 1 1 1 1 3 1 0 0 0 0 0 1 1 4 1 0 0 1 1 0 0 1 5 1 1 1 1 1 0 0 1 6 1 1 1 1 1 0 0 1 7 1 0 0 1 1 0 0 1 8 1 1 0 0 0 0 1 1 В.в.м. Н.в.м. 1 2 3 4 5 6 7 8 Примечание: В.в.м. – верхние выводы матрицы светодио- дов; Н.в.м. – нижние выводы матрицы светодиодов. Листинг 1 #include <mega16.h> // подключение заголовочных файлов #include <delay.h> void main(void) { PORTD=PORTC=0x00; // инициализация портов DDRD=0xff; // порт PD работает на вывод данных DDRC=0xff; // порт PC работает на вывод данных #asm ldi R19, 20 ; // запись в регистр R19 числа 20 Loop: ; // начало цикла вывода рисунка на экран дисплея clr R18 ; // очистка регистра R18 clr R17 ; // очистка регистра R17 ldi R18, 0b00000010 out 0x12, R18 ; // активизация второго столбца точечной матрицы ldi R17, 0b10110000 out 0x15, R17 ; // вывод первого столбца символа «5» rcall pause ; // вызов подпрограммы задержки clr R18 ; // очистка регистра R18 clr R17 ; // очистка регистра R17 ldi R18, 0b00000100 out 0x12, R18 ; // активизация 3-го столбца точечной матрицы ldi R17, 0b00110000 out 0x15, R17 ; // вывод второго столбца символа «5» rcall pause ; // вызов подпрограммы задержки clr R18 ; // очистка регистра R18 clr R17 ; // очистка регистра R17 ldi R18, 0b00011000 out 0x12, R18 ; // активизация 4-го и 5-го столбцов точечной матрицы ldi R17, 0b01111010 out 0x15, R17 ; // вывод 3-го и 4-го столбцов символа «5» rcall pause ; // вызов подпрограммы задержки clr R18 ; // очистка регистра R18 clr R17 ; // очистка регистра R17 ldi R18, 0b00100000 out 0x12, R18 ; // активизация 6-го столбца точечной матрицы ldi R17, 0b00000010 out 0x15, R17 ; // вывод 5-го столбца символа «5» rcall pause ; // вызов подпрограммы задержки clr R18 ; // очистка регистра R18 clr R17 ; // очистка регистра R17 ldi R18, 0b01000000 out 0x12, R18 ; // активизация 7-го столбца точечной матрицы ldi R17, 0b10000111 out 0x15, R17 ; // вывод 6-го столбца символа «5» rcall pause ; // вызов подпрограммы задержки rjmp Loop ; // бесконечный цикл pause: ; // подпрограмма задержки subi R19,1 ; // вычесть 1 из значения регистра R19 brne pause ; // перейти на начало подпрограммы, если значение реги- стра R19 не равно 1 ldi R19, 20 ; // если значение регистра R19 равно 1, записать в ре- гистр число 20 ret ; // выход из подпрограммы #endasm } Рис. 6. Окно настроек микроконтроллера ATmega16
RkJQdWJsaXNoZXIy MTQ4NjUy