Programmation clavier
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Programmation clavier



  1. #1
    kentin-76

    Programmation clavier


    ------

    Bonjour,


    je suis sur un projet qui consiste à afficher des données sur des afficheurs 7 segments à partir d'un clavier.
    J'ai 18 afficheurs 7 segments a commander ils sont regroupés par groupe de 2, j'arrive à afficher sur tous les afficheurs mais les chiffres sont incohérent il ne correspondent pas a ce que je tape sur mon clavier. Mon clavier également a un problème au bout de 4 chiffre tapés il ne reconnait plus les deux ligne du bas.
    C'est un clavier 4x3, je programme en langage C.
    Es que se serait un problème de programmation ?
    Merci d'avance

    -----

  2. #2
    katmai

    Re : Programmation clavier

    Salut,

    C'est pas assez précis, on pourrait avoir un schéma?

    Tu arrives a afficher des chiffres sur ton afficheur sans clavier?

    A+

  3. #3
    kentin-76

    Re : Programmation clavier

    J'arrive à afficher des chiffres sur mes afficheurs avec le clavier mais après avoir tapés 4 ou 5 chiffres il n'affiche plus ce que je demande au lieu de 7 il me met un 9 par exemple.

  4. #4
    LordBlack

    Re : Programmation clavier

    Bonjour,

    Une référence ou un schéma du clavier serait pertinent..

    Un schéma du montage aussi..

    Et pourquoi pas ton code, ça pourrait nous aider à te dire si le problème vient de là..

  5. A voir en vidéo sur Futura
  6. #5
    kentin-76

    Re : Programmation clavier

    Voici les schémas des deux cartes:
    - Carte logique gére le clavier et les afficheurs avec un pic 18F452
    -Carte affichages avec les deux afficheurs
    et voici mon programme.

    Code:
    #include	<p18f452.h> 		//Déclaration du type de PIC
    #include 	"delay.h"			//Déclaration du la bibliothèque pour la temporisation
    #include	"LCD_4BIT.h"
    #include   	"timers.h"
    
    int c,i,u,d,k,l,u1,d1,u2,d2,u3,d3,u4,d4,u5,d5,u7,d7,u8,d8;
    unsigned int clock,minutes,heures,secondes;
    
    void time(void);
    //void vecteur_IT (void);
    
    void tempo(void);
    
    void LCD (void)					
    {
    	init_lcd();							// Initialisation du LCD
    	TRISD=0;							// PortD en sortie: Afficheur lcd
    
    	Delay1KTCYx(5);						//Temporistaion
    	lcd_puts("Toshiba TEC Europe ");	//Affichage de "abcdeghijklmnop"
    	lcd_goto_xy(0,2);					// Positionnement du curseur en 2ie ligne	
    	lcd_puts("Imaging System");			//Affichage de "qrstuvwxyzABCDEF"
    	lcd_goto_xy(0,3);
    	lcd_puts("Tableau 5S");
    
    }
    
    void tempo(void)
    {
    	char j;
    	for(j=0;j<10;j++)
    		DelayMs(250);
    }	
    
    void UNIT(void)
    	{
    			if(u==0) k=0b01111110; else
    			if(u==1) k=0b00110000; else
    			if(u==2) k=0b01101101; else
    			if(u==3) k=0b01111001; else
    			if(u==4) k=0b00110011; else
    			if(u==5) k=0b01011011; else
    			if(u==6) k=0b01011111; else
    			if(u==7) k=0b01110000; else
    			if(u==8) k=0b01111111; else
    			if(u==9) k=0b01111011;
    	}
    
    
    void DIZ(void)
    	{
    			if(d==0) k=0b01111110; else
    			if(d==1) k=0b00110000; else
    			if(d==2) k=0b01101101; else
    			if(d==3) k=0b01111001; else
    			if(d==4) k=0b00110011; else
    			if(d==5) k=0b01011011; else
    			if(d==6) k=0b01011111; else
    			if(d==7) k=0b01110000; else
    			if(d==8) k=0b01111111; else
    			if(d==9) k=0b01111011;
    	}
    
    
    void RASSUR(void)
    {
    	ADCON0=6; /// PortA en Digital
    	TRISD=0;
    	PORTD=0;
    	Delay1KTCYx(300);
    	PORTD=1;
    	Delay1KTCYx(800);
    	PORTD=0;
    	
    }
    void CLK_STP(void)
    {
    PORTBbits.RB2=0;
    Delay1KTCYx(5);
    PORTBbits.RB2=1;
    Delay1KTCYx(5);
    PORTBbits.RB2=0;
    Delay1KTCYx(5);
    }
    void LE_STP16(void)
    {
    PORTBbits.RB4=0;
    Delay100TCYx(5);
    PORTBbits.RB4=1;
    Delay100TCYx(5);
    PORTBbits.RB4=0;
    Delay100TCYx(5);
    }
    void OE_STP16(void)
    {
    PORTBbits.RB1=0;
    Delay100TCYx(15);
    }
    
    void clavier(void)
    {
    
    	while(PORTBbits.RB0==0);		// Scrutation d'appui sur RB0
    		DelayMs(200); 				// Temporisation d'anti rebond de 200ms
    
    
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==0 & PORTCbits.RC1==0 & PORTCbits.RC0==0)
    			{lcd_puts("1"); //Afficahge de "touche1"
    			c=1;
    	DelayMs(200);
    			}
    	
      		else
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==0 & PORTCbits.RC1==0 & PORTCbits.RC0==1)
    			{lcd_puts("2");	//Affichage de "touche2"
    			c=2;
    	DelayMs(200);
    			}
    	 			
    				 
    		else 
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==0 & PORTCbits.RC1==1 & PORTCbits.RC0==0)
    			{lcd_puts("3");	//Affichage de "touche3"
    			c=3;
    	DelayMs(200);
    			}
    	 
    			
    		else 
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==1 & PORTCbits.RC1==0 & PORTCbits.RC0==0)
    			{lcd_puts("4");	//Affichage de "touche4"
    			c=4;
    	DelayMs(200);
    			}
    	 
    
    		else 
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==1 & PORTCbits.RC1==0 & PORTCbits.RC0==1)
    			{lcd_puts("5");	//Affichage de "touche5"
    			c=5;
    	DelayMs(200);
    			}
     
    		
    		else 
    		if (PORTCbits.RC5==0 & PORTCbits.RC2==1 & PORTCbits.RC1==1 & PORTCbits.RC0==0)
    			{lcd_puts("6");	//Affichage de "touche6"
    			c=6;
    	DelayMs(200);
    			}
    	 
    		
    		else 
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==0 & PORTCbits.RC1==0 & PORTCbits.RC0==0)
    			{lcd_puts("7");	//Affichage de "touche7"
    			c=7;
    	DelayMs(200);
    			}
     
    			
    		else
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==0 & PORTCbits.RC1==0 & PORTCbits.RC0==1)
    			{lcd_puts("8");	//Affichage de "touche8"
    			c=8;
    	DelayMs(200);
    			}
     
    			
    		else 
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==0 & PORTCbits.RC1==1 & PORTCbits.RC0==0)
    			{lcd_puts("9");	//Affichage de "touche9"
    			c=9;
    	DelayMs(200);
    			}
     
    			
    		else 
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==1 & PORTCbits.RC1==0 & PORTCbits.RC0==0)
    		{lcd_puts("Efface");
    	DelayMs(200);		//Affichage de "Efface"			
    		}	
    
    		else
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==1 & PORTCbits.RC1==0 & PORTCbits.RC0==1)
    			{lcd_puts("0");	//Affichage de "touche0" 
    			c=0;
    	DelayMs(200);
    			}
    	
    
    		else
    		if (PORTCbits.RC5==1 & PORTCbits.RC2==1 & PORTCbits.RC1==1 & PORTCbits.RC0==0)
    			{lcd_puts("Valide");	//Affichage de "Valide"
    				c=10;
    	DelayMs(200);
    			}
    	
    	
    DelayMs(200);
    }
    
    
    
    
    //**********************************************************************************//
    //							Programme Principale									//
    //**********************************************************************************//
    
    void main (void)			// Programme principale 
    {  	
    /*Initialisation des registres internes*/
    	TRISC=0b10100111;				//PORTC:RC0,RC1,RC2,RC5,RC7 en entré et RC3,RC4,RC6 en sortie	
    	TRISB=0b00000001;
    	PORTB=0b11101111;
    	init_lcd();						// Initialisation du LCD
    	TRISD=0;						// PortD en sortie: Afficheur lcd	
    
    	i=0;u=0;d=0;	
    
    	RASSUR();
    
    LCD();
    lcd_goto_xy(0,4);
    
    
    
    
    while(d<10)
    {
    
    	clavier();
    	d=c;
    	clavier();
    	u=c;
    	clavier();
    	
    		
    	LCD();
    	lcd_goto_xy(0,4);
    	
    	{
    			UNIT();
    		
    			PORTBbits.RB3=1;
    			CLK_STP();
    			PORTBbits.RB3=1;
    			CLK_STP();
    
    
    				for(i=0;i<7;i++)
    				{
    					l=k & 0b00000001;
    					if(l==0) 
    					PORTBbits.RB3=0; 
    					else
    					PORTBbits.RB3=1;
    					k=k>>1;
    					CLK_STP();
    				}
    			DIZ();
    		
    				for(i=0;i<7;i++)
    				{
    					l=k & 0b00000001;
    					if(l==0) 
    					PORTBbits.RB3=0; 
    					else
    					PORTBbits.RB3=1;
    					k=k>>1;
    					CLK_STP();
    				}
    		
    		LE_STP16();
    		OE_STP16();
    
    			Delay1KTCYx(500);
    		}
    }
    
    }
    Images attachées Images attachées
    Dernière modification par gienas ; 05/07/2013 à 10h00. Motif: Ajouté les balises code, obligatoires pour les programmes

  7. #6
    LordBlack

    Re : Programmation clavier

    Je vais regarder ça..

    As-tu tenté de forcer des chiffres sur tes afficheurs, pour t'assurer qu'ils fonctionnent correctement??..

  8. #7
    grosmatou75001

    Re : Programmation clavier

    Généralement le crossposting les modérateurs y sont assez allergiques... http://forums.futura-sciences.com/pr...n-clavier.html

  9. #8
    kentin-76

    Re : Programmation clavier

    Oui et il fonctionne tous correctement.


    Je suis désolé comme je suis nouveau je mettais tromper de section.

  10. #9
    LordBlack

    Re : Programmation clavier

    Est-ce que tu as essayé à partir de ton programme, ou en mettant des tensions directement aux bornes de l'afficheur??..

    Si tu l'as testé de ton programme, alors le problème se situe au niveau de la partie clavier, si tu ne l'a pas fais, je te conseil de le faire avant de tenter autre chose..

  11. #10
    kentin-76

    Re : Programmation clavier

    Je l'ai fait, sa fonctionne correctement sa vient donc du clavier surement la partie logiciel, mais je n'arrive pas à trouver le problème.

  12. #11
    LordBlack

    Re : Programmation clavier

    Sur ton schéma, pour le 74C922, il serait mieux que tu mettes X4 et /OE au ground, pour éviter de les laisser flottant..

    Je suis pas sur que ça va changer quelque chose, mais sait-on jamais..

  13. #12
    kentin-76

    Re : Programmation clavier

    C'est fait et sa ne marche toujours pas, mais c'est toujours plus sur. Je pense que c'est logiciel mais je n'arrive toujours pas à trouver cet erreur.

  14. #13
    cherwam07

    Re : Programmation clavier

    Salut,

    Ton code n'est pas évident à lire, mais j'ai tout de même tiké sur ce genre de chose que tu fais plusieurs fois :

    Code:
    if(l==0) 
        PORTBbits.RB3=0; 
    else
        PORTBbits.RB3=1;
        k=k>>1;
        CLK_STP();
    Es-tu bien conscient que si tu n'utilises pas d'accolade après tes if/else, ces derniers ne concernent QUE l'instruction suivante ?

    Autrement dit dans cet exemple, les insctructions :
    Code:
        k=k>>1;
        CLK_STP();
    vont être executées quelque soient le résultat du if/else...

    C'est bien le comportement que tu veux ?

  15. #14
    kentin-76

    Re : Programmation clavier

    En effet il manque les accolades mais le résultat obtenu est le bon.

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 12h34
  2. Detecter 1 touches du clavier en programmation C
    Par invite0e9d082c dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 19/03/2010, 20h38
  3. transformer un clavier AZERTY en clavier mathématique besoin d'un lien!
    Par invite47e0ec41 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 24/03/2008, 16h31
  4. Programmation clavier+PIC16F877+SAA1064
    Par invite64e12149 dans le forum Électronique
    Réponses: 0
    Dernier message: 05/03/2008, 10h09
  5. Clavier sans fil vers clavier PS/2
    Par invite213a33e8 dans le forum Électronique
    Réponses: 4
    Dernier message: 28/06/2006, 12h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.