void setup() {
// put your setup code here, to run once:
volatile unsigned char *outFdrr = 0x30, *outKdrr = 0x107;
*outFdrr = 0xFF;
*outKdrr= 0xFF;
init_lcd();
//wrtTopLR("Welcome",false);
wrtTopRL("Welcome",false);
}
void del(){
volatile int i=0;
for(i=0;i<1000;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(0x0f);//display contro;
lcd_cntrl_write();
op_data(0x01);//clear
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();
}
void wrtLeft(char a[],boolean l1){
op_data(0x04);//entry mode
lcd_cntrl_write();
setCursor(strlen(a),l1);
volatile int i;
for(i=strlen(a)-1;i>=0;i--){
out_write(a[i]);
}
}
void wrtRight(char a[],boolean l1){
op_data(0x06);//entry mode
lcd_cntrl_write();
setCursor(16-strlen(a),l1);
volatile int i;
for(i=0;a[i];i++){
out_write(a[i]);
}
}
void wrtTopLR(char a[],boolean l1){
volatile int i;
while(1){
op_data(0x01);//clear
lcd_cntrl_write();
wrtLeft(a,l1);
for(i=0;i<16;i++){
op_data(0x1c);
lcd_cntrl_write();
del();
}
}
}
void wrtTopRL(char a[],boolean l1){
volatile int i;
while(1){
op_data(0x01);//clear
wrtRight(a,l1);
for(i=0;i<16;i++){
op_data(0x18);
lcd_cntrl_write();
del();
}
}
}
void loop() {
// put your main code here, to run repeatedly
}