WordPress database error: [Table './meandr_base/anzpz_usermeta' is marked as crashed and last (automatic?) repair failed]
SELECT user_id, meta_key, meta_value FROM anzpz_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC

0

Die Verwendung von LCD-Anzeigen auf der Basis der Steuerung HD44780 und seine Analoga in Verbindung mit der PIC-Mikrocontroller

1ЖКИ на базе контроллеров HD44780 являются эффективным средством отображения различной информации и могут с успехом применяться даже в любительских разработках. Наличие многих режимов вывода (скроллирование, курсоры, определяемые пользователем символы) позволяет разрабатывать удобные интерфейсы управления и устройства индикации.

Наличие 4-х битного режима вывода даёт возможность задействовать минимум портов микроконтроллера.

Довольно много информации по этим индикаторам можно найти в интернете, поэтому приведу пример ассемблерных процедур, вставленных в код на С, для 4-х битного режима, как представляющий наибольший интерес для разработчиков.

Схема включения:
PIC RB2 – LCD RS
PIC RB3 – LCD E
PIC RB4 – LCD B4
PIC RB5 – LCD B5
PIC RB6 – LCD B6
PIC RB7 – LCD B7
Помимо этого: LCD R/W – заземлить, LCD B0…LCD B3 – подключить к плюсу питания через резисторы.

/*-------------начало примера-------------*/
.
.
.
char lcd_data;
/* вывод старшей тетрады байта данных */

void out_nibble() {
 asm {
  movwf _lcd_data  ; байт данных должен быть в W
  bcf PORTB, 4
  btfsc _lcd_data, 4
  bsf PORTB, 4
  bcf PORTB, 5
  btfsc _lcd_data, 5
  bsf PORTB, 5
  bcf PORTB, 6
  btfsc _lcd_data, 6
  bsf PORTB, 6
  bcf PORTB, 7
  btfsc _lcd_data, 7
  bsf PORTB, 7
 }
}

/* вывод байта в 8-ми битном режиме (требуется 
 только для инициализации ЖКИ) */
void wr_cmd(char cmd) {
 asm {
  bcf PORTB, 2 ; RS - down, пишем в IR
  movfw param00_wr_cmd
  call _out_nibble
  bsf PORTB, 3 ; E - up
  bcf PORTB, 3 ; E - down
  call _delay
 }
}

/* вывод байта команды на ЖКИ */
void wr_cmd4(char cmd) {
 asm {
  bcf PORTB, 2 ; RS - down, пишем в IR
  movfw param00_wr_cmd4
  call _out_nibble
  bsf PORTB, 3 ; E - up
  bcf PORTB, 3 ; E - down
  call _delay
  swapf param00_wr_cmd4, W ; меняем тетрады байта 
  call _out_nibble
  bsf PORTB, 3 ; E - up
  bcf PORTB, 3 ; E - down
  call _delay
 }
}

/* вывод байта данных на ЖКИ */
void wr_data4(char data) {
 asm {
  bsf PORTB, 2 ; RS - up, пишем в DR
  movfw param00_wr_data4
  call _out_nibble
  bsf PORTB, 3 ; E - up
  bcf PORTB, 3 ; E - down
  call _delay
  swapf param00_wr_data4, W ; меняем тетрады байта
  call _out_nibble
  bsf PORTB, 3 ; E - up
  bcf PORTB, 3 ; E - down
  call _delay
 }
}

/* задержка */
void delay() {
 delay_ms(1);
}
.
.
.
/*-------------окончание примера-------------*/

В приведенных примерах не отслеживается флаг занятости (busy flag) контроллера HD44780, взамен этого процедуры вывода на ЖКИ имеют задержки; на это следует обратить внимание. Ниже приводится фрагмент программы на С, выводящую фрагмент знакогенератора на экран ЖКИ формата 2 строки по 16 символов.

/*-------------начало примера-------------*/
.
.
.
char i, ch;

/* инициализация ЖКИ в 8-ми битном режиме 
(рекомендуется производителем) */
  wr_cmd(0x28);
  delay_ms(5);
  wr_cmd(0x28);
  delay();
  wr_cmd(0x28);
  delay();

/* инициализация ЖКИ в 4-х битном режиме */
  wr_cmd4(0x28);  
  wr_cmd4(0x0c);
  wr_cmd4(0x06);

  ch = 0x20;

  wr_cmd4(0x80); /* переход на первую строку экрана */ 
  for (i=0; i<16; i++) {
   wr_data4(ch); /* выводим символы */

   ch++;
  }
  wr_cmd4(0xc0); /* переход на вторую строку экрана */ 
  for (i=0; i<16; i++) {
   wr_data4(ch); /* выводим символы */
   ch++;
  }
.
.
.
/*-------------окончание примера-------------*/

Admin

Hinterlasse eine Antwort

Your email address will not be published. Required fields are marked *