Source_ pour afficheur lcd et clavier matrice

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

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.