begin process at 2010 02 10 11:36:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Périphériques

 > SOURCE_ POUR AFFICHEUR LCD ET CLAVIER MATRICE

SOURCE_ POUR AFFICHEUR LCD ET CLAVIER MATRICE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Périphériques Niveau :Initié Date de création :12/11/2002 Date de mise à jour :12/11/2002 21:32:52 Vu :17 610

Auteur : NiChaN

Ecrire un message privé
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 Description

cette source vous permet de communiqué avec un afficheur lcd 7segments
en plus je vous ai rajouter un clavier matriciel au cas ou vous en avais besoin ..
J'ai cree ces fonction a la base  pour un monnayeur electronique

Source

  • // [--]________________________________[--]
  • // |**************************************|
  • // |*******/\/\/\/\/\/\/\/\/\/\/\/\*******|
  • // |*******\** GesClavier **/*******|
  • // |*******/** 19/12/2001 **\*******|
  • // |*******\** v1.0 **/*******|
  • // |*******/** NiChaN EaTo© **\*******|
  • // |*******\/\/\/\/\/\/\/\/\/\/\/\/*******|
  • // |**************************************|
  • // ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  • // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • #include <iostream.h>
  • #include <conio.h>
  • #include <windows.h>
  • #define PORTLPTR 0x378 // Ad Base du Port //PORT
  • #define REGIN 1
  • #define REGOUT 0
  • char GesClavier(); // a mettre eventuellement dans un ".h"
  • bool toucheOK=false;
  • char tabinit[5][4]={
  • {'1','2','E','3'}, // TABLEAU D'INITIALISATION
  • {'4','5','E','6'},
  • {'7','8','E','9'},
  • {'E','E','E','E'},
  • {'*','0','E','#'}};
  • int tabEnvoi[3]={0x6,0x5,0x3};
  • int adress=0, a,b,c;
  • int valeur=0,rebond=0;
  • char GesClavier()
  • {
  • for(a=0;a<3;a++)
  • {
  • _outp(PORTLPTR+REGOUT,tabEnvoi[a]);
  • rebond=_inp(PORTLPTR+REGIN); // lecture
  • rebond=((rebond>>3)&0x0F); // modification pour le cablage
  • if(rebond!=0x0F)
  • {
  • Sleep(100); // tempo pour le rebond
  • adress=_inp(PORTLPTR+REGIN); // relecture en cas de rebond !
  • adress=((adress>>3)&0x0F);
  • }
  • if((rebond==adress)&& (rebond!=0x0F))
  • {
  • b=((~adress)&0x0F)>>1; //modification pour l'indicer
  • c=((~(tabEnvoi[a]))-1)&0x07; //modification pour l'indicer
  • toucheOK=true;
  • cout<<" "<<tabinit[b][c]<<endl; // Affichage
  • Sleep(50); // Tempo repos !
  • }
  • }
  • if (toucheOK==true)
  • {toucheOK=false;
  • return (tabinit[b][c]);
  • }
  • else return ('_');
  • }
  • ///////////////////////////////////////////////////////////////////////////////////////
  • //TIMAFFICH.H
  • // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • // Fonction : fonction qui permet afficher des donnes sur un ecran LCD
  • // Date : 15/01/2002
  • // Version : v1.0
  • // Variable : RS= 1/0 #1 Donnee ->0 Instruction
  • // : RW= 1/0 #1 lecture ->0 Ecriture
  • // : Data= 'X' 1 caracteres a afficher
  • void Timaffich(unsigned char RS,unsigned char RW, unsigned char DATA);
  • void initAffiche();
  • void AfficheMess(char *Ecrit);
  • void ClearAffich();
  • ////////////////////////////////////////////////////////////////////////////////////
  • //TIMEAFFICH.cpp
  • //
  • // fonction afficheur timing
  • #include "TIMAFFICH.h"
  • #include <windows.h>
  • #include <conio.h>
  • #define PORTLPTRSORT 0x378 // PORTSORTIE
  • #define SET 0x38 // ACTIVATION
  • #define DISPLAYCONTROL 0x0E
  • #define MODESET 0x06
  • #define CLEAR 0x01 // EFFACER ECRAN LCD
  • #define HOME 0x02 // RETOUR CURSEUR
  • #define INIT 0x30 // INITIALISATION
  • #define ALALIGN 0xC0 // RETOUR A LA LIGNE
  • void Timaffich(unsigned char RS,unsigned char RW, unsigned char DATA)
  • { //E=0
  • _outp(PORTLPTRSORT+2,RS|RW|0);
  • Sleep(1);
  • _outp(PORTLPTRSORT+2,RS|RW|0x04);
  • Sleep(1);
  • _outp(PORTLPTRSORT,DATA); // ECRITURE
  • Sleep(1);
  • //E=0;
  • _outp(PORTLPTRSORT+2,(RS|RW)&0xFB);
  • Sleep(1);
  • }
  • ////////////////////////////INITAFFICHE//////////////////////////////////////////
  • void initAffiche()
  • {
  • int b;
  • unsigned char tabInitLCD[9]={INIT,INIT,INIT,SET,DISPLAYCONTROL,CLEAR,HOME,MODESET};
  • //INITIALISATION
  • Sleep(16);
  • for(b=0;b<8;b++)
  • {
  • Timaffich(0x01,0x02,tabInitLCD[b]); // Initialisation LCD
  • Sleep(1);
  • }
  • }
  • ////////////////////////////////////////////////////////////////////////////////////////////
  • void ClearAffich()
  • {
  • Timaffich(0x01,0x02,CLEAR); // Initialisation LCD
  • Sleep(1);
  • }
  • ////////////////////////////////AFFICHEMESS//////////////////////////////////////////////////
  • int alalign=0;
  • void AfficheMess(char *pEcrit)
  • {
  • if(alalign==16) Timaffich(0x01,0x02,ALALIGN); // ECRITURE DE DONNES--*
  • // RETOUR A LA LIGNE--*
  • Timaffich(0x00,0x02,(unsigned char)*pEcrit); // 'H'
  • alalign++;
  • Sleep(1);
  • }
  • /////////////////////////////////////////////////////////////////////////////////////////
  • //Afficheur.cpp
  • ////////////////////////////////////////////////////////////////////////////////////////
  • // [--]________________________________[--]
  • // |**************************************|
  • // |*******/\/\/\/\/\/\/\/\/\/\/\/\*******|
  • // |*******\** Afficheur **/*******|
  • // |*******/** 19/12/2001 **\*******|
  • // |*******\** v1.0 **/*******|
  • // |*******/** NiChaN EaTo© **\*******|
  • // |*******\/\/\/\/\/\/\/\/\/\/\/\/*******|
  • // |**************************************|
  • // ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  • // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • // Port : serie
  • // Afficheur LCD avec clavier
  • #include <stdio.h>
  • #include <iostream.h>
  • #include <conio.h>
  • #include <windows.h>
  • #include "TIMAFFICH.H"
  • #include "GesClavier.h"
  • void main()
  • {
  • char Ecrit[80]=" ";
  • char * pEcriture=Ecrit;
  • int j=0;
  • initAffiche();
  • ClearAffich();
  • j=0;
  • for(;;)
  • {
  • *pEcriture=GesClavier(); // saisie du clavier sur l'afficheur
  • if('_'!=(*pEcriture))
  • {
  • AfficheMess(pEcriture);
  • j++;
  • pEcriture++;
  • // ClearAffich();
  • }
  • }
  • }
  • //////////////////////////////////////////////////////////////////////////////////////
//					[--]________________________________[--]
//					|**************************************|
//					|*******/\/\/\/\/\/\/\/\/\/\/\/\*******|
//					|*******\**    GesClavier    **/*******|
//					|*******/**    19/12/2001    **\*******|
//					|*******\**      v1.0        **/*******|
//					|*******/**   NiChaN EaTo©   **\*******|   
//					|*******\/\/\/\/\/\/\/\/\/\/\/\/*******|
//					|**************************************|
//					¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
//                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <iostream.h>
#include <conio.h>
#include <windows.h>

#define PORTLPTR 0x378		// Ad Base du Port //PORT
#define REGIN 1
#define REGOUT 0

char GesClavier(); // a mettre eventuellement dans un ".h"

bool toucheOK=false;

char tabinit[5][4]={
	{'1','2','E','3'},		// TABLEAU D'INITIALISATION
	{'4','5','E','6'},
	{'7','8','E','9'},
	{'E','E','E','E'},
	{'*','0','E','#'}};
	
	int tabEnvoi[3]={0x6,0x5,0x3};	
			
	int adress=0, a,b,c;
	int valeur=0,rebond=0;
char GesClavier()
{
	
	for(a=0;a<3;a++)
		{
			_outp(PORTLPTR+REGOUT,tabEnvoi[a]);
			rebond=_inp(PORTLPTR+REGIN); // lecture
			rebond=((rebond>>3)&0x0F);	// modification pour le cablage
			if(rebond!=0x0F)
			{
				Sleep(100); // tempo pour le rebond
				adress=_inp(PORTLPTR+REGIN);	// relecture en cas de rebond !
				adress=((adress>>3)&0x0F);
			}

			if((rebond==adress)&& (rebond!=0x0F))
			{
					b=((~adress)&0x0F)>>1; //modification pour l'indicer
					c=((~(tabEnvoi[a]))-1)&0x07; //modification pour l'indicer
					toucheOK=true;
					cout<<"          "<<tabinit[b][c]<<endl; // Affichage
					Sleep(50);					// Tempo repos !
			}
		}
		if (toucheOK==true)
		{toucheOK=false;
			return (tabinit[b][c]);
    }
		else return ('_');
}
///////////////////////////////////////////////////////////////////////////////////////
//TIMAFFICH.H
//                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


// Fonction	: fonction qui permet afficher des donnes sur un ecran LCD
// Date	:	15/01/2002
// Version	: v1.0
// Variable : RS= 1/0 #1 Donnee ->0 Instruction
//			: RW= 1/0 #1 lecture ->0 Ecriture
//			: Data= 'X' 1 caracteres a afficher 


void Timaffich(unsigned char RS,unsigned char RW, unsigned char DATA);
void initAffiche();
void AfficheMess(char *Ecrit);
void ClearAffich();
////////////////////////////////////////////////////////////////////////////////////
//TIMEAFFICH.cpp
//
// fonction afficheur timing 

#include "TIMAFFICH.h"
#include <windows.h>
#include <conio.h>

#define PORTLPTRSORT 0x378		// PORTSORTIE
#define SET 0x38				// ACTIVATION
#define DISPLAYCONTROL 0x0E		
#define MODESET 0x06
#define CLEAR 0x01				// EFFACER ECRAN LCD
#define HOME 0x02				// RETOUR CURSEUR
#define INIT 0x30				// INITIALISATION
#define ALALIGN 0xC0			// RETOUR A LA LIGNE

void Timaffich(unsigned char RS,unsigned char RW, unsigned char DATA)
{ //E=0
	_outp(PORTLPTRSORT+2,RS|RW|0);
		Sleep(1);
	_outp(PORTLPTRSORT+2,RS|RW|0x04);
		Sleep(1);
	_outp(PORTLPTRSORT,DATA);	// ECRITURE 
	Sleep(1);
	//E=0;
	_outp(PORTLPTRSORT+2,(RS|RW)&0xFB);	
	 Sleep(1);  
}

////////////////////////////INITAFFICHE//////////////////////////////////////////
void initAffiche()
{
	int b;
	unsigned char tabInitLCD[9]={INIT,INIT,INIT,SET,DISPLAYCONTROL,CLEAR,HOME,MODESET};
	//INITIALISATION
	Sleep(16);
	for(b=0;b<8;b++)
	{            
		Timaffich(0x01,0x02,tabInitLCD[b]);		// Initialisation LCD
		Sleep(1);
	}
					

}
////////////////////////////////////////////////////////////////////////////////////////////
void ClearAffich()
{
	         
		Timaffich(0x01,0x02,CLEAR);		// Initialisation LCD
		Sleep(1);
	
}
////////////////////////////////AFFICHEMESS//////////////////////////////////////////////////
int alalign=0;
void AfficheMess(char *pEcrit)
{	
		if(alalign==16) Timaffich(0x01,0x02,ALALIGN);  // ECRITURE DE DONNES--*
																									// RETOUR A LA LIGNE--*
		Timaffich(0x00,0x02,(unsigned char)*pEcrit); // 'H'
		alalign++;
	  Sleep(1);
	
}
/////////////////////////////////////////////////////////////////////////////////////////
//Afficheur.cpp
////////////////////////////////////////////////////////////////////////////////////////
//					[--]________________________________[--]
//					|**************************************|
//					|*******/\/\/\/\/\/\/\/\/\/\/\/\*******|
//					|*******\**     Afficheur    **/*******|
//					|*******/**    19/12/2001    **\*******|
//					|*******\**      v1.0        **/*******|
//					|*******/**   NiChaN EaTo©   **\*******|   
//					|*******\/\/\/\/\/\/\/\/\/\/\/\/*******|
//					|**************************************|
//					¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
//                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Port : serie
// Afficheur LCD avec clavier


#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include "TIMAFFICH.H"
#include "GesClavier.h"



void main()
{
						
				char Ecrit[80]="            ";
				char * pEcriture=Ecrit;
				int j=0;
				initAffiche();
				ClearAffich();
				j=0;
				for(;;)
				{
					*pEcriture=GesClavier();		// saisie du clavier sur l'afficheur 
					if('_'!=(*pEcriture))
					{
						AfficheMess(pEcriture);
						j++;
						pEcriture++;
		//				ClearAffich();
					}
					
				}

		
}
//////////////////////////////////////////////////////////////////////////////////////			


 Conclusion

Aucun bug connu   -- ecrie par NiChaN **The EaTo© Compagny**


 Sources du même auteur

CANEVAS SERVEUR UNIX ( LINUX) V1.0
Source avec Zip PILECO FILECO -- FILE D'ATTENTE

 Sources de la même categorie

Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip Source avec une capture FAIRE GLISSER LA SOURIS par shorzy
Source avec Zip COMMUNICATION RS232 VIA PORT COM par MadMax1024
Source avec Zip Source avec une capture EXTINCTION ET REDEMARRAGE DE VOTRE MONITEUR À UNE HEURE PRÉC... par Yost
ÉTEINDRE ECRAN SOUS WINDOWS par kiki67100

Commentaires et avis

Commentaire de GoldenEye le 12/11/2002 22:19:48

C'est bien ton programme !
Question : à quoi correspond le port 0x378 ? J'aimerai y brancher un écran et ... on verra alors si ton prog marche !
Autre chose : mets le nom du compilateur (les fonctions _outp, je ne sais pas si elles sont lisibles par tous les compilos)

Commentaire de Thaeron le 12/11/2002 23:01:35

(pq mon premier commentaire c'est pô ecris ? enfin bon)
Alors 378h c'est l'addesse du port parallele, _outp c'est une fonction de borland je crois et pour Vc++ c'est _outportb (ou c'est t'etre l'inverse), mais malheuresement aucune fonction ne permet de controler les ports avec Dev-c++4 (t'etre avec le 5 chai pas).

Commentaire de TheLudo2013 le 13/11/2002 03:09:28

Un programme intéréssant pour les électroniciens !!!
Il y a tout de même un truc qui me chiffonne : le port 378h et bien le port parralèlle (on est d'accord dans la plupart des cas), mais on peut pas en être sur a 100% Il peut être a l'addresse 278h !!! Comment savoir ???? Sinon, je confirme _outp() -&gt; VC 5. et outport() -&gt; Borland...

Commentaire de TheLudo2013 le 13/11/2002 03:12:42

Au fait, j'ai oublié : il est cool ton prog, mais il manque le schema de principe pour le cablage du port paralèlle avec l'afficheur lcd (lol)...

Commentaire de MangaII le 13/11/2002 09:34:35

question a pas cher ?
comment tu fé pour faire fonctionner la fonction _outp ou _outportb (c pas le PB), sous WIN NT et win 2000 ( pour XP je c pas si ca marche ) !
Perso, j'ai encore du mal avec ca !
Si qqun a une idée, je suis preneur !!!

Par contre, pour connaitre les @ des ports //, c pas bien compliqué, y suffit d'aller voir dans la base de registre :
HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONMultiFonctionAdapter5ParallelController
Et là, sont listé tous les ports // présent !
et il y a un paramêtre nommé ConfigurationData, qui contient entre autre l'@ du port ! (a l'octet 14 ) !
Et voilà ! pour accéder a la base de registre ! j'ai déjà mis un code sur ce site ! il a juste un petit bug sous 98 ! mais si besoin je le corrigerai !
A+
NICO !

Commentaire de Thaeron le 13/11/2002 13:26:53

bhen 378h c'est dans la plupart des cas, sous win2000 l'access au port est interdit par zindoz et chai pô comment on peut l'enlever

Commentaire de NiChaN le 15/11/2002 21:46:32

l'adresse et bien 378h --lors du gestionnaire de boot - il affiche souvent l'adresse du port paralelle _ si celui ci affiche 278h alors il faut juste le modifier !
Ensuite pour info -- l'afficheur utiliser pour ce test et le SMC-1622A = UC16208 SNARO couleur background_jaune-vert chez HITACHI distribue par Selectronic _ je mettrai la documentations lorsque mon scanner remarchera (lol !
Ensuite la fonction _outp que j'ai utiliser est bien celle de VC++ 6
Ensuite cette fonction ne marche pas avec les NT car ils sont protegés _ je ne l'ai pas tester sous XP dsl !
le clavier numeriques a touches " SECME " 12 touches ::  merci pour c'est multiples messages si je encore vous etre utile ou vous expliqué qlqch _ n'hesiter pas !
*** The EaTo By NiChaN ***

Commentaire de Coralsnake le 06/01/2003 02:39:18

Merci pour ton arnaque , le net grouille de codes sources avec des outport, out et autre _outp qui ne fonctionne pas sur un system win32
a quoi ca sert de mettre des codes source inutile ?
pour ton info perso les i/o sous win32 son possible que par l'api "CreateFile "

Commentaire de NiChaN le 07/01/2003 23:32:48

Ce n'est pas du tous une arnaque vue que cela marche tres bien a conditions d'etre sur un win9x -sous nt il n'est pas possible de faire des _outp. D'ailleur pour info cette source n'a ete copier d'aucun site.
C'est le code source d'une comunication entre clavier et afficheur LCD que j'ai codee pour un TP lors de mes etudes !! Alors !
Ce code a été tester maint&maint fois et fonctionne parfaitement !
Si CORALSNAKE, tu ne sait pas les utilisée c pas de ma faute tu n'a cas me dire ce qu'il ne vas pas - car la tu raconte n'importe quoi !
Ce n'est donc pas des codes sources inutiles vu qu'il fonctionne sur les systeme win9x et pour moi c bien un win32 !
Si tu es mal informé c pas de ta faute ! la prochaine fois que tu fais des commentaires inutiles sans avoir reflechie et bien cherche ce n'est pas la peine d'ecrire !
Bon _ Bientot une mis a jour de ce code avec des affichages plus sofistiqué _ (dessiné sur un LCD )
***The EaTo By NiChaN***

Commentaire de Coralsnake le 20/01/2003 22:57:25

Tu sait Chere Nichan j'aimerais bien que ton code fonctionne sous un environnement graphique win32 , mais je persiste et signe que sous windows 9x ces fonctions de bas niveaux ne fonctionnent pas, peut etre en mode console et encore je doute et puis quel est l'interet de nos jour de programmer dans un tel environnement . Je te propose de mettre en zip un code win32 qui fasse cracher mon port parallele , le probleme c que j'en ai telecharger du code win32 tout fait avec des _outp resultat ... rien , la seule chose qui me permette d'envoyer et recevoire du signal c l'api en plus de mon experience j'ai lu aussi

Commentaire de froli le 27/08/2003 17:31:00

En fait, ce code ne fonctionne que si les applications qui l'utilisent ont  été compilés en appli 16 bits (DOS ou win16), il faut le préciser dans les options de compilations : "win16" (je ne sais plus ou cela se trouve).
Sinon, pour acceder aux ports séries du PC avec une appli win32, il faut passer par CreateFile, WriteFile, ReadFile, etc...

Commentaire de exterminabur le 09/03/2004 16:25:34

salut à tous
j'ai créé une source pour faire marcher les fonctions _inp et _outp sous win xp
donc vous pourrez utiliser ce prog avec mon source: http://www.cppfrance.com/code.aspx?ID=21060
voila
sinon bravo pour le prog
@+
exterminabur

Commentaire de NiChaN le 15/03/2004 20:45:50

Merci ;-)
Je develop actuellement une source pour utilisé E-mule avec une JukeBox materiel !
--En attendant que tous fonctionne ; @+

Commentaire de djmoa le 01/04/2008 14:11:55

salut. bon, le post est mort depuis longtemps, ce que tu as fait est sympa, mais bon le titre... t aurai pu mettre 7 segments plutot que LCD... c est un peu plus complique les ecrans multicaracteres, ou meme graphique (gestion de protocole, il s agit pas d afficher juste un octet en sortie)
c est bien pour ceux qui veullent debuter avec le port parallele, mais t as oublié qqch qui est aussi important que le code... le schema !!! bon, je t en veut pas, je croi que sur ma source (ecran LCD 4/20 characteres), je l ai pas mi non plus... il faudrai les publier !

Commentaire de Coralsnake le 05/04/2008 11:10:55

mais non un post n'est jamais mort

Commentaire de djmoa le 07/04/2008 10:42:39

j avais mal vu... c est peut etre bien pour un lcd ...

Commentaire de NiChaN le 07/04/2008 10:59:36

C'est un afficheur LCD 7segments.. comme je l'ai déjà ecris dans le commentaire de la source.
L'afficheur est un SMC-1622A = UC16208 SNARO couleur jaune-vert chez HITACHI n'est plus distribué par Selectronic.


 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 0,811 sec (4)

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