This is my code, it's working but perhaps not perfect

Keep in mind that is my code there is also the part of code that is needed by my rtc.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WProgram.h>
#include <DS1307.h>
int rtc[7];
byte data[56];
char orario[16]; //non cambiare 16 perchè per qualche motivo non va piu' niente dopo
char dataOdierna[16];
int anno;
int changeScreen = 0;
int k = 0;
int primaAccensione = 0;
#define expander 0x20 // Address with three address pins grounded (B0100000).
// Note that the R/W bit is not part of this address.
volatile byte count = 0;
uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};
LiquidCrystal_I2C lcd(expander,8,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
void setup()
{
Wire.begin();
attachInterrupt(0, expanderInterrupt, CHANGE);
Serial.begin(9600);
lcd.init(); // initialize the lcd
lcd.noBacklight(); // accende e spegne l'uscita sul pin 12.
// lcd.backlight();
// sink current +5V------+LED-------330Rresistor------P8574pin
lcd.createChar(0, bell);
lcd.createChar(1, note);
lcd.createChar(2, clock);
lcd.createChar(3, heart);
lcd.createChar(4, duck);
lcd.createChar(5, check);
lcd.createChar(6, cross);
lcd.createChar(7, retarrow);
lcd.home();
lcd.print(" System");
lcd.setCursor(0, 1);
lcd.print(" Ready.");
delay(1000);
for(int i=0; i<9; i++) {
lcd.scrollDisplayLeft();
delay(100);
}
lcd.clear();
lcd.home();
//RTC SETUP
/*RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,26);
RTC.set(DS1307_HR,1);
RTC.set(DS1307_DOW,4);
RTC.set(DS1307_DATE,30);
RTC.set(DS1307_MTH,10);
RTC.set(DS1307_YR,9);
RTC.start();*/
for(int i=0; i<56; i++) {
RTC.set_sram_byte(65,i);
}
}
void loop()
{
RTC.get(rtc,true);
/*for(int i=0; i<7; i++)
{
Serial.println(rtc[i]);
Serial.print(" ");
}
Serial.println();*/
//rtc[0] --> secondi
//Tramite questo IF faccio lampeggiare il : per i secondi
if (rtc[0]%2) {
sprintf(orario,"%02d:%02d",rtc[2],rtc[1]); //%02d converte 9 in 09 e 32 in 32
}
else {
sprintf(orario,"%02d %02d",rtc[2],rtc[1]);
}
Serial.println(orario);
anno=rtc[6]-2000;
sprintf(dataOdierna,"%02d/%02d/%02d",rtc[4],rtc[5],anno);
if (changeScreen==0) {
lcd.setCursor(1,0);
lcd.print(orario);
lcd.setCursor(7,0);
lcd.print(2, BYTE);
lcd.setCursor(0,1);
lcd.print(dataOdierna);
}
else if (changeScreen==1) {
lcd.setCursor(0,0);
lcd.print(1, BYTE);
lcd.setCursor(1,0);
lcd.print("XX");
lcd.setCursor(4,0);
lcd.print(4, BYTE);
lcd.setCursor(5,0);
lcd.print("XX");
lcd.setCursor(0,1);
lcd.print("hcca XX");
}
if (count == 1) {
//Serial.println(expanderRead(),BIN);
count = 0;
attachInterrupt(0, expanderInterrupt, LOW);
k++;
if (primaAccensione==0) {changeScreen=0; primaAccensione++;}
else if (k==1) { changeScreen=!changeScreen; lcd.clear(); }
else if (k>1) { k=0; }
//Serial.println(k);
}
}
// display all keycodes
void displayKeyCodes(void) {
uint8_t i = 0;
while (1) {
lcd.clear();
lcd.print("Codes 0x"); lcd.print(i, HEX);
lcd.print("-0x"); lcd.print(i+8, HEX);
lcd.setCursor(0, 1);
for (int j=0; j<8; j++) {
lcd.print(i+j, BYTE);
}
i+=8;
delay(4000);
}
}
// Funzioni per interrupt da arduino
void expanderInterrupt() {
detachInterrupt(0);
count = 1;
}
void expanderWrite(byte _data ) {
Wire.beginTransmission(expander);
Wire.send(_data);
Wire.endTransmission();
}
byte expanderRead() {
byte _data;
Wire.requestFrom(expander, 1);
if(Wire.available()) {
_data = Wire.receive();
}
return _data;
}