void init_port();
void init_LCD();
void LCD_write_control();
void out_data(char);
void out_control(char);
void delay_ms(long);
void write_data(char);
// void write_string(char*);
void setup() {
init_port();
init_LCD();
}
void loop() {
}
void init_port() {
volatile char *dir_f = (char*)0x30;
*dir_f = 0x3F;
}
void init_LCD() {
out_data(0x2); // Function set
LCD_write_control();
out_data(0x0);
LCD_write_control();
out_data(0x0); // Entry mode set
LCD_write_control();
out_data(0x6);
LCD_write_control();
out_data(0x0); // Display on/off control
LCD_write_control();
out_data(0xF);
LCD_write_control();
}
void LCD_write_control() {
out_control(0);
delay_ms(3);
out_control(0x1);
delay_ms(3);
}
void out_data(char out) {
volatile char*out_f = (char*)0x31;
*out_f = out;
}
void out_control(char control) {
volatile char*out_f = (char*)0x31;
control = control << 4;
*out_f = control;
}
void delay_ms(long time_ms) {
volatile long temp_x;
for (temp_x = 0; temp_x < time_ms * 428; temp_x++);
}
void write_data(char symbol){
out_data(symbol);
out_control(0x2); // Register Select
delay_ms(3);
out_control(0x1); // Enable signal
delay_ms(3);
}