Après le message intéressant de AchileT, sur les champs de bits et les structures, j'ai voulus approfondir mes maigres connaissances sur le sujet . Par la même occasion je me suis dis pour quoi pas utiliser le LCD série qui est sur la carte Easypic, histoire d'apprendre 2 choses en même temps. et finir par un tuto !.
Oui mais voila, je comprends déjà pas le LCD serie avec MikroC ?
Ça m'aurais parus plus simple après le LCD en I²C . et ben non .
Mon but premier était de créer un affichage du reflet des sorties du PORTC En appuyant sur les BP respectifs du PORTD. Donc afficher huit "0" quand toutes les sorties du PORTC sont à 0. Si il y à un appui sur un BP du PORTD cela change la valeur de sortie en "1" et je le vois changer aussi à l'écran . Tout ça afin de simuler des Tout ou Rien, pour travailler sur les structures.
J’espère avoir été assez explicite dans le but final .
Oui mais voila rien ne se passe comme prévu.
Surtout pour la longueur de l'affichage . Voici un programme avec seulement 2 BP au lieu de 8. Mais mon affichage se fait sur 4 caractères, donc j'efface les chiffres avant car je ré-écris dessus .
Je n'ai pas trouvé de recette miracle pour n'afficher qu'un seul caractère ?
Ça doit vous paraitre bête mais j'ai cherché un moment !
Je programme avec MikroC sur un PIC 18F45K22 (datasheet)
Le schéma de la carte Easypic7 se trouve ici : Lien
Code : Tout sélectionner
/*##################################################################################
############################## Variable / Constante #########################
##################################################################################*/
char BP0,BP1;
char *text[4];
// Connexions du module LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// FIN Connexions du module LCD
/*##################################################################################
############################ PROGRAMME PRINCIPAL ##############################
##################################################################################*/
void main(){
ANSELB = 0; // Configure le PORTB en digital
TRISB = 0b00000000; // Configure le PORTB en Sortie
LATB = 0; // Initialise à 0
ANSELC = 0; // Configure le PORTC en digital
TRISC = 0b00000000; // Configure le PORTC en Sortie
LATC = 0; // Initialise à 0
ANSELD = 0; // Configure le PORTD en digital
TRISD = 0b11111111; // Configure le PORTD en Entrée
LATD = 0; // Initialise à 0
Lcd_Init(); // Initialisation du LCD
Lcd_Cmd(_LCD_CLEAR); // On efface l'écran
Lcd_Cmd(_LCD_CURSOR_OFF); // On arrête le curseur
delay_ms(500); // pause de 500ms
Lcd_Out(2,1,"7 6 5 4 3 2 1 0"); // Affichage du numéro des BP sur la ligne du bas
BP0 = 0;
//########################## BOUCLE INFINIE ##################################
while(1) { // boucle sans fin
if (PORTD.B0 == 1){ // Détection d'appui sur un BP
delay_ms(30);
if (PORTD.B0 == 1){
while (PORTD.B0 == 1); // Anti-rebond
PORTC.B0 = ~PORTC.B0 ; // On inverse la sortie si l'Appui est validé
BP0 = PORTC.B0; // On affecte l'état de la sortie à une variable
ByteToStr (BP0,text); // On convertie la variable en string pour affichage
Lcd_Out(1,13,text) ; // On affiche notre valeur
}
}
if (PORTD.B1 == 1){ // Même procédé mais avec le BP1
delay_ms(30);
if (PORTD.B1 == 1){
while (PORTD.B1 == 1);
PORTC.B1 = ~PORTC.B1 ;
BP1 = PORTC.B1;
ByteToStr (BP1,text);
Lcd_Out(1,11,text) ;
}
}
}
}


