' ---------------------[Заголовок]---------------------------------------------------- ' ' Файл......proj07PBC.bas ' Формат....PicBasic Compiler ' Цель......PIC -> ЖКИ (с 4-битным интерфейсом) (на микроконтроллере PIC16F876 и ' ЖКИ-модуле, отображающем 2 строки по 16 символов в каждой) ' Автор.....Чак Хелибайк ' Создан....20 января 2002 года ' Изменен... ' ' ' ---------------------[Описание программы]----------------------------------------------- ' ' Подключение PIC16F876 к выводам ЖКИ-модуля: ' ' PIC ЖКИ Другие подключения ' --- --- ------------------ ' B4 ЖКИ.11 ' B5 ЖКИ.12 ' B6 ЖКИ.13 ' B7 ЖКИ.14 ' B3 ЖКИ.4 ' B0 ЖКИ.6 ' OSC1 Резонатор 4 МГц ' OSC2 Резонатор 4 МГц ' MCLR VDD через резистор сопротивлением в 1 кОм ' VDD +5 В ' VSS Земля ' ' ---------------------[Список версий программы]------------------------------------------ ' ' ' ' ---------------------[Определение констант]--------------------------------------------- ' ' Входы управляющих сигналов ЖКИ-модуля ' symbol E = 0 ' Вход разрешения модуля ЖКИ (1 = прием данных разрешен) symbol RS = 3 ' Вход выбора регистра (1 = выбрать регистр для записи символов) ' Коды команд для управления ЖКИ-модулем ' symbol ClrLCD = $01 ' Очистить экран symbol CrsrHm = $02 ' Переместить курсор в начало первой строки symbol Row2 = $C0 ' Включить отображение второй строки ЖКИ symbol CrsrLf = $10 ' Переместить курсор влево symbol CrsrRt = $14 ' Переместить курсор вправо symbol DspLf = $18 ' Переместить все отображенные символы влево symbol DspRt = $1C ' Переместить все отображенные символы вправо symbol Digit = $30 ' Код столбца символов ЖКИ ' ' ---------------------[Определение переменных]------------------------------------------- ' symbol x = B0 ' Служебная переменная symbol char = B1 ' Символ для передачи на ЖКИ symbol loop1 = B2 ' Счетчик циклов ' ' ---------------------[Процедура инициализации]------------------------------------------ ' Init: pins = $0000 ' Все выводы, связанные с ЖКИ, сбросить в 0 Dirs = %11111111 ' перед началом и сделать выходами PAUSE 215 ' Подождать, пока запустится ЖКИ-модуль ' ' Процедура инициализации ЖКИ-модуля (на контроллере Hitachi 44780) ' I_LCD: pins = %00110000 ' Задать 8-битный режим PULSOUT E, 100 ' Передать данные три раза PAUSE 10 PULSOUT E, 100 ' Передать данные три раза PAUSE 10 PULSOUT E, 100 ' Передать данные три раза PAUSE 10 PINS = %00100000 ' Задать 4-битный режим pause 1 PULSOUT E, 100 ' Передать данные три раза HIGH RS CHAR = %00101000 ' 4-бита, 2 строки, символ из 5x7 точек GOSUB LCDCMD CHAR = 8 ' Отключить индикатор, курсор и мигание курсора GOSUB LCDCMD CHAR = 6 ' Сдвинуть отображенные символы вправо GOSUB LCDCMD CHAR = 1 ' Очистить экран и переместить курсор в начало первой ' строки GOSUB LCDCMD CHAR = 15 ' Включить индикатор, курсор и мигание курсора GOSUB LCDCMD ' ---------------------[Основная програма]------------------------------------------------ ' Start: char = clrlcd ' Очистить экран gosub lcdcmd char = CRSRHM ' Переместить курсор ЖКИ в начало первой строки gosub lcdcmd ' **********************Вывести надпись "Hello World" в первой строке ЖКИ***************** char = "H" ' Передать фразу "Hello World" буква за буквой на gosub wrlcd ' ЖКИ-модуль char = "e" gosub wrlcd char = "l" gosub wrlcd char = "l" gosub wrlcd char = "o" gosub wrlcd char = " " gosub wrlcd char = "W" gosub wrlcd char = "o" gosub wrlcd char = "r" gosub wrlcd char = "l" gosub wrlcd char = "d" gosub wrlcd Pause 1000 ' Ждать, чтобы глаз успел заметить goto start ' Подпрограмма передачи байта кода команды на ЖКИ-модуль ' LCDcmd: LOW RS ' RS - НИЗКИЙ - значит, будет передана команда GOSUB WrLCD ' Передать байт HIGH RS ' Вернуться в режим передачи символов RETURN ' Подпрограмма пересылки символа кода ASCII на ЖКИ-модуль ' WrLCD: pins = pins & %00001000 ' Выдать старшую тетраду b3 = char & 11110000 ' Сохранить старшую тетраду переменной char в B3 pins = pins | b3 ' Объединить сигнал RS и старшую тетраду char pause 1 ' Ждать, пока установятся сигналы на выводах PULSOUT E, 100 ' Выдать строб-импульс на вход разрешения ЖКИ B3 = char * 16 ' Сдвинуть младшую тетраду на место старшей pins = pins & %00001000 ' Выдать младшую тетраду pins = pins | b3 ' Объединить сигнал RS и младшую тетраду char pause 1 ' Ждать, пока установятся сигналы на выводах PULSOUT E, 100 ' Выдать строб-импульс на вход разрешения RETURN