#include <avr/io.h>//#define LCD PORTB#define E 3#define RS 2//#define SET_E LCD |= _BV(E)#define CLR_E LCD &= ~_BV(E)//#define SET_RS LCD |= _BV(RS)#define CLR_RS LCD &= ~_BV(RS)// funkcja opóźniająca o x*1msvoid waitms(char x){unsignedchar a, b;// zmnienne licznikowefor(; x >0;--x)// ta pętla zostanie wykonana x-razyfor(b =10; b >0;--b)// a ta 10 razyfor(a =100; a >0;--a)// natomiast ta 100 razy
__asm("nop");// dodatkowa instrukcja opóźniająca o 1 cykl// razem to da opóźnienie ok. x * 1ms// x od 0 do 255}// pcodedura zapisu bajtu do wyświetlacza LCD// bez rozróżnienia instrukcja/danavoid write_to_lcd(char x){
SET_E;// ustaw na E stan wysoki
LCD =((LCD &0x0F)|(x &0xF0));// zapis pierwszej połówki bajtu
CLR_E;// opadające zbocze na E -> zapis do wyświetlacza
SET_E;// ustaw na E stan wysoki
LCD =((LCD &0x0F)|((x &0x0F)<<4));// zapis drugiej połowki bajtu
CLR_E;// opadające zbocze na E -> zapis do wyświetlacza
waitms(1);// czekaj 1ms}// procedura zapisu instrukcji do wyświetlacza LCDvoid write_command(char x){
CLR_RS;// niski stan na RS -> zapis instrukcji
write_to_lcd(x);// zapis do LCD}// procedura zapisu danej do wyświetlacza LCDvoid write_char(char x){
SET_RS;// wysoki stan na RS -> zapis danej
write_to_lcd(x);// zapis do LCD}// procedura zapisu tekstu do wyświetlacza LCDvoid write_text(char* s){while(*s)// do napotkania 0{
write_char(*s);// zapisz znak wskazywany przez s na LCD
s++;// zwiększ s (przygotuj nastepny znak)}}// procedura inicjalizacji wyświetlacza LCDvoid lcd_init(void){
waitms(15);// czekaj 15ms na ustabilizowanie się napięcia zasilającego
CLR_E;// E = 0
CLR_RS;// RS = 0char i;// zmianna licznikowafor(i =0; i <3; i++)// trzykrotne powtórzenie bloku instrukcji{
SET_E;// E = 1
LCD &=0x3F;//
CLR_E;// E = 0
waitms(5);// czekaj 5ms}
SET_E;// E = 1
LCD &=0x2E;//
CLR_E;// E = 0
waitms(1);// czekaj 1ms
write_command(0x28);// interfejs 4-bity, 2-linie, znak 5x7
write_command(0x08);// wyłącz LCD, kursor i miganie
write_command(0x01);// czyść LCD
write_command(0x06);// bez przesuwania w prawo
write_command(0x0C);// włącz LCD, bez kursora i mrugania}// program głównyint main(void){// konfiguracja portów we/wy
DDRB =0xFF;
DDRD =0xFC;
PORTB =0xFF;
PORTD =0xF7;// inicjalizacja LCD
lcd_init();// zapisz na LCD przykładowy tekst
write_text("Ala ma kota :D");// petla nieskończonawhile(1);return0;}
But now I'm wonder how to read txt file from sd card and write it on lcd. I heard something about petitfs but I don't know how to use it, so if you can help me please reply.
Well for that you need to understand a bit about memory allocation, and writing formats like FAT, NTFS etc. generally in a drive there is a master table which keeps track of all the files and their starting locations. So if you want to read a file from a drive, first you need to read this Master table then accordingly navigate to file of your interest and then do burst read.