Soyez le premier à donner votre avis sur cette source.
Snippet vu 12 794 fois - Téléchargée 18 fois
#define Start PORTA.F0 #define Arret PORTA.F1 #define Reset PORTA.F2 #define Write PORTA.F3 #define Read PORTA.F6 sbit LCD_RS at RB0_bit; sbit LCD_EN at RB1_bit; sbit LCD_D4 at RB2_bit; sbit LCD_D5 at RB3_bit; sbit LCD_D6 at RB4_bit; sbit LCD_D7 at RB5_bit; sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB4_bit; sbit LCD_D7_Direction at TRISB5_bit; char Message1[] = "Chronometre"; char Message2[] = ":"; char Message3[] = "."; char *Heure = "00"; char *Minute = "00"; char *Seconde = "00"; char *Cent = "00"; char Buffer[10]; char H = 0; char M = 0; char S = 0; int Centi = 0; char counter0 = 0; char flag0 = 0; unsigned int counter = 0; char flag1 = 0; char N_Centi; char N_Seconde; char N_Minute; char N_Heure; void InitTimer1(); void Init_PIC(); void Affiche_Txt_LCD(); void Chronometre(); void Calcul_Chrono(); void Affichage_Chrono(); void Write_EEPROM(); void Read_EEPROM(); void main() { Init_PIC(); Affiche_Txt_LCD(); InitTimer1(); N_Centi = EEPROM_Read(0x00); N_Seconde = EEPROM_Read(0x01); N_Minute = EEPROM_Read(0x02); N_Heure = EEPROM_Read(0x03); while(1) { Chronometre(); Write_EEPROM(); Read_EEPROM(); } } void Init_PIC() { TRISA = 0xFF; TRISB = 0x00; PORTA = 0x00; PORTB = 0x00; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); } void InitTimer1() { T1CON = 0x01; TMR1IF_bit = 0; TMR1H = 0xD8; TMR1L = 0xF0; TMR1IE_bit = 1; INTCON = 0xC0; } void Affiche_Txt_LCD() { Lcd_Out(1,3,Message1); Lcd_Out(2,4,heure); Lcd_Out(2,6,Message2); Lcd_Out(2,7,Minute); Lcd_Out(2,9,Message2); Lcd_Out(2,10,Seconde); Lcd_Out(2,12,Message3); Lcd_Out(2,13,Cent); } void Interrupt() { if (TMR1IF_bit) { TMR1IF_bit = 0; TMR1H = 0xD8; TMR1L = 0xF0; counter0++; counter++; if (counter0 == 1) { flag0 = 1; counter0 = 0; } if ( counter == 100) { flag1 = 1; counter = 0; } } } void Chronometre() { // Start if (Start) { delay_ms(300); do { if (flag0 == 1) { centi++; Cent[0] = (Centi / 10 )% 10 + 48 ; Cent[1] = Centi % 10 + 48 ; Lcd_out(2, 13, Cent); if (centi >= 99) centi = 0; flag0 = 0; } if (flag1 == 1) { S++; Seconde[0] = (S / 10 )% 10 + 48 ; Seconde[1] = S % 10 + 48 ; Lcd_out(2, 10, Seconde); if (S > 59) { S = 0; M++; Minute[0] = (M / 10 )% 10 + 48 ; Minute[1] = M % 10 + 48 ; Lcd_out(2, 7, Minute); if (M > 59 ) { M = 0; H++; Heure[0] = (H / 10 )% 10 + 48 ; Heure[1] = H % 10 + 48 ; Lcd_out(2, 4, Heure); } } flag1 = 0; } } while(!Reset && !Arret); if (Arret) { Calcul_Chrono(); Affichage_Chrono(); } // Reset if (Reset) { S = 0; M = 0; H = 0; Centi = 0; Calcul_Chrono(); Affichage_Chrono(); } } } void Calcul_Chrono() { Cent[0] = (Centi / 10 )% 10 + 48 ; Cent[1] = Centi % 10 + 48 ; Seconde[0] = (S / 10 )% 10 + 48 ; Seconde[1] = S % 10 + 48 ; Minute[0] = (M / 10 )% 10 + 48 ; Minute[1] = M % 10 + 48 ; Heure[0] = (H / 10 )% 10 + 48 ; Heure[1] = H % 10 + 48 ; } void Affichage_Chrono() { Lcd_out(2, 13, Cent); Lcd_out(2, 10, Seconde); Lcd_out(2, 7, Minute); Lcd_out(2, 4, Heure); } void Write_EEPROM() { if (!Start && !Arret && Write) { EEPROM_Write(0x00, Centi); delay_ms(10); EEPROM_Write(0x01, S); delay_ms(10); EEPROM_Write(0x02, M); delay_ms(10); EEPROM_Write(0x03, H); delay_ms(10); } } void Read_EEPROM(){ if (!Start && !Arret && !Arret && Read){ delay_ms(300); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_out(1, 1, "Meilleur score"); Lcd_Out(2,6,Message2); Lcd_Out(2,9,Message2); Lcd_Out(2,12,Message3); N_Centi = EEPROM_Read(0x00); N_Seconde = EEPROM_Read(0x01); N_Minute = EEPROM_Read(0x02); N_Heure = EEPROM_Read(0x03); Cent[0] = (N_Centi / 10 )% 10 + 48 ; Cent[1] = N_Centi % 10 + 48 ; Seconde[0] = (N_Seconde / 10 )% 10 + 48 ; Seconde[1] = N_Seconde % 10 + 48 ; Minute[0] = ( N_Minute / 10 )% 10 + 48 ; Minute[1] = N_Minute % 10 + 48 ; Heure[0] = (N_Heure / 10 )% 10 + 48 ; Heure[1] = N_Heure % 10 + 48 ; Affichage_Chrono(); delay_ms(3000); }
12 juil. 2014 à 21:37
Normal que ca ne fonctionne, le code a été écrit sous le compilateur Mikroc. Il faudrait penser à faire quelques changements au niveau de la syntaxe de votre compilo mais le mieux serait de le compiler directement sous Mikroc disponible gratuitement avec une limitation de la mémoire programme de 2 Ko ce qui laisse largement de la place
14 avril 2014 à 11:16
Des que je compile, j'obtiens :
sbit LCD_RS at RB0_bit;
^------
Error[1] C:\Users\laurent\Desktop\16f628a\LCD.c 7 : Syntax error (or limitation)
(CC5X is unable to compile the expression due to syntax error or
limited C support. Code correction is required. Check also for
unbalanced block delimiters '{ .. }' in previous statements)
Si vous avez une solution, je suis preneur.
Désolé de deterrer ce post.
15 nov. 2013 à 16:19
15 nov. 2013 à 16:07
Cela manque cruellement de commentaires...Genre sur les "magic numbers"...
Peux-tu y remédier s'il te plaît?
15 nov. 2013 à 15:35
Possibilité d'arrêter la minuterie
Remettre à 0
Sauvegarder dans l'EEPROM
Lire
Précis à la microseconde telle un vrai chronomètre
Affichage sur afficheur LCD Alphanumérique 2*16.
Possibilité d'améliorer la précision (bien que très précise déja) par l'ajout de routine en assembleur
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.