/* * File: lcd16x2.c * Description: plik z definicjami funkcji * Author: elektronikawsrode */ #define _XTAL_FREQ 4000000 #include "lcd16x2.h" #include void InicjowaniePortow(void) { // Ustaw wszystkie linie jako cyfrowe ADCON1 = 0b00000111; //ustawienie kierunku wyjściowego linii podłączonych do LCD //TRISAbits.TRISA2=0; TRIS_RW_LCD = 0; TRIS_RS_LCD = 0; TRIS_EN_LCD = 0; TRIS_DB7_LCD = 0; TRIS_DB6_LCD = 0; TRIS_DB5_LCD = 0; TRIS_DB4_LCD = 0; //stan niski na liniach //PORTAbits.RA2 = 0; RW_LCD = 0; RS_LCD = 0; EN_LCD = 0; DB7_LCD = 0; DB6_LCD = 0; DB5_LCD = 0; DB4_LCD = 0; // wylacza wszystkie porty analogowe } void Wyslij_do_LCD(unsigned char bajt) { //ustawienie EN EN_LCD = 1; //wysłanie 4 najstarszych bitów danych if(bajt & 0x80) DB7_LCD = 1; else DB7_LCD = 0; if(bajt & 0x40) DB6_LCD = 1; else DB6_LCD = 0; if(bajt & 0x20) DB5_LCD = 1; else DB5_LCD = 0; if(bajt & 0x10) DB4_LCD = 1; else DB4_LCD = 0; //zaczekaj 1 __delay_us(1); //potwierdzenie wysłania danych (opadającym zboczem EN) EN_LCD = 0; //zaczekaj 1 ?s __delay_us(1); //ustawienie EN EN_LCD = 1; //wysłanie 4 najmłodszych bitów danych if(bajt & 0x08) DB7_LCD = 1; else DB7_LCD = 0; if(bajt & 0x04) DB6_LCD = 1; else DB6_LCD = 0; if(bajt & 0x02) DB5_LCD = 1; else DB5_LCD = 0; if(bajt & 0x01) DB4_LCD = 1; else DB4_LCD = 0; //zaczekaj 1 ?s __delay_us(1); //potwierdzenie wysłania danych (opadającym zboczem EN) EN_LCD = 0; //zaczekaj 37 ?s __delay_us(37); } void CzyscLCD() { RS_LCD = 0; Wyslij_do_LCD(1); RS_LCD = 1; //czekaj 1.64 ms __delay_us(1640); } void WyswietlLCD(char *napis, unsigned char ile) { for (unsigned int k = 0; k