Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

afficheur LCD



  1. #1
    Katja

    afficheur LCD


    ------

    Bonjour,

    J'ai un petit souci. Je veux relier un afficheur LCD à un pic. J'ai commencé à écrire le programme en C dans lequel j'initialise l'afficheur et où je teste le busy flag.
    Mais je n'arrive pas à écrire une instruction (sous programme void lcd_write_instr(byte c)) et je ne sais pas également écrire un octet.
    Est-ce quelqu'un peut m'aider ?


    #include<16F877.h>
    #fuses XT,NOWDT,NOPROTECT
    #use delay(clock=20000000)
    #use fast_io(D)


    //D0 LCD_D4
    //D1 LCD_D5
    //D2 LCD_D6
    //D3 LCD_D7

    //D4 LCD_rs
    //D5 LCD_rw
    //D6 LCD_enable

    struct port_D_sortie
    {
    int LCD_data:4; //en sortie les quatre bits D4,D5,D6,D7

    int LCD_RS:1; //Définition du format de chaque des bits RS, RW et EN
    int LCD_RW:1;
    int LCD_EN:1;
    int bidon:1;
    };
    struct port_D_entree
    {
    int bidon:3; //en entree les trois bits
    int FLAG_BUSY : 1;
    int bidon2 : 4;
    };
    struct port_D_sortie port_D;


    struct port_D_entree status_D;


    #byte port_D=0xf83
    #byte status_D=0xf83

    #define port_D_LCD_IN 0b00001111 //à vérifier
    #define port_D_LCD_OUT 0b11110000 //à vérifier



    void test_lcd_busy(void);
    void lcd_init(void);
    void lcd_STROBE (void);
    void lcd__write_instr(void);
    void lcd_clear(void);


    #define LCD_STROBEport_D.LCD_EN=1;dela y_us(1);port_D.LCD_EN=0;delay_ us(1);


    void test_lcd_busy(void)
    {
    boolean LCD_BF;
    set_tris_D(port_D_LCD_IN);
    port_D.LCD_RS=1;
    do
    {
    port_D.LCD_EN=1;
    delay_us(1);
    LCD_BF=status_D.FLAG_BUSY;
    port_D.LCD_EN=0;
    delay_us(1);
    LCD_STROBE();
    }
    while (LCD_BF);
    port_D.LCD_RW=0;
    set_tris_D(port_D_LCD_OUT); //tant que BF=1 on peut écrire sur afficheur donc port D configuré en sortie
    }

    //void lcd_write_instr(byte c)
    //{
    // byte c;
    // test_lcd_busy();
    // set_tris_D(port_D_LCD_OUT);
    //{ port_D.LCD_RW=0;
    // port_D.LCD_RS=0;
    // port_D.LCD_data = c;
    // LCD_STROBE();
    //}
    //void lcd_clear(void)
    //{
    //port_D.LCD_RS=0;
    //port_D.LCD_data = 0b0010;
    //LCD_STROBE();
    //delay_ms(2);

    //}

    void lcd_init(void)
    {
    byte a;
    set_tris_D(port_D_LCD_OUT);
    port_D=0;
    delay_ms(30);
    port_D.LCD_data = 0b0011;
    for (a=0;a<3;a++)
    {
    LCD_STROBE(); //cette instruction permet d'obtenir un front descendant sur l'entrée de validation de l'afficheur
    delay_ms(2);
    }

    port_D.LCD_data = 0b0010;
    LCD_STROBE();
    delay_ms(2);
    lcd_write_instr(0x28);
    lcd_write_instr(0x06);
    lcd_write_instr(0x0C);
    lcd_clear();
    }

    -----

  2. #2
    electahar

    Re : afficheur LCD

    Bonjour
    Peut tu être plus clair!! explicite clairement ce que tu cherche à faire et quelle est ton problème.
    Met seulement le sous programme concerné.

Discussions similaires

  1. Afficheur LCD
    Par amgab2003 dans le forum Électronique
    Réponses: 39
    Dernier message: 24/01/2013, 13h26
  2. afficheur lcd en afficheur 7 segment
    Par tictic01 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/02/2008, 10h43
  3. Afficheur LCD
    Par drogba-11 dans le forum Électronique
    Réponses: 3
    Dernier message: 18/06/2007, 20h25
  4. afficheur LCD
    Par kawazakii dans le forum Électronique
    Réponses: 9
    Dernier message: 08/06/2007, 10h24
  5. afficheur lcd
    Par salva dans le forum Électronique
    Réponses: 0
    Dernier message: 26/01/2005, 17h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.