Bonjour,
je voudrais que vous me guidiez vers une fonction de type "boutton" pour le microcontrôleur de type PIC (16F722).
J'ai utiliser ceci avec mikroélectronika, mais ça ne va pas en fait. C'est à dire que la variable "menu_principal" ne s'incrémente pas!
Pouvez-vous m'aider?
Merci à vous
L'afficheur LCD fonctionne nikel! Sauf que le texte qui doit y être écrit ne se modifie pas.Code:// LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_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; // End LCD module connections char txt1[] = "OPEN - FIRE"; char txt2[] = "MSTK CORPORATION"; char txt3[] = "MODE ON"; char txt4[] = "MODE OFF"; char txt5[] = "MODE TIMING"; char txt6[] = "Allume"; char txt7[] = "Eteind"; char txt8[] = "Temporise"; char txt9[] = "Arret"; char txt10[]= "Tourne"; char txt11[]= "OK -> demarrer"; char txt12[]= "OK -> arreter"; char menu_principal = 1; char nb_total_menu = 4; char oldstate_menu = 0; void main() { ANSELA = 0; ANSELB = 0; ANSELD = 0; // SET AN IND as difital TRISD0_bit = 0; // set RD0 pin as input Lcd_Init(); // Initialize LCD Sound_Init(&PORTE, 2); // Initialize Sound Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,4,txt1); // Write text in first row Lcd_Out(2,1,txt2); // Write text in second row Delay_ms(3000); if (Button(&PORTD, 0, 1, 1) && oldstate_menu == 0) // Detect logical one { oldstate_menu = 1; // Update flag if (oldstate_menu == 1 && Button(&PORTD, 0, 1, 0)) { menu_principal += 1; if (menu_principal == nb_total_menu) menu_principal = 1; oldstate_menu = 0; // Update flag } } switch(menu_principal) { case 1 : // mode OFF Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1,5,txt4); // MODE OFF Lcd_Out(2,3,txt12); // OK pour arreter break; case 2 : Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1,5,txt3); // MODE ON Lcd_Out(2,3,txt12); // OK pour arreter break; case 3 : Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Out(1,4,txt5); // MODE Timing Lcd_Out(2,2,txt12); // OK pour arreter break; } } // fin du programme
Merci de votre aide.
-----