Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
Временные диаграммы обмена. Временные диаграммы обмена с контроллером управления графическим ЖК дисплеем приведены на рис. 5.17. Они аналогичны рассмотренным ранее диаграммам обмена с контроллером цифро-буквенного индикатора. Так же, как и в предыдущем случае, мы будем генерировать сигналы управления в соответствие с приведенной временной диаграммой, последовательно переключая линии порта PORTDLC в программе управления дисплеем.
Набор функций управления графическим ЖК дисплеем. Мы предлагаем Вашему вниманию набор функций на Си, которые могут быть использованы в других программах для эффективного управления графическим ЖК дисплеем. Для каждой функции приведено
Рис. 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 для вывода данных на
Поделиться с друзьями: