void init_port();
void out_data(char);
void out_control(char);
void delay_ms(volatile long);
void lcd_control_write();
void init_lcd();
void write_data(char);
void write_string(char *);
void setup() {
init_port();
init_lcd();
write_string("Welcome");
}
void loop() {
}
void init_port() {
volatile char *dir_f = (char*)0x30;
volatile char *dir_k = (char*)0x107;
*dir_f = 0xFF;
*dir_k = 0x03;
}
void out_data(char output_data) {
volatile char *out_f = (char*)0x31;
*out_f = output_data;
}
void out_control(char output_data) {
volatile char *out_k = (char*)0x108;
*out_k = output_data;
}
void delay_ms(volatile long timer_ms) {
volatile long j;
for (j = 0; j < timer_ms * 428; j++);
}
void lcd_control_write() {
out_control(0x01);
delay_ms(3);
out_control(0x00);
delay_ms(3);
}
void init_lcd() {
out_data(0x3F); // 8 bit 2 line
lcd_control_write();
out_data(0x0F); // Display ON - OFF Control
lcd_control_write();
for (char i = 0; i < 4; i++) {
out_data(0x14); // Display Shift
lcd_control_write();
}
}
void write_data(char wr_data) {
out_data(wr_data);
out_control(0x02); // register select
delay_ms(3);
out_control(0x03); // enable signal
delay_ms(3);
out_control(0x02); // register select
}
void write_string(char *ptr) {
while (*ptr != 0) {
write_data(*ptr);
ptr++;
}
}