Obsluha LCD v céčku pro PIC16F84A
Moderátor: Moderátoři
Obsluha LCD v céčku pro PIC16F84A
Zdravím všechny!
Stáhl jsem si kompiler mikroC a na zkoušku do něj napsal program v příloze. Menším problémem zpočátku bylo, že to zabralo skoro veškerou RAM a půlku Flash a jen to zaplnilo LC displej a šmytec. Pak jsem se dozvěděl o kouzelném slůvku "code", které se dá doplnit ke konstantě, aby se konstanta uložila do Flash. Tak jsem program upravil do podoby v příloze a nefunguje to už vůbec. Na displeji se zobrazí nesmysly.
Je tam někde problém s pointerem nebo to u 16F84A prostě nejde? Když jsem se díval na přeložený HEX, tak ty texty tam jsou vložené do instrukcí retlw, tak by to možná mělo nějak fungovat...
Procesor je ve zkušebním zapojení CHIPON 1.
Stáhl jsem si kompiler mikroC a na zkoušku do něj napsal program v příloze. Menším problémem zpočátku bylo, že to zabralo skoro veškerou RAM a půlku Flash a jen to zaplnilo LC displej a šmytec. Pak jsem se dozvěděl o kouzelném slůvku "code", které se dá doplnit ke konstantě, aby se konstanta uložila do Flash. Tak jsem program upravil do podoby v příloze a nefunguje to už vůbec. Na displeji se zobrazí nesmysly.
Je tam někde problém s pointerem nebo to u 16F84A prostě nejde? Když jsem se díval na přeložený HEX, tak ty texty tam jsou vložené do instrukcí retlw, tak by to možná mělo nějak fungovat...
Procesor je ve zkušebním zapojení CHIPON 1.
- Přílohy
-
- LCD.txt
- (1.4 KiB) Staženo 165 x
Kód: Vybrat vše
const code char *text3[] = "Konec filmu...";
Kód: Vybrat vše
const code char text3[] = "Konec filmu...";
Kód: Vybrat vše
const code char *text3 = "Konec filmu...";
Ledku jsem už rozblikat zkoušel, všechno bylo vpořádku.
Výpis na displej jsem už také úspěšně vyzkoušel následujícím zápisem:
Bohužel na výpis dalších textů nezbyla RAM, každé volání lcd_out() si vzalo počet registrů rovný délce vypisovaného textu. Pak jsem se dozvěděl o možnosti vytvářet konstanty v paměti programu přes definici code. A tím to vše skončilo.
Výpis na displej jsem už také úspěšně vyzkoušel následujícím zápisem:
Kód: Vybrat vše
// (přiřazení jednotlivých vývodů pro knihovnu lcd)
void main() {
// (... nastavení portů atd....)
lcd_init();
lcd_cmd(_LCD_CLEAR);
lcd_cmd(_LCD_CURSOR_OFF);
lcd_out(1, 1, "Prvni text"); // lcd_out(řádek, sloupec, text);
lcd_out(2, 1, "z Cecka"); }
Zkus toto:
Kód: Vybrat vše
const char Text1[] = "text 1";
const char Text2[] = "text 2";
const char Text3[] = "text 3";
//zobraz FLASH string na aktuální pozici kurzoru
void Lcd_Out_P(const char* flashstr)
{
char i=0, c;
while( (c = flashstr[i]) != 0)
{
Lcd_Chr_Cp(c); //zobraz znak
i++;
}
}
//--------------------------------------------------------
void main()
{
Lcd_init();
Lcd_Cmd(Lcd_Clear);
Lcd_Out_P(Text1);
Lcd_Cmd(LCD_SECOND_ROW);
Lcd_Out_P(Text2);
while(1) {}
}