begin process at 2008 07 20 09:20:01
1 213 150 membres
71 nouveaux aujourd'hui
14 166 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Afficheur LCD et le langage C [ Archives / Au secours ] (Linuss)

Afficheur LCD et le langage C le 17/01/2006 12:10:43

Linuss


Bonjour à tous,

j'ai un afficheur lcd 2*16, mais je ne sais pas comment faire pour y afficher un texte... j'ai bien de la doc dessus avec les valeurs exa pour lesquelles l'afficheur affiche un texte, mais la doc n'aborde pas comment l'afficher via C

j'ai trouvé ces sources sur des afficheurs : http://www.cppfrance.com/code.aspx?id=26634
mais elle me fait une erreur pour _outp

si quelqu'un aurait des infos sur comment faire, merci beaucoup


++


Re : Afficheur LCD et le langage C le 17/01/2006 13:36:53

julienbj
Sous quel plateforme travailles-tu? (un circuit embarqué ou un PC? SI PC, quel OS utilises-tu)

Si XP, _outp ne fonctionne pas car bloqué par l'OS. Il faut que tu utilises un driver pour y accéder. Personnnellement, j'utilise giveIO, mais il en existe de nombreux autre, regarde sur ce site ce qui traite du port parrallèle (car je suppose que c'est ce port que tu souhaites utiliser)


Vive le C
Tchao
Savon

Re : Afficheur LCD et le langage C le 18/01/2006 11:28:35

ctx_man
Salut, !

Le dernier afficheur LCD que j'ai piloter n'avait pas de driver, il fallait donc coder en conséquence. Il fallait trouver l'adresse du composant, y positionner un pointeur et lire/ecrire directement dans les registres. Peut-etre est-ce ton cas ? Si oui, je te souhaite bien du courage car il faut initialiser le composant et tenir compte de certaines contraintes (ordres des instruction, temps d'ecriture, de lecture, entre chaque ecriture, entre chaque lecture, les flags a positionner, ....)

Ps :  Quand j'ai fit ca j'etait sur un PowerPC avec un OS vxWorks (noyau linux) et l'ecran lcd était un module d'une carte VME.

Le travail c'est la santé, ne rien faire c'est la préservé !!!

Re : Afficheur LCD et le langage C le 19/01/2006 18:20:45

Linuss


hello :)

Julienbj > "Si XP, _outp ne fonctionne pas car bloqué par l'OS" : a ok c'est pour ca :s lol
je vais voir pour tes drivers :) merci
(et oui je vais utiliser le port parallèle :) le port usb me semble très compliqué :s)
ctx_man > apparement nan, parceque j'ai beau tout tester, rien ne marche T_T'

merci je vais tester =)


Re : Afficheur LCD et le langage C le 24/01/2006 11:15:26

Linuss


re :)

je viens de tester giveio, et ça me fait toujours une erreur avec _outp
vous auriez une idée svp?
j'ai aussi trouvé winio qui fournit une très belle source en C... mais toujours cette maudite erreur avec _outp

merci beaucoup

Re : Afficheur LCD et le langage C le 26/01/2006 12:44:48

julienbj

Voici la procédure d'initialisation de GiveIO:



/*
Test la présence et l'installation de giveio
Giveio est un logiciel permettant de déverouiller l'acces aux ports d'entrées/sorties 
du PC en désactivant la couche de protection HAL des technologies NT
Pour installer GIVEIO:
Cliquer sur "INSTDRV.EXE" qui installe le pilote dans C:/WINDOWS/SYSTEM32/DRIVERS  
Pour l'activer, il suffit de cliquer sur activate dans "INSTDRV.EXE"
La manipulation pour l'activation est à effectuer à chaque démarrage
Cependant on peut forcer WINDOWS à utiliser ce pilote des que l'on veut accéder aux ports
Pour cela, il faut dans le gestionnaire de périphérique afficher les périphériqes cachés
Puis dans les périphériques NON PLUG&PLAY double-cliquer sur GIVEIO
Et dans l'onglet "Pilote" sélectionner pour démarrage la valeur "systeme"     
*/
int InitWinNTDirectIO(void)
{
 HANDLE h;

    h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(h == INVALID_HANDLE_VALUE)  
        return 0;   
 CloseHandle(h);
 return 1;
}



Maintenant, les fonctions pour ecrire sur le port // (désolé pour la place prise, mais je ne voulais pas poster une source juste pour ça)


/*----------------------------------------------------------------*/
/*Ecriture de "octet" sur le registre "adresse" du port parallele */
/*----------------------------------------------------------------*/
void ecrire_broche_2_a_9(unsigned char octet)
{
 _asm {
  /*Deplace dans le registre DX l'adresse du registre en ecriture du port paralelle*/
  mov dx,WRITEPORT
  /*Deplace dans le registre al (8 bits) le char octet transmis en parametre*/
  mov al,octet
  /*Ecrit sur l'adresse contenue dans DX la valeur contenue dans al*/
  out dx,al
 }
}

/*---------------------------------------------------------------*/
/*lecture d'un octet sur le registre "adresse" du port parallele */
/*---------------------------------------------------------------*/
int lire_broche_2_a_9(void)
{
 char bit;

 _asm {
  /*Deplace dans le registre DX l'adresse du registre en lecture du port paralelle*/
  mov dx,WRITEPORT
  /*Ecrit dans le registre al la valeur contenue à l'adresse contenue par DX*/
  in al,dx
  /*Deplace la valeur contenue par le registre al dans le char bit*/
  mov bit,al
 }

 return (bit);
}

/*--------------------------------------------------------------------------------------------------*/
/*Les fonctions suivantes permettent de lire/écrire sur une broche du port parallele    */
/*Ceci pour pouvoir faire des opérations comme le load du registre sans affecter les autres broches */
/*Pour ce faire on utilise les opérations AND et OR de l'assembleur qui fonctionne comme en C  */
/*--------------------------------------------------------------------------------------------------*/

/*/!\: Les broches 1, 14 et 17 qui appartiennent au registre en lecture-ecriture */
/*    sont inversées, ainsi que la broche 11 qui appartient au registre en lecture */
/*----------------------------------------------------------------------*/
/*clear_brocheX():              */
/*Annule toute tension sur la broche1 du port parallele     */
/*Prend la valeur sur le registre en commande avant de faire un ET  */
/*Pour ne pas affecter toutes les broches du registre READANDWRITEPORT */
/*----------------------------------------------------------------------*/
void clear_broche1(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 1
  out dx, al
 }
}

void clear_broche2(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xFE
  out dx, al
 }
}

void clear_broche3(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xFD
  out dx, al
 }
}

void clear_broche4(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xFB
  out dx, al
 }
}

void clear_broche5(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xF7
  out dx, al
 }
}

void clear_broche6(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xEF
  out dx, al
 }
}

void clear_broche7(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xDF
  out dx, al
 }
}

void clear_broche8(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0xBF
  out dx, al
 }
}

void clear_broche9(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  and al, 0x7F
  out dx, al
 }
}

void clear_broche14(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 2
  out dx, al
 }
}

void clear_broche16(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  and al, 0xFB
  out dx, al
 }
}

void clear_broche17(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 8
  out dx, al
 }
}

/*----------------------------------------------------------------------*/
/*set_brocheX():              */
/*Envoie une tension sur la broche 1 du port parallele     */
/*Prend la valeur sur le registre en commande avant de faire un OU  */
/*Pour ne pas affecter toute les broches du registre READANDWRITEPORT */
/*----------------------------------------------------------------------*/
void set_broche1(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  and al, 0xFE
  out dx, al
 }
}

void set_broche2(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 1
  out dx, al
 }
}

void set_broche3(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 2
  out dx, al
 }
}

void set_broche4(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 4
  out dx, al
 }
}

void set_broche5(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 8
  out dx, al
 }
}

void set_broche6(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 16
  out dx, al
 }
}

void set_broche7(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 32
  out dx, al
 }
}

void set_broche8(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 64
  out dx, al
 }
}

void set_broche9(void)
{
 _asm
 {
  mov dx, WRITEPORT
  in al, dx
  or al, 128
  out dx, al
 }
}

void set_broche14(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  and al, 0xFD
  out dx, al
 }
}

void set_broche16(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 4
  out dx, al
 }
}

void set_broche17(void)
{
 _asm
 {
  mov dx, READANDWRITEPORT
  in al, dx
  and al, 0xF7
  out dx, al
 }
}

/*---------------------------------------*/ 
/*Pour lire une broche du port parallelle*/
/*---------------------------------------*/

/*C'est la broche 1 du registre en lectrue-écritue placé au  */
/*registre READANDWRITEPORT. Cette broche est inversée, il faut */
/*donc faire un NON bit-a-bit pour avoir sa valeur    */
char lire_broche1(void)
{
 char bit;

 _asm {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 0xFE
  mov bit, al
 }
 bit = ~bit;
 return (bit);
}

/*C'est la broche 2 du registre en lectrue-écritue placé au */
/*registre READANDWRITEPORT. Cette broche est inversée, il */
/*faut donc faire un NON bit-a-bit pour avoir sa valeur  */
char lire_broche14(void)
{
 char bit;

 _asm {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 2
  mov bit, al
 }
 bit = ~bit;
 return (bit);
}

/*C'est la broche 3 du registre en lectrue-écritue */
/*placé au registre READANDWRITEPORT    */
char lire_broche16(void)
{
 char bit;

 _asm {
  mov dx, READANDWRITEPORT
  in al, dx
  and al, 4
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 4 du registre en lectrue-écritue placé au  */
/*registre READANDWRITEPORT. Cette broche est inversée, il faut */
/*donc faire un NON bit-a-bit pour avoir sa valeur    */
char lire_broche17(void)
{
 char bit;

 _asm {
  mov dx, READANDWRITEPORT
  in al, dx
  or al, 0xF7
  mov bit, al
 }
 bit = ~bit;
 return (bit);
}

/*C'est la broche 1 du registre en écritue placé au registre WRITEPORT*/
char lire_broche2(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 1
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 2 du registre en écriture placé au registre WRITEPORT*/
char lire_broche3(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 2
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 3 du registre en écritue placé au registre WRITEPORT*/
char lire_broche4(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 4
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 4 du registre en écritue placé au registre WRITEPORT*/
char lire_broche5(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 8
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 5 du registre en écritue placé au registre WRITEPORT*/
char lire_broche6(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 16
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 6 du registre en écriture placé au registre WRITEPORT*/
char lire_broche7(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 32
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 7 du registre en écritue placé au registre WRITEPORT*/
char lire_broche8(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 64
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 8 du registre en écritue placé au registre WRITEPORT*/
char lire_broche9(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 128
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 7 du registre en lecture placé au registre READPORT*/
char lire_broche10(void)
{
 char bit;

 _asm {
  mov dx, READPORT
  in al, dx
  and al, 64
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 8 du registre en lecture placé au   */
/*registre READPORT. Cette broche est inversée,    */
/*il faut donc faire un NON bit-a-bit pour avoir sa valeur */
char lire_broche11(void)
{
 char bit;

 _asm {
  mov dx, READPORT
  in al, dx
  or al, 0x7F
  mov bit, al
 }
 bit = ~bit;
 return (bit);
}

/*C'est la broche 6 du registre en lecture placé au registre READPORT*/
char lire_broche12(void)
{
 char bit;

 _asm {
  mov dx, READPORT
  in al, dx
  and al, 32
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 5 du registre en lecture placé au registre READPORT*/
char lire_broche13(void)
{
 char bit;

 _asm {
  mov dx, READPORT
  in al, dx
  and al, 16
  mov bit, al
 }
 return (bit);
}

/*C'est la broche 4 du registre en lecture placé au registre READPORT*/
char lire_broche15(void)
{
 char bit;

 _asm {
  mov dx, WRITEPORT
  in al, dx
  and al, 8
  mov bit, al
 }
 return (bit);
}



Si c'est pas suffisament clair, n'hésite pas à demander.

Vive le C
Tchao
Savon


Re : Afficheur LCD et le langage C le 26/01/2006 17:32:40

Classé sous : texte, afficher, langage, afficheur, lcd

Participer à cet échange

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS