eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikapierwsze początki z winavr pierwsze początki z winavr
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
    From: "janek" <t...@w...pl>
    Newsgroups: pl.misc.elektronika
    Subject: pierwsze początki z winavr
    Date: Sat, 31 Mar 2012 10:08:10 +0200
    Organization: ICM, Uniwersytet Warszawski
    Lines: 150
    Message-ID: <jl6e18$301$1@news.icm.edu.pl>
    NNTP-Posting-Host: 89-79-195-142.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; format=flowed; charset="iso-8859-2"; reply-type=original
    Content-Transfer-Encoding: 8bit
    X-Trace: news.icm.edu.pl 1333181288 3073 89.79.195.142 (31 Mar 2012 08:08:08 GMT)
    X-Complaints-To: u...@n...icm.edu.pl
    NNTP-Posting-Date: Sat, 31 Mar 2012 08:08:08 +0000 (UTC)
    X-Priority: 3
    X-MSMail-Priority: Normal
    X-Newsreader: Microsoft Outlook Express 6.00.2900.5931
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.6157
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:628538
    [ ukryj nagłówki ]

    Witam,
    zaczynam zabawę z avrstudio4 , znalazlem na elektrodzie program obsługi lcd
    i mam kłopot.
    Potrafię wyświetlić tekst, ale jak wyświetlić zmienną a ?
    Listing poniżej:
    ----------------------------------------------------
    ---------------------------------
    #include <avr/io.h>
    #include <util/delay.h>
    #include <string.h>

    //Tu należy zdefiniować piny , używane do sterowania wyśw. LCD
    //Sygnał R/W podpięty na stałe do GND
    #define RSPIN PC1 //numer bitu dla linii RS
    #define EPIN PC0
    #define D4PIN PB0
    #define D5PIN PD7
    #define D6PIN PD6
    #define D7PIN PD5

    #define RSPORT PORTC //port do którego podłączono linię RS
    #define EPORT PORTC
    #define D4PORT PORTB
    #define D5PORT PORTD
    #define D6PORT PORTD
    #define D7PORT PORTD

    #define RSDDR DDRC //port konfiguracyjny linii RS
    #define EDDR DDRC
    #define D4DDR DDRB
    #define D5DDR DDRD
    #define D6DDR DDRD
    #define D7DDR DDRD
    //koniec definicji pinów LCD

    //Takie sobie uproszczenia ;)
    #define SET_D4 D4PORT|=(1<<D4PIN)
    #define SET_D5 D5PORT|=(1<<D5PIN)
    #define SET_D6 D6PORT|=(1<<D6PIN)
    #define SET_D7 D7PORT|=(1<<D7PIN)

    #define CLR_D4 D4PORT&=~(1<<D4PIN)
    #define CLR_D5 D5PORT&=~(1<<D5PIN)
    #define CLR_D6 D6PORT&=~(1<<D6PIN)
    #define CLR_D7 D7PORT&=~(1<<D7PIN)

    #define SET_E EPORT|=(1<<EPIN)
    #define CLR_E EPORT&=~(1<<EPIN)
    #define SET_RS RSPORT|=(1<<RSPIN)
    #define CLR_RS RSPORT&=~(1<<RSPIN)
    #define CLRDISP 0x01
    #define HOMEDISP 0x02
    //koniec uproszczeń

    void LCDresetdata(void) //wyzeruj szynę danych LCD
    {
    CLR_D4;
    CLR_D5;
    CLR_D6;
    CLR_D7;
    }
    void LCDwrite(char d) //zapis bajtu do LCD
    {
    LCDresetdata();
    if(d & 0x10){SET_D4;}
    if(d & 0x20){SET_D5;}
    if(d & 0x40){SET_D6;}
    if(d & 0x80){SET_D7;}
    SET_E;CLR_E;
    LCDresetdata();
    if(d & 0x01){SET_D4;}
    if(d & 0x02){SET_D5;}
    if(d & 0x04){SET_D6;}
    if(d & 0x08){SET_D7;}
    SET_E;CLR_E;
    _delay_ms(2);
    }
    void LCDconfigIO(void) //wszystkie piny do których podłączony jest LCD jako
    wyjście
    {
    RSDDR|=(1<<RSPIN);EDDR|=(1<<EPIN);D4DDR|=(1<<D4PIN);
    D5DDR|=(1<<D5PIN);D6DDR|=(1<<D6PIN);D7DDR|=(1<<D7PIN
    );
    }
    void LCDcmd(char d) //Wyślij komendę do LCD
    {
    CLR_RS;
    LCDwrite(d);
    }
    void LCDchr(char d) //Wyślij 1 znak do LCD
    {
    SET_RS;
    LCDwrite(d);
    }
    void LCDinit(void) //inicjalizacja LCD
    {
    LCDconfigIO();
    CLR_RS;
    CLR_E;
    _delay_ms(20);
    CLR_D7;
    CLR_D6;
    SET_D4;
    SET_D5;
    unsigned char i;
    for(i=0;i<3;i++) {SET_E;CLR_E;_delay_ms(5);}
    CLR_D4;
    SET_E;
    CLR_E;
    _delay_ms(5);
    LCDcmd(0x28); //function set - interface=4 bit,line=2,font=5x7
    LCDcmd(0x0c); //display ctrl - display on
    LCDcmd(0x06); //entry mode set - increment
    LCDcmd(0x01); //clear display

    }
    //wyczyść wyśw.
    void LCDcls(void) {LCDcmd(CLRDISP);}
    //ustaw kursor na pozycji 0,0
    void LCDhome(void) {LCDcmd(HOMEDISP);}
    //wyślij tekst z RAM na wyśw.
    void LCDtext(char *txt) {while(*txt) {LCDchr(*txt++);}}
    //umieść kursor na pozycji x,y - brak kontroli dla x i y
    void LCDxy(char x,char y)
    {
    unsigned char com=0x80;
    com|=(x|(y<<6));
    LCDcmd(com);
    }


    // program główny
    int main(void)
    {

    LCDinit();
    while(1)
    {
    unsigned char a=4;
    _delay_ms(300);
    LCDxy(0,0);
    LCDtext("ff");
    _delay_ms(300);
    LCDcls();
    }
    return 0;
    }





Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: