logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Konwersja programu Bascom AVR na C dla LCD 16x2 (ATmega8, wyświetlanie tekstu)

elektro155 04 Lut 2011 23:05 1399 7
REKLAMA
  • #1 9104777
    elektro155
    Poziom 26  
    Posty: 1049
    Pomógł: 20
    Ocena: 187
    Witam
    MAm taki PRogramik w bascomie, na razie sie uczę, w pierwszej linijce LCD 16*2 pisze "BIaLO NIEBIESKI" (chodzi o lcd, na którym jest to wyświetlane), a w drubiej wyświetla sie zmienna B1 o nazwie "Bascom"

    Tak wygląda:
    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
          'mikrokontrolera, do których
          'dołączono wyświetlacz
          'LCD
    Dim B1 As String * 20
    B1 = "Bascom"
    Cls
    do
    locate 1,1
    
    Lcd "BI{097}LO NIEBIESKI"
    Locate 2 , 1
    Lcd B1
    Loop
    End
    


    I tu mam pytanie, z czstej ciekawości: jak by wyglądał identyczny program w języku C, chciałbym je porównać
  • REKLAMA
  • Pomocny post
    #2 9104881
    pawel1029384756
    Poziom 21  
    Posty: 360
    Pomógł: 33
    Ocena: 277
    W c niema żadnych bibliotek do obsługi takich rzeczy jak wyświetlacze LCD, więc trzeba skorzystać z dodatkowej biblioteki, można napisać ją samą, albo ściągnąć z internetu, aktualnie jest już dużo takich bibliotek do pobrania. A później to wygląda już bardzo podobnie jak w bascomie, tylko, że albo masz tą bibliotekę w głównym pliku programy(nie polecam) albo w osobnym pliku nagłówkowym, który trzeba dołączyć.
  • REKLAMA
  • Pomocny post
    #3 9104882
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    To nie jest takie proste jak by się wydawało. Ten sam program można napisać na 100 różnych sposobów. Nie da się tego przełożyć 1 na 1
    W C musisz posiadać lub napisać bibliotekę do obsługi LCD a w Bascomie masz ją już napisaną przez kogoś innego i zaimplementowaną wewnątrz jako komendy.
    To tak samo jak nie da się przełożyć angielskiego bezpośrednio na polski. To samo można powiedzieć na 100 różnych sposobów, a polski polskiemu nie równy (dialekty).
  • Pomocny post
    #4 9105548
    Krauser
    Poziom 26  
    Posty: 508
    Pomógł: 124
    Ocena: 12
    #include<avr/io.h> //sam typ procesora wybiera się w opcjach
    #include "lcd.h" //tu są przypisane wyprowadzenia do lcd i prototypy funkcji do obsługi lcd
    #ifndef F_CPU 
    #define F_CPU  8000000UL //to w sumie nie potrzebne bo wybiera się w oppcjach
    #endif
    
    char B1[21] = "Bascom";//w C dodatkowo 1 bajt na koniec łańcuch znaków
    //można też tak B1[] = "Bascom"; kompilator sam dobierze rozmiar  
    int main(void)
    {
       cls();
       do
       { 
          locate(1,1); 
          lcd_puts_P ("BIALO NIEBIESKI");//wyświetlenie łańcuch z pamięci programu i umieszczenie łańcuch w pamięci programu
          locate(2,1); 
          lcd_puts(B1);//wyświetlenie łańcuch z pamięci danych
       } 
       while(1); 
       return 0; 
    }


    w pliku lcd.h można znaleźć coś takiego
    
    #define lcdPort PORTD
    #define lcdDb4 5
    #define lcdDb5 6
    #define lcdDb6 7
    #define lcdDb7 4
    #define lcdE 3
    #define lcdRs 2
    
  • REKLAMA
  • #5 9105730
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Krauser napisał:
    #include<avr/io.h> //sam typ procesora wybiera się w opcjach
    #include "lcd.h" //tu są przypisane wyprowadzenia do lcd i prototypy funkcji do obsługi lcd
    #ifndef F_CPU 
    #define F_CPU  8000000UL //to w sumie nie potrzebne bo wybiera się w oppcjach
    #endif
    
    char B1[21] = "Bascom";//w C dodatkowo 1 bajt na koniec łańcuch znaków
    //można też tak B1[] = "Bascom"; kompilator sam dobierze rozmiar  
    int main(void)
    {
       cls();
       do
       { 
          locate(1,1); 
          lcd_puts_P ("BIALO NIEBIESKI");//wyświetlenie łańcuch z pamięci programu i umieszczenie łańcuch w pamięci programu
          locate(2,1); 
          lcd_puts(B1);//wyświetlenie łańcuch z pamięci danych
       } 
       while(1); 
       return 0; 
    }


    w pliku lcd.h można znaleźć coś takiego
    
    #define lcdPort PORTD
    #define lcdDb4 5
    #define lcdDb5 6
    #define lcdDb6 7
    #define lcdDb7 4
    #define lcdE 3
    #define lcdRs 2
    


    Wszystko ładnie i pięknie tylko jeśli autor wątku to wklepie to za chwile będzie kolejny post że wywaliło mu błędów od groma i trochę, gdyż nie ma najważniejszego pliku lcd.h i lcd.c w którym zdefiniowane są takie funkcje jak:
    cls();
    locate();
    lcd_puts_P()
    lcd_puts();
    Jak już coś umieszczać to w całości a nie kawałek programu.
  • REKLAMA
  • Pomocny post
    #6 9117506
    Krauser
    Poziom 26  
    Posty: 508
    Pomógł: 124
    Ocena: 12
    Specjalnie dla Samuraja link do dobrej biblioteki dla LCD ze sterownikiem HD44780:
    http://www.jump.to/fleury
  • Pomocny post
    #7 9118378
    Samuraj
    Poziom 35  
    Posty: 2792
    Pomógł: 286
    Ocena: 619
    Ta biblioteka to raczej nie dla mnie, jak bym potrzebował to bym sam napisał, zresztą jest tyle przykładów że jest się na czym wzorować. Tu bardziej chodzi o to że jak coś umieszczamy to raczej w całości niż kawałek który może spowodować dalsze problemy.
  • #8 9382160
    elektro155
    Poziom 26  
    Posty: 1049
    Pomógł: 20
    Ocena: 187
    Dziękuje za odpowiedzi, temat zamykam

Podsumowanie tematu

✨ W dyskusji poruszono temat przenoszenia programu z Bascoma do języka C, w szczególności dotyczącego obsługi wyświetlacza LCD 16x2. Użytkownik przedstawił kod w Bascomie, który wyświetla tekst na LCD oraz zmienną. Odpowiedzi wskazują, że w C nie ma wbudowanych bibliotek do obsługi LCD, co wymaga użycia zewnętrznych bibliotek, które można napisać samodzielnie lub pobrać z internetu. Uczestnicy podkreślają, że konwersja kodu nie jest prosta i wymaga zrozumienia różnic między językami. Wskazano również na potrzebę dołączenia odpowiednich plików nagłówkowych, takich jak lcd.h, oraz na dostępność przykładów i bibliotek, które mogą ułatwić proces.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA