Source_ pour afficheur lcd et clavier matrice

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 616 fois - Téléchargée 38 fois

Contenu du snippet

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 / Exemple :


//					[--]________________________________[--]
//					|**************************************|
//					|*******/\/\/\/\/\/\/\/\/\/\/\/\*******|
//					|*******\**    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**

A voir également

Ajouter un commentaire

Commentaires

cs_NiChaN
Messages postés
27
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
29 décembre 2008

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.
djmoa
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

j avais mal vu... c est peut etre bien pour un lcd ...
Coralsnake
Messages postés
13
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
7 octobre 2009

mais non un post n'est jamais mort
djmoa
Messages postés
39
Date d'inscription
mercredi 6 octobre 2004
Statut
Membre
Dernière intervention
27 mai 2009

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 !
cs_NiChaN
Messages postés
27
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
29 décembre 2008

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.