Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОВС (шпоры).doc
Скачиваний:
14
Добавлен:
20.09.2019
Размер:
670.72 Кб
Скачать
  1. Программное управление lcd со стороны микроконтроллеров

Контроллер может функционировать в след. режимах:

  1. Режим инициализации Init

    • Определение интерфейса

    • Вкл./выкл. подсветки

    • Перемещение курсора в нач. позицию

    • Определение содержимого блока CGRAM

  2. Режим передачи данных

Контроллер принимает данные либо для отображ. на LCD Panel (DDRAM), либо для задания пользовательских символов (CGRAM)

  1. Режим передачи инструкций

Для этого МК разл. инструкции и данные тр. разл. врем. задержек для исполнения (min=40мкс, max=4мс)

Полубайтный режим.

При использовании полубайтного режима необх.:

  1. При инициализации LCD контроллера указать инструкцию выбора режима.

  2. После этого все данные и коды инструкций будут передаваться группами по 4 разряда, начиная со старшего полубайта.

Пусть определены след. процедуры врем. задержек:

Delay_1ms

Delay_2ms

Delay_4ms

Delay_40us

Рассм. пример кода управления LCD Panel:

#define BANK0

BCF STATUS, RP0

#define BANK1

BSF STATUS, RP0

RS equ 1 ; номера разрядов порта B, к к-рым подкл. соотв. управляющие линии

RW equ 2

EN equ 3

LCD_buf equ 0x11

LCD_tmp equ 0x12

; LCD instructions

Constant LCD_CD = 0x01 ; Clear Display 2ms

Constant LCD_CH = 0x02 ; Cursor Home 2ms

Constant LCD_ON = 0x0C ; Display On 40us

31. Программное управление lcd со стороны микроконтроллеров (продолжение)

Constant LCD_OFF = 0x08 ; Display Off 40us

Constant LCD_CN = 0x0E ; Cursor On 40us

Constant LCD_CB = 0x09 ; Cursor Wink 40us

Constant LCD_2L = 0x28 ; LCD has 2 lines 40us

Constant LCD_4B = 0x20 ; 4-bit interface 40us

Constant LCD_L1 = 0x80 ; Select 1 line

Constant LCD_L2 = 0xC0 ; Select 2 line

RB7 6 5 4 3 2 1 RB0

D7 D6 D5 D4 E =0 RS X

Data/Instr. {0/1} Write {0/1}

; аргумент для вызова—значение WReg, исп. процедуру LCD_wr, которая передаёт данные из аккумулятора в  ; разряды порта B с формированием импульса на линии разрешения E. Импульс д. б. мин. 1мс

LCD_cmd

clrf LCD_buf

movwf LCD_tmp ; код инстр.

andlw b’11110000’

iorwf LCD_buf,0

call LCD_wr

swapf LCD_tmp,0

andlw b’11110000’

iorwf LCD_buf,0

call LCD_wr

return

LCD_wr

clrf PORTB

movwf PORTB

call Delay_1ms ; необх. для корректной фиксации

; переданных значений

bsf PORTB,EN

call Delay_1ms

bcf PORTB,EN

return

Для того чтобы передать вместо инструкции данные, необх. выполнение всё тех же действий + уст. бит RS в «1», который укажет LCD контроллеру, что передаётся.

LCD_dat

bsf LCD_buf, RS

; инициализация LCD контроллера

LCD_Init

BANK1

clrf TRISB

BANK0

clrf PORTB

call Delay_4ms ; LCD power UP!

movlw LCD_4B

call LCD_cmd

call Delay_40us

movlw LCD_ON

call LCD_cmd

call Delay_40us

movlw LCD_2L

call LCD_cmd

call Delay_40us

31. Программное управление lcd со стороны микроконтроллеров (продолжение)

В инициализации можно применять очистку дисплея, позиционирование курсора.

; Вывод символов

org 0x10

Main:

call LCD_Init

movlw 0x41 ; код отображаемого символа в аккумулятор

call LCD_dat ; курсор в нулевой позиции

call Delay_40us

movlw 0x61

call LCD_dat ; курсор в следующей позиции

call Delay_40us

; макроопределения

LCDD macro Ldata

movlw Ldata

call LCD_dat

call Delay_40us

endm

LCDC macro Lcmd

movlw Lcmd

call LCD_cmd

call Delay_40us

endm

____

LCDC 0x40 ; выбирает 0-вой адрес CGRAM для определения польз. символа

LCDD b’10001’ ; передача битовой маски для определения символа, значимые 5 младших бит

LCDD 0x00

LCDD 0x00

LCDD 0x00

LCDD 0x09

LCDD 0x09

LCDD 0x09

LCDD 0x1F

____

LCDC 0x80 ; перемещаем в 0-вую позицию

LCDD 0x40 ; отображаем символ