ADVERTISEMENT

lcd.c

Sterownik do CO i wymiennika ciepła

Wrzucam to co mam jeśli się przyda..lcd.c bojler .c(proba.c) Dokładam zaktualizowany soft wzbogacony o alarm przy przekroczeniu temp.kotła powyżej 90 stopni oraz z opcją podgrzewania elektrycznego jeśli piec wygaśnie. wyjścia: PC3-sterowanie siłownikiem PC4-alarm PC5-grzałka Pozdrawiam.


Download file - link to post

#include " lcd.h "

void WriteByteToLcd(char X)
{
lcd_e_high();
LCD_PORT |= 0xF0; // ustawienie górnej polówki portu PORT na " 1 "
LCD_PORT & = (X | 0x0F); // " bezkolizyjny " zapis 1-szej polówki bajtu (przez funkcje logiczna)
lcd_e_low(); // zapis do wyswietlacza (opadajace zbocze sygnalu E)

lcd_e_high(); // zapis 2-giej polówki bajtu
X & lt; & lt; = 4; // przesuniecie 4x w lewo
LCD_PORT |= 0xF0; // ustawienie górnej polówki portu PORT na " 1 "
LCD_PORT & = (X | 0x0F); // zapis 2-giej polówki bajtu i maskowanie 4 mlodszych bitów
lcd_e_low(); // opadajace zbocze E - zapis do LCD

_delay_ms(1);
}


// zapis bajtu do rejestru kontrolnego LCD
void WriteToLcdCtrlRegister(char X)
{
lcd_rw_low();
lcd_rs_low(); // ustawienie sygnalów sterujacych
WriteByteToLcd(X);
}

void LcdWrite(char X)
{
lcd_rs_high(); // ustawienie sygnalów sterujacych
lcd_rw_low();
lcd_e_high();
WriteByteToLcd(X);
}

// czyszczenie ekranu LCD
void LcdClrScr(void)
{
WriteToLcdCtrlRegister(0x01);
}

// inicjalizacja wyswietlacza LCD w trybie 4 bity
void LcdInitialize(void)
{
char i;
_delay_ms(15);
lcd_e_low(); // wyzerowanie linii LcdReg,LcdRead,LcdEnable
lcd_rs_low();
lcd_rw_low();

for (i=0;i & lt; 3;i++)
{
lcd_e_high(); // impuls na E
LCD_PORT & = 0x3F; // ustawienie wartosci inicjujacej
lcd_e_low();
_delay_ms(15);
}

lcd_e_high(); // wpisanie wartosci 2 do rejestru kontrolnego
LCD_PORT & = 0x2F; // tylko " górne " 4 bity
lcd_e_low();
_delay_ms(5);
WriteToLcdCtrlRegister(0x28); // interfejs 4 bity,znaki 5x7
WriteToLcdCtrlRegister(0x08); // wylaczenie LCD
WriteToLcdCtrlRegister(0x01); // kasowanie ekranu, powrót do pozycji home
WriteToLcdCtrlRegister(0x06); // przesuwanie kursora z inkrementacja
WriteToLcdCtrlRegister(0x0C); // zalaczenie wyswietlacza
}


void WriteText(char *S)
{
while (*S) // petla dziala dotad,az napotkany zostanie znak konca lancucha (/0)
{
LcdWrite(*S); // wyswietlenie pojedynczego znaku
S++;
}
}

void lcd_clr(void)
{
//WriteToLcdCtrlRegister(0x01);
WriteToLcdCtrlRegister(0x02);
}

void CustomChar(void)
{
WriteToLcdCtrlRegister(0x40);
LcdWrite(6);
LcdWrite(9);
LcdWrite(9);
LcdWrite(6);
LcdWrite(32);
LcdWrite(32);
LcdWrite(32);
LcdWrite(32);
}