Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Временные диаграммы обмена. Временные диаграммы обмена с контроллером управления графическим ЖК дисплеем приведены на рис. 5.17. Они аналогичны рассмотренным ранее диаграммам обмена с контроллером цифро-буквенного индикатора. Так же, как и в предыдущем случае, мы будем генерировать сигналы управления в соответствие с приведенной временной диаграммой, последовательно переключая линии порта PORTDLC в программе управления дисплеем.

Набор функций управления графическим ЖК дисплеем. Мы предлагаем Вашему вниманию набор функций на Си, которые могут быть использованы в других программах для эффективного управления графическим ЖК дисплеем. Для каждой функции приведено

описание и исходный текст программы на Си. На рис. 5.18 показана структура программного обеспечения для управления графическим дисплеем, в которой отражены полный набор функций управления и их взаимосвязь. В одном из самостоятельных заданий к этой главе мы попросим Вас разработать блок-схемы алгоритмов для реализации каждой из перечисленных функций управления.

Рис. 5.18. Структура программного обеспечения графического ЖК дисплея

//---------------------------------------------------------------------

//filename: 2D_LCD.c содержит программный код для 14 функций управления

//графическим ЖК дисплеем

//---------------------------------------------------------------------

//Схема подключения дисплея AND1391ST к МК 68HC12

// PORTDLC[3] C/D

// PORTDLC[2] CE

// PORTDLC[1] RD

// PORTDLC[0] WR

// PORTP[7…0] D[7…0]

// вывод RESET дисплея AND1391ST через резистор 4,7 кОм к источнику питания

// вывод FS дисплея AND1391ST к общему выводу источника питания

// ------------------------------------------------------------------------

// Функция initialize_lcd производит начальную установку режимов

//графического дисплея

// ------------------------------------------------------------------------

void initialize_lcd(void) {

 char temp = 0x00;

 PORTDLC = 0xFF; //установить 1 на всех выходах порта: запрет всех

//действий с дисплеем

 PORTDLC = PORTDLC & 0xEF; //сброс экрана, RESET=0

 delay(2000); //задержка 2 мс

 PORTDLC = 0x7F; //установить вывод RESET в 1

 write; //установить WR=0

 command(0x80); //установить режим работы текстовый

 data(0x00); //слово управления

 data(0х10); //слово управления

 command(0х40); //установить адрес начала текста

 data(0х10); // слово управления

 data(0x00); // слово управления

 command(0х41); // установить область текста: 16 знаков

 command(0x94); //выключить дисплей, курсор мигает

 command(0хА7); //установить курсор 8x8 точек

 data(0x01); // слово управления

 data(0х01); // слово управления

 command(0х21) ; //установить позицию курсора

}

// ----------------------------------------------------------------------------

//
Функция read конфигурирует линии порта PORTP для ввода данных от контроллера

// дисплея.

// ----------------------------------------------------------------------------

void read {

 DDRP = 0х00; //порт PORTP на ввод

}

// ------------------------------------------------------------------------

// Функция Clearscreen производит очистку экрана дисплея посредством записи

//во все ячейки памяти буфера экрана кода символа " "

// ------------------------------------------------------------------------

void Clearscreen {

 int i,j;

 Reset_cursor;

 // выполнить для каждой строки (i), для каждого знакоместа в строке (j)

 for(i=0; i<16; i++) for(j=0; j<16; j++) LCD_char(' ');

 Reset_cursor;

}

// -------------------------------------------------------------------------

// Функция newline производит запись во все знакоместа одной код символа " "

// -------------------------------------------------------------------------

void newline {

 int i;

 for(i=0; i<16; i++) LCD_char(' ');

}

// ------------------------------------------------------------------------

// Функция LCD_output производит преобразование кодов ASCII строки символов

//в коды табл. рис. 5.15 для отображения на дисплее и передает эту строку в

//ОЗУ буфера экрана дисплея

// ------------------------------------------------------------------------

void LCD_output(char s[]) {

 int n = 0;

 while (s[n] != '\0') {

LCD_char(s[n]);

++n;

 }

}

// --------------------------------------------------------------------

// Функция delay формирует временную задержку длительностью в указанное

//число мкс

// --------------------------------------------------------------------

void delay(int usec) {

 int i,j;

 for(i=0; i<usec; i++) {

for(j=0; j < 7; j++) { }

 }

}

// ------------------------------------------------------------------

// Функция write конфигурирует линии порта PORTP для вывода данных на

Поделиться с друзьями: