#include <8051.h>
#include <string.h>

#define USE_ASSEMBLY (1)

code unsigned char nomer[12] = {0xb7, 0xd7, 0xe7,
                                0xbb, 0xdb, 0xeb,
                                0xbd, 0xdd, 0xed,
                                0xbe, 0xde, 0xee};

code unsigned char tombol[12] = "123456789*0#";

//code unsigned char Pesan1[] = {'I',' ','l','o','v','e',' ','U',0x0f};
//code unsigned char Pesan2[] = {'U',' ','l','o','v','e',' ','m','e ',0x0f};

code unsigned char Pesan1[] = "Delta Electronic";
code unsigned char Pesan2[] = "    Surabaya    ";


void Delay_5mS(void);
void Delay_50mS(void);
unsigned char bacakpd1(void);
void Serial_Out(unsigned char Data);


void initlcd(void);
void Kirim_Karakter(void);
void Posisi_Awal(void);
void GeserCursor_Kiri(void);
void GeserCursor_Kanan(void);
void GeserDisplay_Kanan(void);
void GeserDisplay_Kiri(void);
void Baris2(void);
//void KirimPesan_LCD(unsigned char* massage);
void KirimPesan_LCD(unsigned char* massage);


void main(void){
    
    initlcd();
    Posisi_Awal();
    KirimPesan_LCD(Pesan1);
    Baris2();
    KirimPesan_LCD(Pesan2);

    /*
    unsigned char i;
    initlcd();
    for (i=1;i<10;i++){
        ACC = 0x40 + i;
        Kirim_Karakter();
    }
    Baris2();
    KirimPesan_LCD(Pesan);
    GeserDisplay_Kiri();
    while(1);
    */    
}

/*
void KirimPesan_LCD(unsigned char* massage){
    unsigned int x = *massage;
    _asm
    lcall   0x05E0
    _endasm;
}
*/


void KirimPesan_LCD(unsigned char *m){
    unsigned char i;
    i = 0;
    while(i<strlen(m)){
        ACC = m[i];
        Kirim_Karakter();
        i++;
    }
}   


void initlcd(void){
    _asm
    lcall   0x05EC
    _endasm;
}

void Kirim_Karakter(void){
    _asm
    lcall   0x064A
    _endasm;    
}

void Posisi_Awal(void){
    _asm
    lcall   0x05CB
    _endasm;    
}

void GeserCursor_Kiri(void){
    _asm
    lcall   0x05D2
    _endasm;    
}

void GeserCursor_Kanan(void){
    _asm
    lcall   0x05D9
    _endasm;    
}

void GeserDisplay_Kiri(void){
    _asm
    lcall   0x05C4
    _endasm;    
}

void GeserDisplay_Kanan(void){
    _asm
    lcall   0x05BD
    _endasm;    
}

void Baris2(void){
    _asm
    lcall   0x0654
    _endasm;    
}


unsigned char bacakpd1(void){
    unsigned char temp,i;
    sbit flag;
    flag = 0;
    while (flag == 0){
        P1 = 0xff;
        temp = 0xff;
        while (temp == 0xff) temp = P1;
        i=0;
        while ((temp != nomer[i]) && (i<12)) i++;
        if (i<12) flag = 1;
    }
    Delay_50mS();
    while (P1 != 0xff);
    return (tombol[i]);
}


void Serial_Out(unsigned char Data){
    TI = 0;
    SBUF = Data;
    while (!TI);
}

void Delay_50mS(void){
    unsigned char i;
    for (i=0; i<10; i++) Delay_5mS();    
}

void Delay_5mS(void){
    unsigned char Temp;
    Temp = TMOD;
    TMOD = 0x21;
    TH0 = 0xED;
    TL0 = 0xFF;
    TR0 = 1;
    TF0 = 0;
    while (!TF0);
    TR0 = 0;
    TMOD = Temp;
}


