void init_port(void);
void outdata(char);
void outcontrol(char);
void delay1(int);
void lcd_control_write(void);
void init_lcd(char line1,char line2);
void write_data(char);
void setup(){
init_port();
init_lcd();
}
void loop(){
write_string_revolve();
}
//LCD initialization
void init_lcd()
{
outdata(0x38); // 8bit 2 line
lcd_control_write();
outdata(0x0c); // Display on Cursor off
lcd_control_write();
outdata(0x01); // Clear Display
lcd_control_write();
outdata(0x06);//auto increment
lcd_control_write();
}
//LCD revolving part
void write_string_revolve()
{
char line1_start,line2_end; // define ending and starting address
line1_start=0x80;
line2_end=0xcf;
//Loop through to display and revolve
for(volatile char i=0;i<28;i++)
{
outdata(line2_end);// set cursor to line2
lcd_control_write();
write_string("ECEN Academy");//display ECEN Academy at line 2 address
LCD_clear(); //Clear display
outdata(line1_start);//set cursor to line 1
lcd_control_write();
write_string("Welcome to");//display "Welcome to" at line address
LCD_clear();//Clear display
delay1();//small delay to make the changes visible
line1_start++;line2_end--;//increment and decrement line1 and line 2 address
LCD_clear();//Clear display
}
}
void write_string(char *ptr)
{
while(*ptr != 0)
{
write_data(*ptr);
ptr++;
}
}
// Initialize Port
void init_port()
{
volatile char *portf_dir = (volatile char *)0x30;
volatile char *portk_dir = (volatile char *)0x107;
*portf_dir = 0xFF;
*portk_dir = 0x03;
}
//output data to portf (pin D0 -D7)
void outdata(char out_data)
{
volatile char *portf_data = (volatile char *)0x31;
*portf_data = out_data;
}
//Enable and Register select
void outcontrol( char out_data)
{
volatile char *portk_data = (volatile char *)0x108;
*portk_data = out_data;
}
void lcd_control_write( void )
{
outcontrol(0x01);
delay(1);
outcontrol(0x00);
delay(1);
}
// display a character on LCD
void write_data(char wr_data)
{
outdata(wr_data);
outcontrol(0x02);
delay(1);
outcontrol(0x03);
delay(1);
outcontrol(0x02);
delay(1);
}
void delay1()
{
for(volatile long i =0;i<100000;i++);
}
void LCD_clear()
{
outdata(0x01);
lcd_control_write();
}