Uživatel:Hroudmi2

Z MAM wiki

Přejít na: navigace, hledání

Obsah

[editovat] Samostatná práce

[editovat] Třída funkcí pro ovládání znakového LCD displeje

[editovat] Zadání

Implementujte třída funkcí pro ovládání znakového LCD displeje. Počet řádků a sloupců by byl konfigurovatelný, i když třeba ne úplně obecný - podle vyráběných typů.

[editovat] Popis LCD displeje s řadičem HD44780

Obvod HD44780 vyvinutý firmou Hitachi je hojně používaným obvodem pro ovládání LCD displejů. S obvodem je možné komunikovat buď pomocí osmi nebo čtyř bitů. Tato semestrální práce implementuje pouze komunikaci po čtyřbitovém rozhraní.

[editovat] Příkazy

Po paralelní sběrnici nejsou posílány jenom samotné znaky, které mají být vypsány, ale také následující konfigurační příkazy:

Význam bitů (1/0)
I/D - Inkrementace/Dekrementace pozice kurzoru při zapsání znaku
S - Povolení/Zakázání posouvání kurzoru po zapsání znaku
D - Zapnutí/Vypnutí displeje
C - Zobrazit/Nezobrazit kurzor
B - Povolit/Zakázat blikání
S/C - Posouvání displeje/kurzoru
R/L - Posouvání doprava/doleva
DL - 8bitová/4bitová sběrnice
N - dvou/jedno řádkový mód
F - 5x10/5x7 znaky






[editovat] Znaková sada

Dostupno je několik standardních znaků, jejichž kódy jsou shodné se znakovou sadou ASCII. Znaková sada bývá rozšířena většinou pouze o znaky čínštiny nebo japonštiny. Na prvních šestnácti místech znakové sady jsou dostupné uživatelsky definované znaky. Těchto znaků je však pouze 8, jejich programování probírá prostřednictvím DDRAM. CGRAM byla v této aplikaci využita pro české znaky "áéžíóěšř".

Soubor:hd44780-chr.png

[editovat] Schéma zapojení

Pro řízení LCD displeje byl použit mikrokontrolér ATmega8 a zapojen byl dle datasheetu. Pin 7 (R/W) byl uzemněn, jelikož nebylo implementováno čtení dat z displeje. Dále byly ještě uzemněny piny D0 až D3, protože při 4bitové komunikaci nejsou využívány. Schéma testovacího zapojení na nepájivém kontaktním poli

Schéma zapojení

Fotografie testovací desky s programátorem USBasp

[editovat] Zdrojové kódy

Implementace byla proveden v programovacím jazyku C. Konfigurace displeje a výčet funkcí je umístěn v souboru hd44780.h, samotná implementace v souboru hd44780.c. Součástí projektu je také soubor main.c, ve kterém byl implementován jednoduchý testovací soubor a soubor portbits.c obsahující makra na ovládání jednotlivých pinů portů.

[editovat] hd44780.h - Hlavičkový soubor funkcí pro ovládání displeje

Kromě všech potřebných funkcí jako je inicializace, odesílání příkazů a výpis celých řetězců byly navíc implementovány jednoduché funkce pro převod čísel na textový řetězec.

#ifndef __HD44780_H__
#define __HD44780_H__

// HW Definition
#define Display_RS    portd.bit0
#define Display_E     portd.bit1  
#define Display_DB4   portb.bit6
#define Display_DB5   portb.bit7
#define Display_DB6   portd.bit5
#define Display_DB7   portd.bit6 

#define Display_RS_DIR    ddrd.bit0
#define Display_E_DIR     ddrd.bit1  
#define Display_DB4_DIR   ddrb.bit6
#define Display_DB5_DIR   ddrb.bit7
#define Display_DB6_DIR   ddrd.bit5
#define Display_DB7_DIR   ddrd.bit6 
 
// Display configuration
//#define DISPLAY_LINES   0x00  //One line
#define DISPLAY_LINES   0x08  //Two lines
//#define DISPLAY_DOTS    0x00  //5x10 dots chars
#define DISPLAY_DOTS    0x04  //5x7 dots chars
//#define DISPLAY_CURSOR    0x02  //On
#define DISPLAY_CURSOR    0x00  //Off
//#define DISPLAY_BLINKING  0x01  //On
#define DISPLAY_BLINKING  0x00  //Off
 

// Functions
void DisplaySend(unsigned char Value, unsigned char ValueType);

void DisplayInit(void);
void DisplayInitDiaritics(void);


void DisplayClear(void);

void DisplatSetCursor(unsigned char pos, unsigned char line);
void DisplayResetCursor (void);


void DisplaySendString(char * str);

void Display_Hex_Number(unsigned char cislo);
void Display_Dec_Number(unsigned char cislo);



#endif

[editovat] main.c - Testovací aplikace

Testovací aplikace vypíše na displej nápis "Test áéžíóčšř" a na druhý řádek hexadecimálně číslo A, které je každou sekundu inkrementováno a dekadicky číslo B, které je dekrementováno.

#include <inttypes.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "hd44780.h"
#include "portbites.h"

#define F_CPU 1000000UL


const char TestString[16] = "Test   \x08\x01\x02\x03\x04\x05\x06\x07 ";

int main ()
{
	unsigned char HexNum = 127,DecNum = 127;

	
	DisplayInit();
	DisplayInitDiaritics();
	DisplayClear();
	

	while(1)
	{
		DisplaySendString(TestString);	

		DisplatSetCursor(1,1);
		DisplaySendString("A=0x");
		Display_Hex_Number(HexNum++);

		DisplatSetCursor(10,1);
		DisplaySendString("B=");
		Display_Dec_Number(DecNum--);
		DisplatSetCursor(0,0);

		_delay_ms(1000);
	}
	
	return 0;
}

[editovat] Ke stažení

[editovat] Jednotlivé soubory

hd44780.c
hd44780.h
portbites.h

[editovat] Celý projekt

hroudmi2_lcd.zip

Webové stránky autora

Osobní nástroje