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.
#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);
}