51 Programa de cuenta atrás del tubo digital del microcontrolador, cuenta atrás desde 999999, se completa la interrupción del temporizador T1
#define uchar unsigned char
código uchar ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f .0x6f,0x40};//0-9
uchar sec=0,min=0,hora;
uchar tiempo;
uchar disdat[6 ];
retraso nulo (unsigned int x)
{
unsigned int i,j;
for(i=0; i for(j=0;j<120;j++); } disdat[1]=sec/10; disdat[2]=min%10; disdat[3]=min/10; disdat[4]=hora%10; p> disdat[3]=min/10; disdat[4]=hora%10; disdat[5]=hora/10; p> } void t0isr() interrupción 1 // segundo temporizador { TH0=0x3c; TL0=0xb0; tiempo++; if(tiempo==20) { tiempo=0; si(sec>0)seg--; si no(min>0){sec= 99; min--;} si no( hora>0){sec=99;min=99;hora--;} } dischg() } void t1isr() interrupción 3 //mostrar { TH1=0xec; TL1=0x78; cambiar( escaneado) { caso 0: P2=0x20; P0=~ledtab[disdat[5]] ; rotura; caso 1: P2=0x10; P0=~ledtab[disdat[4]]; rotura; caso 2: P2=0x08; P0=~ledtab[disdat[3]]; rotura; caso 3: P2=0x04; P0 =~ledtab[disdat[2]]; break; caso 4: P2=0x02; P0=~ ledtab[disdat[1]]; romper; caso 5: P2=0x01; P0=~ledtab[ disdat[0 ]]; romper; predeterminado: pausa; } escaneado++; escaneado%=6; } p> principal() { TMOD=0x11 TH0 =0x3c; TL0=0xb0; TH1=0xec; TL1=0x78; TR1=1; TR0=0; ET0=1; ET1=1; EA=1; fmq=0; escaneado=0; tiempo=0; modo=1; dischg(); mientras(1) { if(keyhu ==0) { mientras (keyhu==0); TR0=0; hora++; hora%=24; } if(keyhd==0) { mientras(keyhd= =0); TR0=0; si(hora>0)hora--; if(hora==0)hora=23; } if(keymu==0) { mientras(keymu==0); TR0= 0; mín ++; mín%=60; } if(keymd==0) { mientras(keymd==0); TR0=0; if(min>0)min--; p> if(min==0 )min=59; } if(keysu==0) { mientras(keysu==0); TR0=0; seg++; seg%=60; } if(keysd==0) { mientras(keysd==0); TR0=0; si(sec>0)seg--; if(sec==0)sec=59; } si (keyst==0) Si(keyst==0) { mientras(keyst==0); TR0=~TR0; } dischg(); } } } p> } }