Witam !
Na początek pochwale się kodem który wymodziłem z pomoca kilku stronek o tematyce lcd:
Jak widać funkcja wpisująca tekst morze wpisywać tylko stringi.
Teraz moje pytania:
1.Czy każdą zmienną typu int musze przekształcić na stringa czy istnieją jakieś ułatwienia pomagajace wprowadzić zmienną int?
2.Czy musze pisać stringi 40 znakowe co by mi kursor przechodził do nowej lini czy jest na to inny sposób, znak nowej lini "\n" nie skutkuje.
3 Poprosze jeżeli ktoś moze polecić jakąś strone o wyswietlaczach lcd i o ich sterowaniu. Ja znalazłem tą stronke ale mało informacji na niej jest.
4. Jeżeli ktoś ma opis bibliotek zawartych w winavr20060421 gdzie były by opisane komendy tak jak naprzykład TU byłbym wdzięczny.
Pozdrawiam
A tak od siebie to dodam że programowanie uP to zupełnie co innego niż programowanie komputera. Są zupełnie inne biblioteki i to jest problem dla osób znających c/c++ dosyć biegle. A ludzie obecni na foróm mówią ze znajomość c/c++ to 80 % sukcesu . Jak na mój gust tak nie jest. Znajomość bibliotek avr to może być 80 % sukcesu ale nie znajomość c/c++.
Na początek pochwale się kodem który wymodziłem z pomoca kilku stronek o tematyce lcd:
#include <avr/io.h>
//
#define LCD PORTA
#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*1ms
void waitms(char x)
{
unsigned char a, b; // zmnienne licznikowe
for( ; x > 0; --x) // ta pętla zostanie wykonana x-razy
for(b = 10; b > 0; --b) // a ta 10 razy
for(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/dana
void 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 LCD
void 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 LCD
void 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 LCD
void 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 LCD
void lcd_init(void)
{
waitms(15); // czekaj 15ms na ustabilizowanie się napięcia zasilającego
CLR_E; // E = 0
CLR_RS; // RS = 0
char i; // zmianna licznikowa
for(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łówny
int main(void)
{
// konfiguracja portów we/wy
DDRA = 0xFF;
DDRD = 0xFC;
PORTA = 0xFF;
PORTD = 0xF7;
// inicjalizacja LCD
lcd_init();
// zapisz na LCD przykładowy tekst
char a=5;
write_text("Ala ma kota :D ");
write_text("Kot ma wpierdol ");
//write_text("Kot ma w pierdol");
// petla nieskończona
while(1);
return 0;
}
Jak widać funkcja wpisująca tekst morze wpisywać tylko stringi.
Teraz moje pytania:
1.Czy każdą zmienną typu int musze przekształcić na stringa czy istnieją jakieś ułatwienia pomagajace wprowadzić zmienną int?
2.Czy musze pisać stringi 40 znakowe co by mi kursor przechodził do nowej lini czy jest na to inny sposób, znak nowej lini "\n" nie skutkuje.
3 Poprosze jeżeli ktoś moze polecić jakąś strone o wyswietlaczach lcd i o ich sterowaniu. Ja znalazłem tą stronke ale mało informacji na niej jest.
4. Jeżeli ktoś ma opis bibliotek zawartych w winavr20060421 gdzie były by opisane komendy tak jak naprzykład TU byłbym wdzięczny.
Pozdrawiam
A tak od siebie to dodam że programowanie uP to zupełnie co innego niż programowanie komputera. Są zupełnie inne biblioteki i to jest problem dla osób znających c/c++ dosyć biegle. A ludzie obecni na foróm mówią ze znajomość c/c++ to 80 % sukcesu . Jak na mój gust tak nie jest. Znajomość bibliotek avr to może być 80 % sukcesu ale nie znajomość c/c++.