разделе 4.6 и его подразделах.
Рисунок 95. Временная диаграмма для записи в регистр данных (DR) контроллера ЖКИ. На первом
шаге мы производим загрузку регистра DATA_IND (при этом у нас появляются данные на выходах
DB0..DB7). На втором шаге мы формируем нужные нам управляющие сигналы W, RS и E, производя
запись в регистр C_IND расширителя портов.
6.5.2 Пример программы
В приведенном ниже исходном тексте есть некоторые упрощения,
сделанные для того, чтобы сделать более понятными основные операции,
необходимые вам для работы с ЖКИ:
1. Необходимо помнить, что в учебном стенде SDK-1.1 начальная
инициализация контроллера ЖКИ уже выполнена в загрузчике. В
реальной системе вам придется программировать ее самостоятельно.
2. Время выполнения команд контроллером ЖКИ не равно нулю и это
нужно учитывать в своей программе. В самом простом варианте можно
сформировать задержки после выполнения команд (что и сделано в
функции main()). Величину времени различных команд можно
посмотреть в разделе «Жидкокристаллический индикатор».
В приведенном исходном тексте нет описания функции работы с
регистрами ПЛИС (write_max). Драйвер ПЛИС представлен в разделе 6.2.
/* Пример работы с ЖКИ для учебного стенда SDK-1.1
Логическая '1' на входе ‘E’ позволяет передавать и принимать данные между
микроконтроллером и контроллером ЖКИ. Логический ноль на входе RW позволяет
записывать данные в контроллер ЖКИ, сигнал RS позволяет переключать регистры
контроллера ЖКИ: 1 – данные, 0 – команды.
*/
#define E
1
// Сигнал разрешения
'E'
#define R
2
// Сигнал чтения
#define RS
4
// Сигнал переключения в режим передачи данных
256
#define DATA_IND
0x1
// Регистр шины данных ЖКИ (ПЛИС)
#define C_IND
0x6
// Регистр команд ЖКИ (ПЛИС)
#define CLEAR
0x01 // Команда очистки дисплея
/*--------------------------------------------------------------------
lcd_clear
----------------------------------------------------------------------
Очистка дисплея.
Вход: нет
Выход: нет
Результат: нет
------------------------------------------------------------------- */
void lcd_clear( void )
{
// Записываем в регистр шины данных ЖКИ ( DATA_IND )
// команду очистки дисплея CLEAR
write_max( DATA_IND, CLEAR );
// Создаём строб записи, для этого на сигнальную линию 'E'
// выдаём короткий импульс
write_max( C_IND, E );
// положительной полярности, на линии 'RS' держим
// '0', чтобы попасть в регистр команд
write_max( C_IND, 0 );
}
/*--------------------------------------------------------------------
lcd_putch
----------------------------------------------------------------------
Вывод символа на ЖКИ.
Вход: char c – выводимый символ
Выход: нет
Результат: нет
------------------------------------------------------------------- */
void lcd_putch( char c )
{
// Записываем в регистр шины данных ЖКИ ( DATA_IND ) код символа
write_max( DATA_IND, c );
// Создаём строб записи, для этого на сигнальную линию 'E'
// выдаём короткий импульс
write_max( C_IND, RS | E );
// положительной полярности, на линии 'RS' держим '1',
// чтобы попасть в регистр данных
write_max( C_IND, RS );
}
/*--------------------------------------------------------------------
main
--------------------------------------------------------------------*/
257
void main( void )
{
unsigned short i = 0;
lcd_clear();
for( i = 0; i < 300; i++ );
lcd_putch( 'H' );
lcd_putch( 'e' );
lcd_putch( 'l' );
lcd_putch( 'l' );
lcd_putch( 'o' );
lcd_putch( '!' );
while( 1 );
}
258
Do'stlaringiz bilan baham: |