Gestion LCD avec PIC18F4550
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Gestion LCD avec PIC18F4550



  1. #1
    invite7f5cbb01

    Gestion LCD avec PIC18F4550


    ------

    Bonjour je suis nouveau sur le forum et j'ai un petit soucis avec un porjet qu'on m'a soumis.
    Je dois gérer le fonctionnement d'un LCD à partir d'un PIC.
    J'utilise un PIC 18F4550 dont vous trouverez facilement le datasheet sur internet.

    Voici les caractéristiques du LCD que j'utilise : LCD 64128E
    Et voici un datasheet complémentaire du fonctionnement du LCD en question.
    KS0713

    Le compilateur que j'utilise est : PCW-C-Complier.

    J'ai bien ententu développé un code (et un code c'est façon de parler car ça va faire près de deux mois que je bloque toujours sur ce fonctionnement).
    Le voici:
    #define LCD_TYPE 1

    #use fast_io(B)
    #use fast_io(D)

    #define NOP #asm nop #endasm

    #byte pb =0xF81 //b //
    #byte pd =0xF83 //d // usb port 8 bits parallel

    #bit lcd_enable =pd.5// RD5
    #bit lcd_rs =pd.4 // RD4
    #bit lcd_rst =pd.3 // RD3
    #bit lcd_rw =pd.2 // RD2
    #bit lcd_cs =pd.1 // RD1
    #bit lcd_bl =pd.0 // RD0

    #bit B0 =pb.0
    #bit B1 =pb.1
    #bit B2 =pb.2
    #bit B3 =pb.3
    #bit B4 =pb.4
    #bit B5 =pb.5
    #bit B6 =pb.6
    #bit B7 =pb.7

    ///////////////////////// Table ASCII ///////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////
    BYTE TABLE5[240]= {0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
    0x00,0x00,0x5f,0x00,0x00, // 21 !
    0x00,0x07,0x00,0x07,0x00, // 22 "
    0x14,0x7f,0x14,0x7f,0x14, // 23 #
    0x24,0x2a,0x7f,0x2a,0x12, // 24 $
    0x23,0x13,0x08,0x64,0x62, // 25 %
    0x36,0x49,0x55,0x22,0x50, // 26 &
    0x00,0x05,0x03,0x00,0x00, // 27 '
    0x00,0x1c,0x22,0x41,0x00, // 28 (
    0x00,0x41,0x22,0x1c,0x00, // 29 )
    0x14,0x08,0x3e,0x08,0x14, // 2a *
    0x08,0x08,0x3e,0x08,0x08, // 2b +
    0x00,0x50,0x30,0x00,0x00, // 2c ,
    0x08,0x08,0x08,0x08,0x08, // 2d -
    0x00,0x60,0x60,0x00,0x00, // 2e .
    0x20,0x10,0x08,0x04,0x02, // 2f /
    0x3e,0x51,0x49,0x45,0x3e, // 30 0
    0x00,0x42,0x7f,0x40,0x00, // 31 1
    0x42,0x61,0x51,0x49,0x46, // 32 2
    0x21,0x41,0x45,0x4b,0x31, // 33 3
    0x18,0x14,0x12,0x7f,0x10, // 34 4
    0x27,0x45,0x45,0x45,0x39, // 35 5
    0x3c,0x4a,0x49,0x49,0x30, // 36 6
    0x01,0x71,0x09,0x05,0x03, // 37 7
    0x36,0x49,0x49,0x49,0x36, // 38 8
    0x06,0x49,0x49,0x29,0x1e, // 39 9
    0x00,0x36,0x36,0x00,0x00, // 3a :
    0x00,0x56,0x36,0x00,0x00, // 3b ;
    0x08,0x14,0x22,0x41,0x00, // 3c <
    0x14,0x14,0x14,0x14,0x14, // 3d =
    0x00,0x41,0x22,0x14,0x08, // 3e >
    0x02,0x01,0x51,0x09,0x06, // 3f ?
    0x32,0x49,0x79,0x41,0x3e, // 40 @
    0x7e,0x11,0x11,0x11,0x7e, // 41 A
    0x7f,0x49,0x49,0x49,0x36, // 42 B
    0x3e,0x41,0x41,0x41,0x22, // 43 C
    0x7f,0x41,0x41,0x22,0x1c, // 44 D
    0x7f,0x49,0x49,0x49,0x41, // 45 E
    0x7f,0x09,0x09,0x09,0x01, // 46 F
    0x3e,0x41,0x49,0x49,0x7a, // 47 G
    0x7f,0x08,0x08,0x08,0x7f, // 48 H
    0x00,0x41,0x7f,0x41,0x00, // 49 I
    0x20,0x40,0x41,0x3f,0x01, // 4a J
    0x7f,0x08,0x14,0x22,0x41, // 4b K
    0x7f,0x40,0x40,0x40,0x40, // 4c L
    0x7f,0x02,0x0c,0x02,0x7f, // 4d M
    0x7f,0x04,0x08,0x10,0x7f, // 4e N
    0x3e,0x41,0x41,0x41,0x3e}; // 4f O


    BYTE TABLE6[240]= {0x7f,0x09,0x09,0x09,0x06, // 50 P
    0x3e,0x41,0x51,0x21,0x5e, // 51 Q
    0x7f,0x09,0x19,0x29,0x46, // 52 R
    0x46,0x49,0x49,0x49,0x31, // 53 S
    0x01,0x01,0x7f,0x01,0x01, // 54 T
    0x3f,0x40,0x40,0x40,0x3f, // 55 U
    0x1f,0x20,0x40,0x20,0x1f, // 56 V
    0x3f,0x40,0x38,0x40,0x3f, // 57 W
    0x63,0x14,0x08,0x14,0x63, // 58 X
    0x07,0x08,0x70,0x08,0x07, // 59 Y
    0x61,0x51,0x49,0x45,0x43, // 5a Z
    0x00,0x7f,0x41,0x41,0x00, // 5b [
    0x02,0x04,0x08,0x10,0x20, // 5c
    0x00,0x41,0x41,0x7f,0x00, // 5d
    0x04,0x02,0x01,0x02,0x04, // 5e
    0x40,0x40,0x40,0x40,0x40, // 5f
    0x00,0x01,0x02,0x04,0x00, // 60
    0x20,0x54,0x54,0x54,0x78, // 61 a
    0x7f,0x48,0x44,0x44,0x38, // 62 b
    0x38,0x44,0x44,0x44,0x20, // 63 c
    0x38,0x44,0x44,0x48,0x7f, // 64 d
    0x38,0x54,0x54,0x54,0x18, // 65 e
    0x08,0x7e,0x09,0x01,0x02, // 66 f
    0x0c,0x52,0x52,0x52,0x3e, // 67 g
    0x7f,0x08,0x04,0x04,0x78, // 68 h
    0x00,0x44,0x7d,0x40,0x00, // 69 i
    0x20,0x40,0x44,0x3d,0x00, // 6a j
    0x7f,0x10,0x28,0x44,0x00, // 6b k
    0x00,0x41,0x7f,0x40,0x00, // 6c l
    0x7c,0x04,0x18,0x04,0x78, // 6d m
    0x7c,0x08,0x04,0x04,0x78, // 6e n
    0x38,0x44,0x44,0x44,0x38, // 6f o
    0x7c,0x14,0x14,0x14,0x08, // 70 p
    0x08,0x14,0x14,0x18,0x7c, // 71 q
    0x7c,0x08,0x04,0x04,0x08, // 72 r
    0x48,0x54,0x54,0x54,0x20, // 73 s
    0x04,0x3f,0x44,0x40,0x20, // 74 t
    0x3c,0x40,0x40,0x20,0x7c, // 75 u
    0x1c,0x20,0x40,0x20,0x1c, // 76 v
    0x3c,0x40,0x30,0x40,0x3c, // 77 w
    0x44,0x28,0x10,0x28,0x44, // 78 x
    0x0c,0x50,0x50,0x50,0x3c, // 79 y
    0x44,0x64,0x54,0x4c,0x44, // 7a z
    0x00,0x08,0x36,0x41,0x00, // 7b
    0x00,0x00,0x7f,0x00,0x00, // 7c
    0x00,0x41,0x36,0x08,0x00, // 7d
    0x10,0x08,0x08,0x10,0x08, // 7e
    0x78,0x46,0x41,0x46,0x78}; // 7f
    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    char charrange,charenvoie,charposit ion,chardonnee;

    void lcd_gestion_port(char donnee_envoye)// permet la gestion de l'état des ports
    {
    if ((donnee_envoye & 0x80) == 1){B7=1;}
    else {B7=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B6=1;}
    else {B6=0;}
    donnee_envoye=(donnee_envoye<< 1);
    if ((donnee_envoye & 0x80) == 1){B5=1;}
    else {B5=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B4=1;}
    else {B4=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B3=1;}
    else {B3=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B2=1;}
    else {B2=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B1=1;}
    else {B1=0;}
    donnee_envoye=donnee_envoye<<1 ;
    if ((donnee_envoye & 0x80) == 1){B0=1;}
    else {B0=0;}
    delay_ms(2);
    lcd_enable=0;
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void lcd_write_command(char donnee)
    {
    lcd_cs=0;
    lcd_enable=1;
    lcd_rs=0;
    lcd_gestion_port(donnee);
    lcd_cs=1;
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void lcd_write_data(char donnee_a_ecrire)
    {
    lcd_cs=0;
    lcd_enable=1;
    lcd_rs=1;
    lcd_gestion_port(donnee_a_ecri re); // write display data
    lcd_cs=1;
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void aw_lcd_init(void)
    {
    lcd_cs=0;
    lcd_rst = 0;
    delay_ms(15);
    lcd_rst = 1;
    delay_ms(1);

    lcd_write_command(0xe2); //reste

    lcd_write_command(0xa0); // ADC select: normal
    lcd_write_command(0xc0); // SHL select:
    lcd_write_command(0xb2); // LCD bias select:

    lcd_write_command(0x2c); // Voltage converter ON
    delay_ms(2);
    lcd_write_command(0x2e); // Voltage regulator ON
    delay_ms(2);
    lcd_write_command(0x2f); // Voltage follower ON

    lcd_write_command(0x25); // Regulator resistor select 0x20..0x27
    lcd_write_command(0x81); // Reference voltage register set
    lcd_write_command(0x18); // Reference voltage 0..63

    lcd_write_command(0x40); // initial display line 0x40..0x7f
    lcd_write_command(0xaf); // display ON
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void aw_lcd_gotoxy(byte x_col, byte y_row) // Positionnement du curseur
    {
    char hi_col,lo_col;

    lo_col= (x_col&0x0f);
    hi_col= ((x_col>>4)&0x0f)|0x10;

    lcd_write_command(hi_col); // set higher column address
    lcd_write_command(lo_col); // set lower column address

    lcd_write_command(0xb0|(y_row& 0x0f)); // set GDDRAM page address 0..7 (for 8 rows)
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void ascii_to_lcd(void) // extract ascii from tables & write to LCD
    {
    if (charenvoie<0x20)return;
    if (charenvoie>0x7f)return;

    for (charrange=0;charrange<5;charr ange++) { // 5 bytes

    if (charenvoie<0x50){charposition =(((charenvoie&0xff)-0x20)*5);chardonnee=TABLE5[(charposition+charrange)];} // use TABLE5
    else if (charenvoie>0x4f){charposition =(((charenvoie&0xff)-0x50)*5);chardonnee=TABLE6[(charposition+charrange)];} // use TABLE6

    lcd_write_data(chardonnee); // send data to nokia
    }
    lcd_write_data(0x00); // 1 byte (always blank)
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void aw_lcd_printchar(byte cvar) // Write 1 character to LCD
    {
    charenvoie=cvar;
    ascii_to_lcd();
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void lcd_clear_screen(void)
    {
    char y;
    for (y=0;y!=8;y++){
    aw_lcd_gotoxy(0,y);
    printf(aw_lcd_printchar," ");
    }
    }

    ////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////

    void main()
    {
    /****************************** ****************************** ***************/
    //initialisation des ports en sortie
    set_tris_B(0x00);// oooo oooo
    set_tris_D(0xc0);// iioo oooo // RD1..5 all outputs

    B0 =0;
    B1 =0;
    B2 =0;
    B3 =0;
    B4 =0;
    B5 =0;
    B6 =0;
    B7 =0;
    /****************************** ****************************** ***************/


    //début de l'initialisation
    aw_lcd_init();
    lcd_clear_screen();
    lcd_bl=1;
    //fin d'initialisation
    aw_lcd_gotoxy(0,0); // goto cursur location x= 0..127 PIXEL COLUMNS // y= 0..7 CHAR. ROWS
    printf(aw_lcd_printchar,"bonjo ur !!"); // show simple text

    }
    Voilà si vous pouvez m'aider et m'aiguiller afin que j'arrive à mes fins ce serait gentil. Je vous remercie par avance.

    Ps: J'ai oublié de vous spécifier que j'utilise le PORTD pour ce qui est "contrôle" du LCD et le PORTB pour tout ce qui est transfert des données.

    -----

  2. #2
    RISC

    Re : Gestion LCD avec PIC18F4550

    Zelos,

    Tu peux essayer de comparer le driver pour ton controleur LCD fait pour le compilateur C30 :
    http://www.microchipc.com/sourcecode/#samsung_ks0713

    Ou également ceci :
    http://www.techdesign.be/projects/042/042.htm

    a+
    Dernière modification par RISC ; 03/01/2008 à 00h01. Motif: correction

  3. #3
    invite7f5cbb01

    Re : Gestion LCD avec PIC18F4550

    Je te remercie. Je vais voir ce que je peux faire avec les liens que tu m'as fourni.
    Allez maintenant on reprend le travail. ^^

  4. #4
    Seb.26

    Re : Gestion LCD avec PIC18F4550

    Quel est le problème ?

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Débuter avec un PIC18F4550 USB
    Par synapsium dans le forum Électronique
    Réponses: 11
    Dernier message: 22/03/2012, 21h40
  2. Aide programmation C pour gestion d'un écran LCD
    Par invite55fe29e6 dans le forum Électronique
    Réponses: 4
    Dernier message: 19/11/2008, 02h08
  3. Tv LCD versus Moniteur LCD avec tunner tv
    Par invite12faae6c dans le forum Électronique
    Réponses: 1
    Dernier message: 10/03/2007, 16h39
  4. Probleme pic18f4550
    Par invite43d0193b dans le forum Électronique
    Réponses: 1
    Dernier message: 13/04/2006, 08h18
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...