Operácie

LCD displej: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Nová stránka: __NOTOC__ == Programovateľný LCD displej == === LCD Modul === left '''Vlastnosti:''' * 2x8 LCD Displej bez podsvetlenia * 4 Tlačítka * Trim...
 
Balogh (diskusia | príspevky)
 
(5 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 34: Riadok 34:
# clear displeja (a obnovenie povodneho obsahu displeja)
# clear displeja (a obnovenie povodneho obsahu displeja)
# zadefinujte si vlastné znaky a zobrazte ich spolu s iným textom. Povinne aspoň jeden znak s diakritikou a znak stupeň, zobrazte teplotu.
# zadefinujte si vlastné znaky a zobrazte ich spolu s iným textom. Povinne aspoň jeden znak s diakritikou a znak stupeň, zobrazte teplotu.
==== Simulátor periférií ====
Stiahnite a nainštalujte si Hapsim - simulátor periférií pre AVR Studio:
* http://www.helmix.at/hapsim/
[[Obrázok:ScreenshotHapsim.png|center]]




Riadok 47: Riadok 39:


K dispozícii máte:
K dispozícii máte:
* [http://ap.urpi.fei.stuba.sk/mmp/cvic4.hex Demo] - skompilovanú ukážku možností práce s displejom.  
* [http://ap.urpi.fei.stuba.sk/mmp/lcdDemo.hex Demo] - skompilovanú ukážku možností práce s displejom.  
* Knižnicu ([[AVR lcd.c|lcd.c]], [[AVR lcd.h|lcd.h]]) s fungujúcou inicializáciou displeja a príkazmi na ovládanie.
* Knižnicu ([[AVR lcd.c|lcd.c]], [[AVR lcd.h|lcd.h]]) s fungujúcou inicializáciou displeja a príkazmi na ovládanie.
* Pripravené sú funkcie:
* Pripravené sú funkcie:
Riadok 65: Riadok 57:
     unsigned char znak;
     unsigned char znak;
   
   
     lcdInit4();
     lcdInit4();                             // inicializacia v 4-bitovom rezime
     lcdControlWrite(1<<LCD_CLR);
     lcdControlWrite(1<<LCD_CLR);           // display clear
    lcdControlWrite(0x40);                  // pozicia 0,0


     for(znak='A';znak<'I';znak++)
     for(znak='A';znak<'I';znak++)
         lcdDataWrite(znak);
         lcdDataWrite(znak);                 // vypis znaky ABCDEFGH


     lcdControlWrite(0x40+0x80);
     lcdControlWrite(0x40+0x80);           // pozicia 1,0
     for(znak='0';znak<'8';znak++)
     for(znak='0';znak<'8';znak++)  
         lcdDataWrite(znak);
         lcdDataWrite(znak);                 // vypis znaky 01234567


     for(;;);
     for(;;);
Riadok 79: Riadok 72:
     }
     }
</source>
</source>
'''Ponz.:''' Ak pri vám kompilátor vypíše nasledovný Warning
c:/winavr-20080610/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"
znamená to, že nemáte nastavenú frekvenciu oscilátora a teda nie je možné preložiť knižnicu na generovanie oneskorenia.
V menu Project -> Configuration Options nastavte Frequency na hodnotu 16000000 Hz.


=== Literatúra ===
=== Literatúra ===
Riadok 96: Riadok 96:


=== Arduino ===
=== Arduino ===
Nasledovný príklad je pre Arduino.


* [http://www.arduino.cc/en/Tutorial/LCDLibrary LCD Library]
* [http://www.arduino.cc/en/Tutorial/LCDLibrary LCD Library]
Riadok 133: Riadok 135:
   // print the number of seconds since reset:
   // print the number of seconds since reset:
   lcd.print(millis()/1000);
   lcd.print(millis()/1000);
  // print the status of buttons:
  lcd.setCursor(6, 0);
  lcd.print(ReadButtons(),HEX);
 
}
}
/* ------------------------------------------------------- */
/*  Read and debounce the LCD AppMod buttons              */
/*                                                        */
/*  Returns 0 if nothing  is pressed                      */
/*  Returns 1 if button A is pressed                      */
/*  Returns 2 if button B is pressed                      */
/*  Returns 4 if button C is pressed                      */
/*  Returns 8 if button D is pressed                      */
/*  Returns combination if more is pressed (e.g. 6 for B+C)*/
/*                                                        */
/* ------------------------------------------------------- */
unsigned char ReadButtons()
{
  DDRD  = 0b00001110;                // make LCD bus inputs
  unsigned char state = 0xFF;          // assume nothing pressed
 
  for(int scan = 1; scan<=10; scan++)
  {
  state = state & ((PIND&0xF0)>>4); // make sure button held
  delay(5);                    // debounce 10 x 5 ms
  }
  DDRD  = 0b11111110; // return bus to outputs
 
  return(state);
}
</source>
</source>


Riadok 140: Riadok 177:
* [http://www.geocities.com/dinceraydin/lcd/charcalc.htm Custom Character Calculator]
* [http://www.geocities.com/dinceraydin/lcd/charcalc.htm Custom Character Calculator]


== Tlačítka modulu LCD Terminal AppMod ==


K maticovej klávesnici je aj tu https://learn.sparkfun.com/tutorials/sx1509-io-expander-breakout-hookup-guide/example-button-matrices pekný príklad.


== Tlačítka modulu LCD Terminal AppMod ==


Pre prístup k tlačítkam tohto modulu je v knižnici lcd.h k dispozícii funkcia
Pre prístup k tlačítkam tohto modulu je v knižnici lcd.h k dispozícii funkcia
Riadok 185: Riadok 223:


[[Obrázok:LCD_App_Mod_Schematic.png|center|450px]]
[[Obrázok:LCD_App_Mod_Schematic.png|center|450px]]
==== Simulátor periférií ====
Stiahnite a nainštalujte si Hapsim - simulátor periférií pre AVR Studio:
* http://www.helmix.at/hapsim/
[[Obrázok:ScreenshotHapsim.png|center]]


[[Monolitické_mikropočítače#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]
[[Monolitické_mikropočítače#Cvi.C4.8Denia|Návrat na zoznam cvičení...]]


[[Category:AVR]][[Category:MMP]][[Category:DVPS]]
[[Category:AVR]][[Category:MMP]][[Category:DVPS]]

Aktuálna revízia z 10:42, 20. január 2021

Programovateľný LCD displej

LCD Modul

Vlastnosti:

  • 2x8 LCD Displej bez podsvetlenia
  • 4 Tlačítka
  • Trimer na zmenu kontrastu

Technické parametre:

  • Napájanie: 5 V @ 15 mA
  • Pripojenie: 4-Bit parallel interface (Hitachi HD44780 compatible)
  • Rozmery: 60 x 50 x 20 mm
  • Pracovná teplota: 0 až +70 °C



Úlohy

Najprv sa snažte pochopiť, ako je vytvorený vzorový program, ako sa konfiguruje pripojenie LCD k portom, skontrolujte konfiguráciu. Potom s pomocou manuálu k displeju zobrazte na displeji nejaký text a zrealizujte nasledovné funkcie:

  1. posun kurzora doprava / dolava
  2. posun obsahu displeja doprava / dolava
  3. napíšte funkciu void lcdGotoXY(riadok, stlpec)
  4. clear displeja (a obnovenie povodneho obsahu displeja)
  5. zadefinujte si vlastné znaky a zobrazte ich spolu s iným textom. Povinne aspoň jeden znak s diakritikou a znak stupeň, zobrazte teplotu.


Software

K dispozícii máte:

  • Demo - skompilovanú ukážku možností práce s displejom.
  • Knižnicu (lcd.c, lcd.h) s fungujúcou inicializáciou displeja a príkazmi na ovládanie.
  • Pripravené sú funkcie:
.
     void lcdInit4(void);                     	   // inicializácia displeja 4-bitovo	
     void lcdDataWrite(unsigned char w_data) ;     // zapíše znak na aktuálnu pozíciu
     void lcdControlWrite(unsigned char c_data);   // zapíše príkaz do displeja
  • Demonštračný program využívajúci tieto funkcie
.
    #include "lcd.h"

    int main(void)
    {
     unsigned char znak;
 
     lcdInit4();                             // inicializacia v 4-bitovom rezime
     lcdControlWrite(1<<LCD_CLR);            // display clear
     lcdControlWrite(0x40);                  // pozicia 0,0

     for(znak='A';znak<'I';znak++)
        lcdDataWrite(znak);                 // vypis znaky ABCDEFGH

     lcdControlWrite(0x40+0x80);            // pozicia 1,0
     for(znak='0';znak<'8';znak++) 
        lcdDataWrite(znak);                 // vypis znaky 01234567

     for(;;);
     return 0;
    }

Ponz.: Ak pri vám kompilátor vypíše nasledovný Warning

c:/winavr-20080610/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"

znamená to, že nemáte nastavenú frekvenciu oscilátora a teda nie je možné preložiť knižnicu na generovanie oneskorenia. V menu Project -> Configuration Options nastavte Frequency na hodnotu 16000000 Hz.

Literatúra

Arduino

Nasledovný príklad je pre Arduino.

/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 8x2 LCD display.  
 
   The circuit:
 * LCD RS pin to digital pin 3
 * LCD R/W pin to digital pin 2
 * LCD Enable pin to digital pin 1
 * LCD D4 pin to digital pin 4
 * LCD D5 pin to digital pin 5
 * LCD D6 pin to digital pin 6
 * LCD D7 pin to digital pin 7                    
 */

#include <LiquidCrystal.h>           // include the library 

// initialize the library with the numbers of the interface pins
//  LiquidCrystal(RS, RW, EN, D4, D5, D6, D7) 
LiquidCrystal lcd( 3,  2,  1,  4,  5,  6,  7);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(8, 2);
  // Print a message to the LCD.
  lcd.print("Ahoj!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
  // print the status of buttons:
  lcd.setCursor(6, 0);
  lcd.print(ReadButtons(),HEX);
  
}


/* ------------------------------------------------------- */
/*  Read and debounce the LCD AppMod buttons               */
/*                                                         */
/*  Returns 0 if nothing  is pressed                       */
/*  Returns 1 if button A is pressed                       */
/*  Returns 2 if button B is pressed                       */
/*  Returns 4 if button C is pressed                       */
/*  Returns 8 if button D is pressed                       */
/*  Returns combination if more is pressed (e.g. 6 for B+C)*/
/*                                                         */
/* ------------------------------------------------------- */

unsigned char ReadButtons()
{
  DDRD  = 0b00001110;                // make LCD bus inputs
  unsigned char state = 0xFF;           // assume nothing pressed
  
  for(int scan = 1; scan<=10; scan++)
  {
   state = state & ((PIND&0xF0)>>4); // make sure button held
   delay(5);                     // debounce 10 x 5 ms
  }

  DDRD  = 0b11111110;				 // return bus to outputs
  
  return(state);
}

Misc:

Tlačítka modulu LCD Terminal AppMod

K maticovej klávesnici je aj tu https://learn.sparkfun.com/tutorials/sx1509-io-expander-breakout-hookup-guide/example-button-matrices pekný príklad.


Pre prístup k tlačítkam tohto modulu je v knižnici lcd.h k dispozícii funkcia

     unsigned char ReadButtons();

Ak ju tam nemáte, tu je:

/* ------------------------------------------------------- */
/*  Read and debounce the LCD AppMod buttons               */
/*                                                         */
/*  Returns 0 if nothing  is pressed                       */
/*  Returns 1 if button A is pressed                       */
/*  Returns 2 if button B is pressed                       */
/*  Returns 4 if button C is pressed                       */
/*  Returns 8 if button D is pressed                       */
/*  Returns combination if more is pressed (e.g. 6 for B+C)*/
/*                                                         */
/* ------------------------------------------------------- */

unsigned char ReadButtons()
{
  DDRD  = 0b00001110;                // make LCD bus inputs
  unsigned char state = 0xFF;           // assume nothing pressed
  
  for(int scan = 1; scan<=10; scan++)
  {
   state = state & ((PIND&0xF0)>>4); // make sure button held
   _delay_ms(5);                     // debounce 10 x 5 ms
  }

  DDRD  = 0b11111110;				 // return bus to outputs
  
  return(state);
}


Prečo je takto napísaná a ako vlastne funguje lepšie zistíte, keď si preštudujete schému zapojenia:

Simulátor periférií

Stiahnite a nainštalujte si Hapsim - simulátor periférií pre AVR Studio:



Návrat na zoznam cvičení...