Современная электроника №2/2022

ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 53 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2022 ница). Для приёма команд/данных в микросхеме LM044L используются линии D0…D7. Управляющий сигнал с линии РС4 порта РС поступает на вывод RS микросхемы LM044L и подаётся про- граммно. Вывод PC7 микроконтролле- ра подключён к выводу Е микросхемы LM044L и используется для подачи так- товых импульсов. После запуска симуляции схемы программа инициализации микро- контроллера выводит на линию PC4 логический ноль, который поступа- ет на вывод RS микросхемы LM044L, в результате чего шина D0…D7 пере- ходит в режим приёма следующих команд: включение дисплея, установ- ка 8-разрядной шины, очистка дисплея и установка курсора в нулевую пози- цию. Далее программа инициализа- ции микроконтроллера выводит на линию PC4 логическую единицу, что переводит шину D0…D7 микросхе- мы LM044L в режим приёма данных, запись которых выполняется побайт- но в цикле. При этом на вывод Е непре- рывно подаётся тактовый сигнал, по заднему фронту которого микросхе- ма LM044L считывает информацию (команды/данные). Таким образом, на экран дисплея посимвольно выво- дится строка, двоичные коды символов которой были поданы на шину D0…D7. Программа вывода строки «Proteus» на экран дисплея, работающего в 4-раз- рядном режиме: #include <io.h> // подключение заголовочных файлов #include <mega16.h> // в которых содержатся #include <stdio.h> // прототипы функций #include <delay.h> #include <stdlib.h> void e ( ) { // функция формиро- вания тактового сигнала на линии Е дисплея PORTC |= 1<<7; //устанавливаем 1 на выводе PC7 микроконтроллера delay_ms(40); //задержка 40 мс PORTC &=~ (1<<7); //устанавлива- ем 0 на выводе PC7 микроконтроллера delay_ms(40); } void main() { DDRD=DDRC=0xff; // инициализа- ция портов PORTD=0x00; // порт PD работает на вывод данных PORTC=0x00; // порт PC работает на вывод данных e ( ); PORTC &=~ (1<<4); // RS=0 (приём команд) e ( ); PORTD=0b00100000; // уста- новка 4-разрядной шины // команда включения дисплея 00001111 e ( ); PORTD=0b00000000; //стар- ший полубайт 0000 кода 00001111 e ( ); PORTD=0b11110000; //млад- ший полубайт 1111 кода 00001111 //команда очистки дисплея и уста- новки курсора в нулевую позицию 00000001 e ( ); PORTD=0b00000000; //стар- ший полубайт 0000 кода 00000001 e ( ); PORTD=0b00010000; //млад- ший полубайт 0001 кода 00000001 while(1) { e ( ); PORTC |= 1<<4; //RS=1 (при- ём данных) //запись двоичного кода символа P (01010000) в DDRAM память //для его отображения на дисплее PORTD=0b01010000; //старший полу- байт 0101 кода 01010000 e ( ); PORTD=0b00000000; //млад- ший полубайт 0000 кода 01010000 //запись двоичного кода символа r 01110010 e ( ); PORTD=0b01110000; //стар- ший полубайт 0111 кода 01110010 e ( ); PORTD=0b00100000; //млад- ший полубайт 0010 кода 01110010 //запись двоичного кода символа o 01101111 e ( ); PORTD=0b01100000; //стар- ший полубайт 0110 кода 01101111 e ( ); PORTD=0b11110000; //млад- ший полубайт 1111 кода 01101111 //запись двоичного кода символа t 01110100 e ( ); PORTD=0b01110000; //стар- ший полубайт 0111 кода 01110100 e ( ); PORTD=0b01000000; //млад- ший полубайт 0100 кода 01110100 //запись двоичного кода символа e 01100101 e ( ); PORTD=0b01100000; //стар- ший полубайт 0110 кода 01100101 e ( ); PORTD=0b01010000; //млад- ший полубайт 0101 кода 01100101 //запись двоичного кода символа u 01110101 Рис. 12. Результат работы схемы управления буквенно-цифровым дисплеем: (а) в 8-разрядном режиме, (б) в 4-разрядном режиме и диаграммы сигналов, присутствующих на выводах микроконтроллера а б

RkJQdWJsaXNoZXIy MTQ4NjUy