Étape 3: Un échantillon de code source (langage C)
#include < REG2051. H >code senen_seg [10] = {0 x 81, 0xe7, 0x92, 0xa2, 0xe4, 0xa8, 0x88, 0xe3, 0 x 80, 0xa0} ;
bit key1_enter = 0, key2_enter = 0, key3_enter = 0, countdown_mark = 0, stopwatch_mark = 0, count_mark = 0, abderrahimbenzakour = 0 ;
programme d’unsigned char = 0, program_variable = 0, count_bit = 0, count = 0 ;
heure d’unsigned char = 10 minutes = 10, second = 0 ;
unsigned char delayed_hour = 22, delayed_minute = 10, delayed_second = 0 ;
unsigned char count_hour = 0, count_minute = 0, count_second = 0 ;
unsigned int count_time = 0, count_count = 0 ;
Sub retard (unsigned int t)
{
unsigned int i, j ;
pour (i = 0; i < t; i ++)
pour (j = 0; j < 10; j ++)
;
}
void time0_init(void) {}
EA = 0 ;
TR0 = 0 ;
TMOD = 0 X 02 ;
TH0 = 0 X 4 ;
TL0 = 0 X 4 ;
ET0 = 1 ;
TR0 = 1 ;
EA = 1 ;
}
public static void timer0_isr(void) interruption TF0_VECTOR à l’aide de 1
{
count_time ++ ;
Si (count_time > = 4020) {}
count_time = 0 ;
deuxième ++ ;
Si (second > = 60) {}
deuxième = 0 ;
minute ++ ;
Si (minute > = 60) {}
minute = 0 ;
heure ++ ;
Si (h > = 24) heure = 0 ;
}
}
}
Si (delayed_hour == heure & & delayed_minute == minute & & deuxième < 4) P3_7 = 0 ;
else P3_7 = 1 ;
{if(countdown_mark==1)}
count_count ++ ;
Si (count_count > = 4000 & & (count_second! = 0|count_minute! = 0|count_hour! = 0)) {}
count_count = 0 ;
count_second--;
Si (count_second > = 60) {}
count_second = 59 ;
count_minute--;
Si (count_minute > = 60) {}
count_minute = 59 ;
count_hour--;
Si (count_hour > = 100) count_hour = 99 ;
}
}
}
Si (count_second == 0 & & count_minute == 0 & & count_hour == 0 & & count_count < = 12000) P3_7 = 0 ;
else P3_7 = 1 ;
Si (count_count > = 15000) count_count = 14000 ;
}
if(stopwatch_mark==1) {count_count ++ ;
Si (count_count > = 40) {}
count_count = 0 ;
count_second ++ ;
Si (count_second > = 100) {}
count_second = 0 ;
count_minute ++ ;
Si (count_minute > = 60) {}
count_minute = 0 ;
count_hour ++ ;
Si (count_hour > = 60) count_hour = 0 ;
}
}
}
}
}
unsigned char show_key (void) {}
unsigned char x = 0, y = 0 ;
{Switch (programme)
case 0: P1 & = senen_seg [deuxième % 10] ;
rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [deuxième % 10] ;
rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ;
d’autre P1 & = senen_seg [delayed_second % 10] ;
rupture ;
case 3: si (count_bit > = 0) P1 & = senen_seg [count_second % 10] ;
d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_second % 10] ;
rupture ;
cas 5: P1 & = senen_seg [count_second % 10] ;
rupture ;
}
P3_3 = 0 ;
Delay(10) ;
{if(P3_5==0)}
key1_enter = 1 ;
Si (comte < = 254) count ++ ;
}
if(P3_4==0) key2_enter = 1 ;
if(P3_2==0) key3_enter = 1 ;
P3_3 = 1 ;
P1| = 0XFF ;
{Switch (programme)
case 0: P1 & = senen_seg [seconde/10] ;
rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [seconde/10] ;
rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ;
d’autre P1 & = senen_seg [delayed_second/10] ;
rupture ;
case 3: si (count_bit > = 1) P1 & = senen_seg [count_second/10] ;
d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_second/10] ;
rupture ;
cas 5: P1 & = senen_seg [count_second/10] ;
rupture ;
}
P3_1 = 0 ;
Delay(10) ;
P3_1 = 1 ;
P1| = 0XFF ;
{Switch (programme)
case 0: P1 & = senen_seg [minute % 10] ;
rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [minute % 10] ;
rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ;
d’autre P1 & = senen_seg [delayed_minute % 10] ;
rupture ;
case 3: si (count_bit > = 2) P1 & = senen_seg [count_minute % 10] ;
d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_minute % 10] ;
rupture ;
cas 5: P1 & = senen_seg [count_minute % 10] ;
rupture ;
}
P3_2 = 0 ;
Delay(10) ;
P3_2 = 1 ;
P1| = 0XFF ;
{Switch (programme)
case 0: P1 & = senen_seg [minute/10] ;
rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [minute/10] ;
rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ;
d’autre P1 & = senen_seg [delayed_minute/10] ;
rupture ;
case 3: si (count_bit > = 3) P1 & = senen_seg [count_minute/10] ;
d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_minute/10] ;
rupture ;
cas 5: P1 & = senen_seg [count_minute/10] ;
rupture ;
}
P3_5 = 0 ;
Delay(10) ;
P3_5 = 1 ;
P1| = 0XFF ;
{Switch (programme)
case 0: P1 & = senen_seg [heure % 10] ;
rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [heure % 10] ;
rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ;
d’autre P1 & = senen_seg [delayed_hour % 10] ;
rupture ;
case 3: si (count_bit > = 4) P1 & = senen_seg [count_hour % 10] ;
d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_hour % 10] ; rupture ;
cas 5: P1 & = senen_seg [count_hour % 10] ;
rupture ;
}
P3_0 = 0 ;
Delay(10) ;
Si (P3_4 == 1 & & key2_enter == 1) {}
x = 3 ; key2_enter = 0 ;
}
P3_0 = 1 ;
P1| = 0XFF ;
{Switch (programme)
case 0: P1 & = senen_seg [heure/10] ; rupture ;
cas 1: si (count_time > = 2000) P1 & = senen_seg [heure/10] ; rupture ;
cas 2: if(delayed_hour==24) P1 = 0xfe ; d’autre P1 & = senen_seg [delayed_hour/10] ;
rupture ;
case 3: si (count_bit > = 5) P1 & = senen_seg [count_hour/10] ; d’autre P1 = 0xff ;
rupture ;
case 4: P1 & = senen_seg [count_hour/10] ;
rupture ;
cas 5: P1 & = senen_seg [count_hour/10] ; rupture ;
}
P3_4 = 0 ;
Delay(10) ;
Si (P3_5 == 1 & & key1_enter == 1) {}
Si (comte > = 127) x = 1 ; d’autre x = 2 ; key1_enter = 0 ;
Count = 0 ;
}
Si (P3_2 == 1 & & key3_enter == 1) {}
x = 4 ;
key3_enter = 0 ;
}
P3_4 = 1 ;
P1| = 0XFF ;
Si (programme < = 1 & & count_time > = 2000) P1 & = 0xff ;
Si (programme < = 1 & & count_time < = 2000) P1 & = 0x7f ;
if(Program==2) P1 & = 0x7f ;
if(Program==3) P1 & = 0xff ;
if(Program==4) P1 & = 0x7f ;
if(Program==5) P1 & = 0xff ;
y = x ;
x = 0 ;
Return y ;
}
Sub main() {}
P1 = 0XFF ;
P3 = 0XFF ;
time0_init() ;
{while(1)}
{Switch(Program)}
case 0: {while(program==0)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 1 ;
rupture ;
}
}
rupture ;
cas 1: {while(program==1)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 2 ;
rupture ;
case 3: heure ++ ;
Si (h > = 24) heure = 0 ;
rupture ;
case 4: minute ++ ;
Si (minute > = 60) minutes = 0 ;
rupture ;
}
}
rupture ;
cas 2: {while(program==2)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 3 ;
rupture ;
case 3: delayed_hour ++ ;
Si (delayed_hour > = 25) delayed_hour = 0 ;
rupture ;
case 4: delayed_minute ++ ;
Si (delayed_minute > = 60) delayed_minute = 0 ;
rupture ;
}
}
rupture ;
case 3: {while(program==3)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 4 ;
rupture ;
case 3: count_bit ++ ;
Si (count_bit > = 7) count_bit = 0 ;
rupture ;
case 4: {switch(count_bit)}
case 0: count_second += 1 ;
rupture ;
cas 1: count_second += 10 ;
rupture ;
cas 2: count_minute += 1 ;
rupture ;
case 3: count_minute += 10 ;
rupture ;
case 4: count_hour += 1 ;
rupture ;
cas 5: count_hour += 10 ;
rupture ;
case 6: break ;
}
Si (count_hour > = 100) count_hour-= 100 ;
Si (count_minute > = 60) count_minute-= 60 ;
Si (count_second > = 60) count_second-= 60 ;
rupture ;
}
if(count_bit==6) countdown_mark = 1 ;
else countdown_mark = 0 ;
}
rupture ;
case 4: count_hour = 0 ;
count_minute = 0 ;
count_second = 0 ;
{while(Program==4)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 5 ;
rupture ;
case 3: stopwatch_mark = ~ stopwatch_mark ;
rupture ;
case 4: {if(stopwatch_mark==0)}
count_hour = 0 ;
count_minute = 0 ;
count_second = 0 ;
}
rupture ;
}
}
rupture ;
cas 5: count_hour = 0 ;
count_minute = 0 ;
count_second = 0 ;
{while(Program==5)}
{Switch(show_key())}
case 0: break ;
cas 1: programme = 0 ;
rupture ;
cas 2: programme = 0 ;
rupture ;
case 3: count_second ++ ;
Si (count_second > = 100) {}
count_second = 0 ;
count_minute ++ ;
Si (count_minute > = 100) {}
count_minute = 0 ;
count_hour ++ ;
Si (count_hour > = 100) count_hour = 0 ;
}
}
rupture ;
case 4: count_hour = 0 ;
count_minute = 0 ;
count_second = 0 ;
rupture ;
}
{if(P3_7==0)}
while(P3_7==0) show_key() ;
count_second ++ ;
Si (count_second > = 100) {}
count_second = 0 ;
count_minute ++ ;
Si (count_minute > = 100) {}
count_minute = 0 ;