FORUM Syndrome-OC - Jacky-PC


  Programmation


  Microcontrolleur &co


  pouvez-vous me dire si ca va marcher?

 




Il y a 29 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pouvez-vous me dire si ca va marcher?

n°2520
bool@y
--
Posté le 09-04-2004 à 12:42:40  profilanswer
 

Salut tt le monde!
N'ayant quasiemtn aucunes connaissances en programmation, j'ai repris des bouts de code d'un peu partout (dont le topic de Dr.Lous, merci à lui) et ai tenté un mixage de façon à controller l'affichage d'un LCD suivant quelle touche est pressée sur un clavier 3*4.
http://angeliz.free.fr/electro/44780/44780.gif
voilà le schéma côté LCD
http://angeliz.free.fr/electro/clavier/clavier_pic.gif
Et le schéma côté clavier.
L'adaptation ne devrait poser aucun problèmes.
Ou ca se complique, c'est le code source. J'ai tenté ca:

Code :
  1. #include<pic1687x.h> // fichier du pic16F876   
  2. #include "lcdspi.h"  // fichier du lcd HD 44780   
  3.  
  4. void Message_Lcd(const char* texte); // fonction de transfert, d'un message vers lcd   
  5. static void interrupt horloge(void); // Fonction d'interruption tempo
  6. char Touche_Clavier(void); // Fonction lecture touche clavier
  7. void Traitement_Touche_Clavier(void); // Analyse de la touche
  8. bit bSignal,bRep;
  9. unsigned char cCompter,cT,cA,a,cTouche;
  10.  
  11. #define C3 RB7 // D
  12. #define C2 RB6 // E
  13. #define C1 RB5 // F
  14. #define L4 RB4 // G
  15. #define L3 RB3 // H
  16. #define L2 RB2 // J
  17. #define L1 RB1 // k
  18. /************* debut du main *************************/
  19.    main()
  20.    {
  21.              
  22. TRISC=0;   // portC pour lcd 44780   
  23. OPTION=0b10000101; // initialise TMR0 pas de 64µs  
  24.    
  25. Ini_Lcd();   // Initialisation lcd     
  26.          
  27. Efface_LCD();
  28. Ligne_LCD(1); 
  29. Message_Lcd("You are a Geek" );
  30. Ligne_LCD(2);
  31. Message_Lcd("Yes ! You are a geek" );
  32. while(1); 
  33.      
  34. GIE=1; PEIE=1; // valide toutes les interruptions périphériques
  35. OPTION=0b10000101; // initialise TMR0 pas de 64µs
  36. RBPU=0;  // tirage vers le haut resistance portB
  37. TRISB=0b11100000; // Cx Entrée,  Lx en sortie, port B  
  38. PORTB=255; // place les lignes Lx a 1  
  39. bRep=0;  // Bit anti répétition touche clavier
  40. bSignal=0;  // Signal tempo lecture clavier   
  41.  
  42. T0IE=1;  //activation interruption débordement timer 0       
  43. while(1) // boucle infinie principale
  44. {
  45. if (bSignal)Traitement_Touche_Clavier();    
  46. }
  47. }
  48. /************* fin du main *************************/
  49.    
  50. void Message_Lcd(const char* texte)    // écriture d'une chaine de caractère  
  51. {
  52. char cCount=0;
  53.  while (texte[cCount] != 0 )     
  54. wr_Lcd(texte[cCount++],1);
  55.     }
  56.  
  57. char Touche_Clavier(void)
  58.  { 
  59. a=1;
  60. for(cT=1;cT<=4;cT++)
  61.  {
  62.  if(cT==1) L1=0;
  63.  if(cT==2) L2=0;
  64.  if(cT==3) L3=0;
  65.  if(cT==4) L4=0;
  66.   
  67.  if (!C1) return(a);
  68.  if (!C2) return(a+1);
  69.  if (!C3) return(a+2);
  70.  PORTB=255;
  71.  a+=3;
  72.  }
  73. bRep=0;
  74. return (0);
  75. }
  76. void Traitement_Touche_Clavier(void)
  77. {
  78. cTouche=Touche_Clavier();   
  79.      
  80. // si bRep=1 (répétition touche) ou si cTouche=0 (pas d'action clavier)  
  81. // on sort de la routine sans traitement avec return
  82. if((bRep) || (!cTouche))return;
  83. if(cTouche==1)
  84. {
  85. Efface_LCD();
  86. Ligne_LCD(1);
  87. Message_Lcd("message1" );
  88. }
  89. if(cTouche==2)
  90. {
  91. Efface_LCD();
  92. Ligne_LCD(2);
  93. Message_Lcd("message2" );
  94. }
  95. if(cTouche==3)
  96. {
  97. Efface_LCD();
  98. Ligne_LCD(1);
  99. Message_Lcd("message3" );
  100. }
  101. bRep=1; // place 1 pour indiquer qu'une touche est actionné  
  102. bSignal=0;
  103. cCompter=0;
  104. }
  105. static void interrupt horloge()
  106.  {
  107. if(T0IF)
  108.  {
  109.  // En fin de temporisation d'une durée de 32 ms  
  110.  // bSignal passe à 1     
  111.  if(cCompter<=2) cCompter++;    
  112.   else bSignal=1;     
  113.  T0IF=0;  //On passe le bit d'interruption à 0
  114.  }
  115. }


Quelqu'un pourrait me dire si ca va fonctionner svp?
   
     
 


---------------
   
 
mood
Google
Posté le 09-04-2004 à 12:42:40  profilanswer
 

n°2521
CryoGen
Powered by kitkat©
Posté le 09-04-2004 à 15:48:31  profilanswer
 

Y'a un while(1) en trop je pense , juste apres le Message_lcd

n°2522
bool@y
--
Posté le 09-04-2004 à 17:22:38  profilanswer
 

C tout!!! je pensais pas qu'il y aurait si peu d'erreurs!!
Merci de ton aide :jap:


---------------
   
 
n°2530
bool@y
--
Posté le 10-04-2004 à 13:18:52  profilanswer
 

Si je jicle le while(1), ca va marcher?


---------------
   
 
n°2537
Deadog
Dain Bramaged
Posté le 10-04-2004 à 14:48:14  profilanswer
 

on est pas des émulateurs, on peux pas te le dire, teste pis tu veras [:spamafote]

n°2538
bool@y
--
Posté le 10-04-2004 à 14:54:04  profilanswer
 

ok, verrais ça dès que j'aurais les composants nécessaires pour le programmateur...


---------------
   
 
mood
Google
Posté le 10-04-2004 à 14:54:04  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Microcontrolleur &co


  pouvez-vous me dire si ca va marcher?

 

Hit Parade