void setup() {
// put your setup code here, to run once:
volatile unsigned char *outFdrr = 0x30, *outKdrr = 0x107;
*outFdrr = 0xFF;
*outKdrr= 0xFF;
init_lcd();
}
void largeDelay(){
volatile long int i=0;
for(i=0;i<50000;i++);
}
void del(){
volatile int i=0;
for(i=0;i<50;i++);
}
void lcd_cntrl_write(){
volatile unsigned char *rw = 0x108;
*rw=0x00;
del();
*rw=0x01;
del();
*rw=0x00;
del();
}
void outcntrl(char out){
volatile unsigned char *rw = 0x108;
*rw=out;
}
void op_data(unsigned char val){
volatile unsigned char *outFd = 0x31;
*outFd = val;
}
void init_lcd() {
volatile unsigned char *outFd = 0x31;
op_data(0x38);//set function
lcd_cntrl_write();
op_data(0x0c);//display contro; cant see cursor
lcd_cntrl_write();
op_data(0x01);//clear
lcd_cntrl_write();
op_data(0x06);//entry mode
lcd_cntrl_write();
}
void out_write(char a){
op_data(a);
outcntrl(0x02);
del();
outcntrl(0x03);
del();
outcntrl(0x02);
del();
}
void setCursor(int len,boolean l1){
unsigned char base = l1?0x80:(0x80|0x40);
unsigned char addr= base+(unsigned char)(len);
op_data(addr);
lcd_cntrl_write();
}
int stringSize(char a[]){
int i=0;
for(i=0;a[i];i++);
return i;
}
void wrtString(char a[]){
for(int i=0;a[i];i++){
out_write(a[i]);
}
}
void wrtMiddle(char a[],boolean l1){
setCursor((16-stringSize(a))/2,l1);
wrtString(a);
}
void clearLine(boolean l1){
setCursor(0,l1);
for(int i=0;i<=15;i++){
out_write("\0");
}
setCursor(0,l1);
}
void spinBothTopRight(char a1[],char a2[]){
volatile boolean x= true;
while(x){
for(int i=0;i<=15;i++){
setCursor(i,true);
wrtString(a2);
setCursor(15-i,false);
wrtString(a1);
largeDelay();
clearLine(true);
clearLine(false);
}
break;
}
}
void spinBothTopLeft(char a1[],char a2[]){
volatile boolean x= true;
while(x){
for(int i=0;i<=15;i++){
setCursor(15-i,true);
wrtString(a2);
setCursor(i,false);
wrtString(a1);
largeDelay();
clearLine(true);
clearLine(false);
}
break;
}
}
void loop() {
// put your main code here, to run repeatedly
spinBothTopRight("ECEN academy","WELCOME TO");
// spinBothTopLeft("ECEN academy","WELCOME TO");
}