Jednoduchá "Minutka" - zpětný minutový čítač. Když Vám lepší polovička naštvaně oznámí , že se ten “krám“ (stará dvacetiletá kuchyňská minutka) definitivně odebral do věčných lovišť, a že by jste už konečně mohl dělat něco užitečného, než se jen toulat po Internetu, máte krásnou možnost předvést své dlouho skrývané schopnosti.



Ale vážně. Program je odladěn v C51v6.2 a je natolik jednoduchý, že nepotřebuje žádný další komentář. V praxi je vhodné vše částečně modifikovat - tlačítko START vypustit, tlačítko UP nahradit "jogdialem" a odpočet spustit ihned po nastavení proměnné MIN na hodnotu větší než 0. Funkce pak bude přesně odpovídat staré minutce, a Vy si ušetříte pár hodin soustavného vysvětlování "Jak že se to ovládá".
:-?

#include <AT89x051.H>static char numbers[10]= {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE4,0xFE,0xF6};

char  COUNT;
char  SEC;
char  MIN;
char  SMIN;
bit   DP;
bit   out;
bit   BLINK;

sbit  segl    = P3^0;
sbit  segr    = P3^1;
sbit  beep    = P3^7;
sbit  sstart  = P3^2;
sbit  ssmin   = P3^3;

//=====================================
//  Delay
//=====================================
void delay(){
  char i,j,k;
  for (k=0;k<5;k++)
    for (j=0;j<100;j++)
      for (i=0;i<100;i++);
}


//=====================================
//  Timer 0 interrupt
//=====================================
timer() interrupt 1 {
  TH0=0xB1;
  TL0=0xE6;
  if (COUNT==21) DP=0;
  if (++COUNT==49) {
    DP=1;
    COUNT=0;
    if (++SEC==60) {
      SEC=0;
      if (MIN) MIN--;
    }
  }
}

//=====================================
//  Timer 1 interrupt
//=====================================
refresh() interrupt 3 {
  TH1=0xEC;
  TL1=0x78;
  segl^=1;
  segr^=1;

  if (!BLINK) {
    if (segl==1) P1= numbers[MIN / 10]^DP^0xFF;
    else         P1= numbers[MIN % 10]^DP^0xFF;
  }
  else P1=0xFF;
}

//=====================================
//  Main Loop
//=====================================
void main(void){
  register unsigned char j,i;

  DP=1;
  segl=0;
  segr=1;
  beep=1;
  out=1;
  BLINK=0;

  COUNT=SEC=0;
  MIN=0;
  SMIN=MIN;

  TMOD=0x11;
  TH0=0xB1;
  TL0=0xE6;
  TH1=0xEC;
  TL1=0x78;
  IE=0x8A;
  TR0=0;
  TR1=1;

  // test buttons
  do {
    //  stop timer
    if ((TR0==1)&&(!MIN)) {
      TR0=0;
      out=1;

      for (j=0;j<40;j++){
        BLINK=0;
        beep=0;
        for (i=0;i<6;i++) {
          if ((!sstart) || (!ssmin)) break;
          delay();
        }
        beep=1;
        BLINK=1;
        for (i=0;i<3;i++) {
          if ((!sstart) || (!ssmin)) break;
          delay();
        }
      }
      MIN=SMIN;BLINK=0;
      while (!ssmin);
      while (!sstart);
    }

    if (!sstart) {
      delay();
      if (!sstart) {
        if ((out==1) && (MIN)) {
          SMIN=MIN;
          COUNT=SEC=0;
          out=0;
          TR0=1;
        }
        else {
          out=1;
          TR0=0;
          MIN=SMIN;
        }
        while (!sstart);
      }
    }
    if (!ssmin) {
      delay();
      if (!ssmin) {
        SEC=0;
        if (++MIN==60) MIN=0;
      }
    }
  }while (1) ;
}

Modifikováno z SW nalezeného v síti, jehož autor je neznámý