Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 85 86 87 88 89 90 91 92 93 ... 150
Перейти на страницу:

/*------------------------------------------------------------------*/

/*-----------------------------------------------------------------------*/

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

/*-----------------------------------------------------------------------*/

void initialize_lcd(void) {

 delay_5ms();

 delay_5ms();

 delay_5ms(); //задержка 15 мс

 putcommands(0x38); //команда установки формата интерфейса обмена

 delay_5ms();

 putcommands(0x38);

 delay_l00us();

 putcommands(0x38);

 putcommands(0x38) ;

 putcommands(0x0C);

 putcommands(0x01); //очистить дисплей

 putcommands(0x06); //установить режим ввода с автоматическим

                    //увеличением адреса

                    //символа на 1

 putcommands(0x0E); //включить дисплей, режим курсора мигающий

 putcommands(0x02); //установить курсор на первое знакоместо

}

/*---------------------------------------------------------------------*/

/* Функция putchars производит запись одного кода символа в контроллер */

/*дисплея                                                              */

/*---------------------------------------------------------------------*/

void putchars(unsigned char с) {

 DDRP = 0xFF; //установить порт PORT P на вывод

 DDRDLC = DDRDLC | 0x0C; //установить разряды 2 и 3 порта PORT DLC на

                         //вывод

 PORTP = с; //Выдать в порт PORT P код символа с

 PORTDLC = PORTDLC | 0x08; //установить линию RS в 1

 PORTDLC = PORTDLC | 0x04; //установить линию E в 1

 PORTDLC = 0; //установить E и RS в 0

 delay_5ms(); //задержка 5 мс

}

/*-----------------------------------------------------------------------*/

/*Функция putcommands производит запись одного кода команды в контроллер */

/*дисплея                                                                */

/*-----------------------------------------------------------------------*/

void putcommands(unsigned char d) {

 DDRP = 0xFF; //установить порт PORT P на вывод

 DDRDLC = DDRDLC|0x0C; //установить разряды 2 и 3 порта PORT DLC на

                       //вывод

 PORTDLC = PORTDLC & 0xF7; //установить линию RS в 0

 PORTP = d; //Выдать в порт PORT P код команды d

 PORTDLC = PORTDLC | 0x04; //установить линию E в 1

 PORTDLC = 0; //установить E и RS в 0

 delay_5ms(); //задержка 5 мс

}

/*-----------------------------------------------------------------*/

/*Функция lcdprint производит запись строки символов в ОЗУ дисплея */

/*-----------------------------------------------------------------*/

void lcdprint(char *string) {

 putcommands(0x02); //команда установки адреса на начало строки

 while(*(string) != '') //вывести последовательно кода символов

 { //из памяти МК

  putchars(*string);

  string++;

 }

}

/*-------------------------------------------*/

/* Функция delay_5ms формирует задержку 5 мс */

/*-------------------------------------------*/

void delay_5ms(void) {

 int i;

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

  delay_l00us();

 }

}

/*-----------------------------------------------------*/

/* Функция void delay_100us формирует задержку 100 мкс */

/*Частота системной шины равна 8 МГц                   */

/*-----------------------------------------------------*/

void delay_100us(void) {

 int i;

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

  asm("nop"); //команда nop занимает 2 цикла

 }

}

/*-----------------------------------------------------*/

5.6.3 Сопряжение МК с графическим ЖК дисплеем

В этом разделе мы рассмотрим типовой графический ЖК дисплей. Следуя логике предыдущего параграфа, мы сначала обсудим информационную модель графического дисплея, затем изучим электрические характеристики и временные диаграммы обмена встроенного контроллера управления этим дисплеем, в завершении — элементы программы для передачи данных из МК в контроллер дисплея. В конце параграфа мы предложим Вам набор полезных для обслуживания графического дисплея функций. При рассмотрении мы будем использовать конкретную модель дисплея AND1391ST. Однако полученные знания Вы сможете легко применить к другим распространенным моделям дисплеев. В главе 7 мы предложим Вам подробный полностью завершенный пример с графическим дисплеем (разд. 7.).

Информационная модель. AND1391ST — ЖК дисплей с разрешающей способностью экрана 128×128 пикселов. Встроенный контроллер управления обеспечивает работу дисплея как в символьном, так и в графическом режиме отображения. Возможно также сочетание этих двух режимов работы при выводе одной и той же картинки. При использовании символьного режима поле экрана дисплея делится на 16 строк по 16 символов в каждой строке (рис. 5.14). Для отображения каждого символа предоставляется поле знакоместа размером 8×8 точек, как показано на рис. 5.15. В качестве дополнительного может быть использован режим символьного отображения, при котором поле экрана дисплея делится на 16 строк по 21 символу в строке. В этом случае каждое знакоместо будет состоять из 6×8 точек. Размер знакоместа задается уровнем сигнала на входе FS контроллера дисплея. Набор кодов для формирования образа каждого символа (знакогенератор) хранится в постоянной памяти контроллера дисплея.

Рис. 5.14. Информационная модель графического ЖК дисплея в символьном режиме

Контроллер дисплея воспроизводит на экране образы символов, коды которых хранятся в ячейках оперативной памяти контроллера. Каждому знакоместу на экране дисплея поставлена в соответствие ячейка ОЗУ с определенным адресом. В процессе инициализации контроллера дисплея МК записывает адрес начала ОЗУ экрана. На рис. 5.14 этот адрес равен $1000. Все остальные адреса для ячеек символов вычисляются посредством указанных на рис. 5.14 кодов смещения. В процессе инициализации также указывается число символов в строке. В нашем примере мы используем режим отображения с 16 символами в строке. При этом размер знакоместа для символа (8×8) уже выбран на аппаратном уровне: вход FS контроллера присоединен к общему выводу источника питания.

старший полубайт младший полубайт 0 1 2 3 4 5 6 7 8 9 A B C D E F 0   ! " # $ % & ' ( ) * + , - . / 1 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 2 @ A B C D E F G H I J K L M N O 3 P Q R S T U V W X Y Z [ ] ^ _ 4 ` a b c d e f g h i j k l m n o 5 p q r s t u v w x y z { | } ~  

Рис. 5.15. Таблица кодов символов для графического ЖК дисплея

1 ... 85 86 87 88 89 90 91 92 93 ... 150
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт.
Комментарии