Ciao,
Quello che hai osservato e' corretto.
In particolare la necessita' della conversione discende dal fatto che il dato finale, ovvero l'orario deve essere trasformato in stringa ASCII da poter visualizzare sul display LCD, che accetta appunto caratteri ASCII.
L'orario proveniente dal PCF8563 viene fornito in forma BCD, quindi in un byte ci sono due cifre che devono ognuna essere convertita in ASCII.
Per fare questo faccio uso delle maschere per mezzo della porta AND.
In particolare per prendere i quattro digit meno significativi faccio una AND con 0x0F che in binario e' 0b00001111.
Il valore che rimane e' ancora BCD. Supponiamo che sia 6, ovvero 0x06 o 0b00000110.
Questo valore non si puo' scrivere direttamente sul display visto che il carattere ASCII di 6 corrisponde a 54 decimale e non 6 decimale. Per fare la conversione basta sommare un offset di 48 che rappresenta il valore 0 in ASCII.
Sommare 48 permette dunque di trasformare il contenuto numerico BCD del registro in ASCII.
In modo analogo si fanno conversioni ASCII da maiuscola a minuscola, ovvero conoscendo la distanza tra i caratteri a e A all'interno della tabella ASCII.
Saluti,
Mauro