begin process at 2012 02 09 21:26:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Afficheur LCD et le langage C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Afficheur LCD et le langage C

mardi 17 janvier 2006 à 12:10:43 | Afficheur LCD et le langage C

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


++

mardi 17 janvier 2006 à 13:36:53 | Re : Afficheur LCD et le langage C

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
mercredi 18 janvier 2006 à 11:28:35 | Re : Afficheur LCD et le langage C

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é !!!
jeudi 19 janvier 2006 à 18:20:45 | Re : Afficheur LCD et le langage C

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 =)

mardi 24 janvier 2006 à 11:15:26 | Re : Afficheur LCD et le langage C

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
jeudi 26 janvier 2006 à 12:44:48 | Re : Afficheur LCD et le langage C

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

jeudi 26 janvier 2006 à 17:32:40 | Re : Afficheur LCD et le langage C

Linuss



merci beaucoup



Cette discussion est classée dans : texte, afficher, langage, afficheur, lcd


Répondre à ce message

Sujets en rapport avec ce message

Comment afficher du texte dans un fenêtre OpenGl?? [ par mastave ] Comment afficher du texte dans un fenêtre OpenGl??Et avec un police spéciale?? Afficher un texte sur un autre PC [ par MadMatt ] Slt !Je dois faire une application reseau permettant d'afficher plusieurs messages sur un PC "client", depuis un PC "exploitant".Pour se faire, j'aime Fichier texte dans edit box [ par revelata ] Bonjour,je cherche à afficher un fichier texte dans une editbox.En fait c'est pour une charte accepter refuser, le problème c'est que je n'arrive pas Texte en OpenGL [ par Zyvon ] HelloJe fais un quake-like et je cherche a afficher du texte en haut a gauche de ma fenetre (genre munitions par ex.)Je parviens a afficher du texte m Affichage texte sous windows [ par macros ] Bonjour a tous !!Je voudrais savoir comment on peut afficher du texte dans une fenetre windows en C car je voudrais faire une sorte de log de mon prog texte dans c++ builder [ par cbil ] Cedric Me contacterSalut,Je suis sur que c'est très simple mais je debute tout juste avec c++ builder et je ne trouve Clignoter du texte en langage C [ par dony ] Bonsoir,Comment faire clignoter du texte en langage C sans utiliser une tempo mais en utilisant printf(" "); ?MerciDonyNightClubber comment afficher texte en couleur sur borland C++ [ par aliasfreeman ] je suis debutant et je voudrais savoir comment on fait pour pouvoir afficher du texte en couleur et changer la couleur du fondMERCI.......... Problèmes pour afficher un texte à une certain endroit dans la page (C++) [ par Nicolas ] Pourrais-t-on me dire comment faire en C++ sous Linux pour afficher un texte ou une partie de texte à une certaine osition (coordonnée).Pour Windows l Problèmes pour afficher un texte à une certain endroit dans la page (C++) [ par Nicolas ] Pourrais-t-on me dire comment faire en C++ sous Linux pour afficher un texte ou une partie de texte à une certaine osition (coordonnée).Pour Windows l


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,908 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales