void init_program(void);
void out_data(int);
void out_con(int);
void delay1(int);
void write_data(char);
void lcd_init(void);
void lcd_control(void);
void write_string(char *ptr);
void switch_in(int);
int switch_out();
//Global Declaration:
char arr[4][4] = { {'1','2','3','+'},{'4','5','6','-'},
{'7','8','9','*'},{'D','0','=','/'}};
void setup()
{
init_program();
lcd_init();
volatile long j, value;
for(int i=0; i<4; i++)
{
switch_in(1<<i);
value = switch_out();
if(value != 0)
{
write_string(arr[value][1<<i]);
for(j=0; j<100000; j++);
}
}
}
void write_string(char *ptr)
{
while (*ptr != '\0')
{
write_data(*ptr);
ptr++;
}
}
void write_data(char wr_data)
{
out_data(wr_data);
out_con(0x02); // RS = 1, E = 0
delay1(1);
out_con(0x03); // RS = 1, E = 1
delay1(1);
out_con(0x02); // RS = 1, E = 0
delay1(1);
}
void init_program()
{
volatile char *dir_A = (char *) 0x21;
*dir_A = 0xFF;
volatile char *dir_C = (char *) 0x27;
*dir_C = 0x03;
volatile char *dir_F = (char *) 0x30;
*dir_F = 0x0F;
volatile char *dir_K = (char *) 0x107;
*dir_K = 0x00;
}
void out_data(int out_data)
{
volatile char *out_A = (char *) 0x22;
*out_A = out_data;
}
void out_con(int con_data)
{
volatile char *out_C = (char *) 0x28;
*out_C = con_data;
}
void switch_in(int data)
{
volatile char *out_F = (char *) 0x28;
*out_F = data;
}
int switch_out()
{
volatile char *in_K = (char *) 0x28;
return *in_K;
}
void delay1(int delay_data)
{
volatile long j;
while (delay_data != 0)
{
for (j = 0; j < 100000; j++);
delay_data--;
}
}
void lcd_control(void)
{
out_con(0x01); // RW = 0, E = 0
delay1(1);
out_con(0x00); // RW = 0, E = 0
delay1(1);
}
void lcd_init(void)
{
out_data(0x38); // Function Set
lcd_control();
out_data(0x0F); // Display On
lcd_control();
out_data(0x01); // Clear Display
lcd_control();
out_data(0x06); // Entry Mode Set
lcd_control();
}
void loop()
{
// I not to use loop function...
}