Page 1 of 1
cytron GLCD
Posted:
Fri Nov 05, 2010 2:14 am
by toh123
hi, i bought a cytron GLCD and i want to know that is that every GLCD ( different brand) have same GDRAM address? In PR21, the compiler used is C18Compiler, i does not familiar with tat compiler, can i used mikro C compiler to program this cytron GLCD and used back the library inside the mikro C compiler @@
Re: cytron GLCD
Posted:
Fri Nov 05, 2010 9:25 am
by yonghui
hi,
im not so sure if the compiler library is compatible.
but its good experience to develop own library by referring to the library provided by the compiler. looking into the way data and commands are sent to the GLCD.
regards,
yh
Re: cytron GLCD
Posted:
Fri Nov 05, 2010 4:50 pm
by toh123
So what u means is there is possible to compile this GLCD in different C compiler if the library is build ?
Re: cytron GLCD
Posted:
Fri Nov 05, 2010 9:25 pm
by yonghui
hi,
if we look at the datasheet. there are several pins for the communications. this is 1st thing to check.
the data can be either in serial or parallel.
then further looking at the command/instruction table. the library provided by the mikro-C is is sending the correct command/instruction for the correct action of the LCD? this need to be checked. i never use mikro-C.
so this is basically 2 simple steps to know whether the library provided can be used onot for correct functionality. else, we can do modifications to the library to send the correct command, if the library is open source, where we can see the source code in the library.
but i think cytron got a DIY project using the GLCD. u can try refer and copy the library from that project.
regards,
yh
Re: cytron GLCD
Posted:
Sun Nov 07, 2010 12:20 pm
by toh123
i canot find the library and from C 18 compiler (cytron Project 21) , but after referring to the library from mikro E , i know that the pin configuration is totally different from C18,
I had attached a library from mikro E, and i wish to edit this library so that i can program cytron GLCD in mikro E, any pro can teach or help?
Re: cytron GLCD
Posted:
Sun Nov 07, 2010 12:26 pm
by toh123
i canot upload file , any idea?
the error massage i get is
"Parse error: syntax error, unexpected $end, expecting ',' or ')' in /home/cytron/public_html/forum/cache/tpl_milky-way_simple_header.html.php on line 16"
Re: cytron GLCD
Posted:
Sun Nov 07, 2010 12:46 pm
by yonghui
i dont know why u cant find the source code of PR21
its all in one single piece of source code together with the main program. so just need to copy out the necessary part of the program to be used for the GLCD. below is the source code of the PR21. some functions are the GLCD functions which u can anytime modify it to become your own GLCD library. library is actually nothing, just few pieces of code or functions of the LCD. they are called library when its organized into easy-use functions.
- CODE: SELECT_ALL_CODE
//===========================================================================================
// Author :CYTRON TECHNOLOGIES
// Project :DIY Project(PR21-Gaming with Accerlerometer)
// Project description :Use PIC18F452 microcontroller together with the ADXL330
// accelerometer to measure the gravity force and DS-LCD-TG12864B-03
// Graphical LCD (GLCD) for display.
//===========================================================================================
//===========================================================================================
// Include
//===========================================================================================
#include <p18f452.h>
//============================================================================================
// Configuration
//============================================================================================
#pragma config OSC = HSPLL, OSCS = ON
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config CCP2MUX = OFF
#pragma config LVP = OFF //configuration for the microcontroller
//===========================================================================================
// Define
//============================================================================================
#define lcd_data LATD //LCD 8-bit data PORT
#define rst LATCbits.LATC4
#define rs LATCbits.LATC5 //RS pin of the LCD display
#define rw LATCbits.LATC6 //R/W pin of the LCD display
#define e LATCbits.LATC7 //E pin of the LCD display
#define psb LATCbits.LATC3
#define b_light LATCbits.LATC2 //backlight of the LCD display (1 to on backlight)
#define buzzer LATCbits.LATC0 //buzzer (1 to on buzzer)
#define sw1 PORTBbits.RB0 //button (active low)
#define sw2 PORTBbits.RB1 //button (active low)
#define z_axis PORTAbits.RA0
#define y_axis PORTAbits.RA1
#define x_axis PORTAbits.RA2
#define preset PORTAbits.RA4
#define st LATBbits.LATB2
#define channel0 0b10000001 // Configuration for read ADC channel 0 (RA0)
#define channel1 0b10001001 // Configuration for read ADC channel 1 (RA1)
#define channel2 0b10010001 // Configuration for read ADC channel 2 (RA2)
//==============================================================================================
// variable
//==============================================================================================
int xaxis ,yaxis, zaxis,p;
int x_off,y_off,z_off;
char d_data, d_data1;
char p_x,p_y;
unsigned int sens = 500;
signed long x_velo=0,y_velo=0,x_dis=0,y_dis=0,last_x=0,last_y=0;
char test[] = {"testing0"};
char cali [] = {" CALIBRATE... "};
char mssg1[] = {" LET IT FLAT "};
char mssg2[] = {" AND PRESS SW1 "};
char mssg3[] = {"FREESPACE "};
char mssg4[] = {"FRICTION "};
//==============================================================================================
// Graphic Picture Data
//==============================================================================================
rom char graphic[3][1024] = {{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x80,0x01,0x80,0x00,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7F,0x80,0x03,0x80,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF3,0x80,0x07,0x00,0x00,0x00,0x00,0x3C,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xC3,0xB8,0xFF,0xBF,0x3E,0x1F,0xC0,0x0E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x39,0xDF,0xBE,0xFE,0x3F,0xC0,0x07,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x39,0xDF,0xBE,0xFE,0x3F,0xC0,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x80,0x3B,0x9E,0x71,0xC2,0x39,0xC0,0x01,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x84,0x3F,0x9C,0x61,0xC6,0x39,0xC0,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0x8F,0x3E,0x3C,0xE1,0x86,0x73,0x80,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xFE,0x3C,0x3E,0xC1,0xFE,0x63,0x80,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xFC,0x3C,0x3E,0xC1,0xFE,0xE3,0x80,0x01,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0x38,0x1D,0xC0,0xF9,0xE7,0x00,0x03,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x07,0x03,0xC3,0xC7,0xFC,0x00,0x78,0x70,0x1D,0xFF,0x1F,0xE0,0x00,
0x00,0x03,0xFC,0x07,0x03,0xC3,0xC7,0xFC,0x01,0xFE,0x38,0x39,0xFF,0x1F,0xF0,0x00,
0x00,0x03,0x9E,0x0F,0x83,0xE7,0xC7,0x00,0x01,0xCE,0x38,0x39,0xC0,0x1C,0x70,0x00,
0x00,0x07,0x0C,0x0F,0x83,0xE7,0xC7,0x00,0x03,0x87,0x3C,0x79,0xC0,0x1C,0x70,0x00,
0x00,0x07,0x00,0x1D,0xC3,0xE7,0xC7,0x00,0x03,0x87,0x1C,0x71,0xC0,0x1C,0x70,0x00,
0x00,0x07,0x3E,0x1D,0xC3,0xA5,0xC7,0xF8,0x03,0x87,0x1C,0x71,0xFE,0x1F,0xE0,0x00,
0x00,0x07,0x3E,0x3D,0xE3,0xBD,0xC7,0xF8,0x03,0x87,0x1E,0xF1,0xFE,0x1F,0xC0,0x00,
0x00,0x07,0x0E,0x38,0xE3,0xBD,0xC7,0x00,0x03,0x87,0x0E,0xE1,0xC0,0x1C,0xE0,0x00,
0x00,0x07,0x0E,0x3F,0xE3,0xBD,0xC7,0x00,0x03,0x87,0x0E,0xE1,0xC0,0x1C,0xE0,0x00,
0x00,0x03,0x9E,0x7F,0xF3,0x99,0xC7,0x00,0x01,0xCE,0x07,0xC1,0xC0,0x1C,0x70,0x00,
0x00,0x03,0xFE,0x70,0x73,0x99,0xC7,0xFC,0x01,0xFE,0x07,0xC1,0xFF,0x1C,0x70,0x00,
0x00,0x00,0xF8,0xE0,0x3B,0x99,0xC7,0xFC,0x00,0x78,0x07,0xC1,0xFF,0x1C,0x38,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x93,0x93,0x05,0x38,0x39,0x82,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x92,0x12,0x05,0x20,0x19,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x90,0x92,0x05,0x08,0x29,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x13,0x93,0x07,0x38,0x3D,0x82,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x84,0x84,0x83,0x94,0xCC,0xE7,0x07,0x39,0xF8,0x3F,0x28,0x00,0x00,
0x00,0x00,0x16,0x96,0x96,0x82,0x14,0x88,0x95,0x84,0x25,0x68,0x2D,0x28,0x00,0x00,
0x00,0x00,0x1B,0x1B,0x1B,0x02,0x1C,0x88,0x94,0x84,0x25,0x08,0x21,0x38,0x00,0x00,
0x00,0x00,0x09,0x09,0x09,0x13,0x88,0xC8,0xE4,0xA7,0x39,0x09,0x21,0x10,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}
};
//=====================================================================================
//Icon graphic data
//=====================================================================================
rom char icon [8] = { 0x00,0x18,0x3C,0x7E,0x7E,0x3C,0x18,0x00};
//=====================================================================================
// function prototype (every function must have a function prototype)
//=====================================================================================
void init(void);
void delay(unsigned long data);
void send_config(unsigned char data);
void lcd_read(char x, char y);
void send_char(unsigned char data);
void lcd_goto(unsigned char data);
void lcd_clr(void);
void send_string(const char *s);
void lcd_xy(unsigned char x,unsigned char y);
void d_graphic(char k);
void clr_graphic(void);
void d_icon(int x,int y);
void freespace(void);
void friction(void);
void box(void);
void calibrate(void);
unsigned int read_adc(char config);
//==================================================================================
// main function (main fucntion of the program)
//===================================================================================
void main(void)
{
//assign variable
unsigned char i=0,database;
unsigned char data[10];
unsigned int m,j;
init();
d_graphic(0); //display cytron logo
delay(300000); //delay for pic display
// display claibrating messages
send_config(0b00110000); //set to function set configuration
lcd_clr(); //clear the lcd
send_string(cali); //display string
lcd_goto (8); //cursor at 3rd character line
send_string(mssg1); //display string mssg1
lcd_goto(24); //cursor at 4th character line
send_string(mssg2); //display string mssg2
while(sw1); //wait for button pushed
while(!sw1); //wait for button release
calibrate(); //taking the current force as reference for flat plane
lcd_clr(); //clear the lcd
lcd_goto(1); //cursor at 3rd character, 1st character line
send_string(mssg3); //display string mssg3
lcd_goto(17); //cursor at 3rd character, 2st character line
send_string(mssg4); //display string mssg4
lcd_goto(0); //cursor at 1st character, 1st character line
send_char(0x10); //display symbol arrow
m =0 ; //set the variable 0
while(1) //loop forever
{
if (!sw1) //if sw1 is pressed, increase mode
{
while(!sw1); //wait until sw1 is release
m++; //increament m
if (m>1) m=0; //if m more than 1 , clear m
if (m==1) //if m is 1
{
lcd_goto(0); //cursor at 1st line
send_char(' '); //space 1st and 2nd character , 1st line
lcd_goto(16); //cursor at 2nd line
send_char(0x10); //display arrow at 2nd charater, 2nd line
}
else
{
lcd_goto(0); //cursor at 1st line
send_char(0x10); //display arrow at 2nd charater, 1st line
lcd_goto(16); //cursor at 2nd line
send_char(' '); //space 1st and 2nd character , 2nd line
}
}
else if (!sw2) //if sw is pressed
{
while(!sw2); //wait until sw2 is released
lcd_clr(); //clear all character
clr_graphic(); //clear all graphic
// 16 bit timer initial status and start timer
TMR0H = 194; // value for timer reach overflow in 50 ms for clock 10MIPS
TMR0L = 246;
T0CONbits.TMR0ON = 1; //start timer
while(1) //loop forever
{
if (INTCONbits.TMR0IF==1) //if timer over flow ( occur every 50 ms) // to update data every 50 ms
{
INTCONbits.TMR0IF==0; //clear the flag bit
TMR0H=194; //value for timer reach overflow in 50 ms for clock 10MIPS
TMR0L=246;
if (m==1) friction(); //if mode is 1 , the do calculation friction, else do calculation freespace.
else freespace(); //update the data ( required for more accurate intergration ( faster, more accurate ))
i++; //increment variable i
}
if (i==10) //if i reach ten ( around 500 ms) update the icon position
{
if((x_dis/sens >60)||(x_dis/sens<-60)||(y_dis/sens>28)||(y_dis/sens<-28)) //if the icon position not in range of glcd
{ //mean 'the ball drop out from glcd'
d_graphic(1); //display graphic
delay(300000); //dealy for display the graphic
d_graphic(2); //display another graphic
delay(300000);
while(1);
}
d_icon(60-(x_dis/sens),28+(y_dis/sens)); //display icon at updated x,y position
i=0; //clear the variable i
}
}
}
}
}
//==============================================================================
//initialization
//===============================================================================================================================
void init()
{
//set I/O input output
TRISD = 0b00000000; //configure PORTB I/O direction
TRISC = 0b00000000; //configure PORTC I/O direction
TRISB = 0b00000011;
TRISA = 0b00111111; //configure PORTA I/O direction
// ADC configuration
ADCON1 = 0b11000011; //set all portA as Analog Input, right justified
//Timer 0 configuration
T0CON = 0b00000100; //prescale 1: 32
// setup for pwm //For controlling back light
PR2 = 255;
T2CON = 0b00000100; //prescale 1:
CCP1CON = 0b00001100; //Configuration for pwm
CCP2CON = 0b00001100;
//configure lcd
rst = 0;
rst = 1;
delay (100000);
psb = 1;
//basic instruction config
send_config(0b00110000); //function set
lcd_clr(); //clear display at lcd
send_config(0b00000010); //lcd return to home
send_config(0b00000110); //entry mode-cursor increase 1
send_config(0b00001100); //display on, cursor off and cursor blink off
//set initial condition
send_config(0b00110100); //extended function set
send_config(0b00000010);
send_config(0b00000100);
send_config(0b00110000); //function set
lcd_clr(); //clear lcd
CCPR1L = 50; //set the brightness of the back lcd
}
// functions
//===============================================================================================================================
void beep(void) //short beep function
{
buzzer=1; //on buzzer
delay(10000); //short delay
buzzer=0; //off buzzer
delay(10000); //short delay
}
//calculation for freespace
//===============================================================================================================================
void freespace(void)
{
xaxis=read_adc(channel0); //read the force acting on x axis
yaxis=read_adc(channel1); //reat the force acting on y axis
xaxis-=x_off; //offset with value obtain before game start
yaxis-=y_off; //offset with value obtain before game start
if (((last_x-xaxis)==1)||((xaxis-last_x)==1)) xaxis=0; //filter noise
if (((last_y-yaxis)==1)||((last_y-yaxis)==-1)) yaxis=0; //filter noise
x_velo+=xaxis/2; //intergrate the force resultance velocity
y_velo+=yaxis/2; //intergrate the force resultance velocity
x_dis+=x_velo; //intergrate the velocity resultance distance
y_dis+=y_velo; //intergrate the velocity resultance distance
}
//calculation for constant friction (
//===============================================================================================================================
void friction(void)
{
xaxis=read_adc(channel0); //read the force acting on x axis
yaxis=read_adc(channel1); //reat the force acting on y axis
xaxis-=x_off; //offset with value obtain before game start
yaxis-=y_off; //offset with value obtain before game start
if (((last_x-xaxis)==1)||((xaxis-last_x)==1)) xaxis=0; //filter noise
if (((last_y-yaxis)==1)||((last_y-yaxis)==-1)) yaxis=0; //filter noise
x_velo+=xaxis/2; //intergrate the force resultance velocity
y_velo+=yaxis/2; //intergrate the force resultance velocity
if(x_velo>0) x_velo--; //decreace the velocity ( making like having friction force )
else if (x_velo<0) x_velo++;
if(y_velo>0) y_velo--;
else if (y_velo<0) y_velo++;
x_dis += x_velo; //intergrate the velocity resultance distance
y_dis += y_velo; //intergrate the velocity resultance distance
}
// ADC function
//===============================================================================================================================
unsigned int read_adc(char config)
{
unsigned short i;
unsigned long result ,result_temp=0;
ADCON0 = config;
delay(1000); // delay after changing configuration
for(i=20;i>0;i-=1) //looping 200 times for getting average value
{
ADCON0bits.GO = 1; //ADGO is the bit 2 of the ADCON0 register
while(ADCON0bits.GO==1); //ADC start, ADGO=0 after finish ADC progress
result=ADRESH;
result=result<<8; //shift to left for 8 bit
result=result|ADRESL; //10 bit result from ADC
result_temp+=result;
}
result = result_temp/20; //getting average value
ADCON0bits.ADON = 0; //adc module is shut off
return result;
}
void calibrate(void)
{
x_off = read_adc(channel0); //read x_axis accelero value and save as offset
y_off = read_adc(channel1); //read x_axis accelero value and save as offset
z_off = read_adc(channel2); //read x_axis accelero value and save as offset
}
// LCD function
// Config function
//===============================================================================================================================
void delay(unsigned long data) //delay function, the delay time
{ //depend on the given value
for( ;data>0;data-=1);
}
void send_config(unsigned char data) //send lcd configuration
{
rw=0; //set lcd to write mode
rs=0; //set lcd to configuration mode
lcd_data=data; //lcd data port = data
e=1; //pulse e to confirm the data
delay(20);
e=0;
delay(20);
}
void send_char(unsigned char data) //send lcd character
{
rw=0; //set lcd to write mode
rs=1; //set lcd to display mode
lcd_data=data; //lcd data port = data
e=1; //pulse e to confirm the data
delay(20);
e=0;
delay(20);
}
// char function (make sure is in basic function before use lcd function)
//===============================================================================================================================
void lcd_goto(unsigned char data) //set the location of the lcd cursor
{
send_config(0x80+data);
// -----------------------------------------------------
// | |00|01|02|03|04|05|06|07| | //1 location can store 2 character
// | |17|18|19|...........|15| |
// | |09|10|11|...........|23| |
// | |24|.................|31| |
// -----------------------------------------------------
}
void lcd_clr(void) //clear the lcd
{
send_config(0x01);
delay(600);
}
void send_string(const char *s) //send a string to display in the lcd
{
unsigned char i=0;
while (s && *s)send_char (*s++);
}
void function( char data) //1 for extention , 0 for basic * must off graphic before go back basic function
{
send_config(0x30 |data << 2);
}
// graphic function ( make sure in extention function before use grapchic funcion )
//===============================================================================================================================
// CGRAM map for GLCD Display
// y x (column )
// row | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
// 0 0 |UB |LB | | | | | | | |
// 1 1 | | | | | | | | |
// 2 2 | | | | | | | | |
// 3 3 | | | | | | | | |
// ' | | | | | | | | |
// ' | | | | | | | | |
// ' | | | | | | | | |
// 31 31 |_______|___|___|___|___|___|___|___|
// | 8 | 9 |10 |11 |12 |13 |14 |15 |
// 32 0 |UB |LB | | | | | | | |
// 33 1 | | | | | | | | |
// 34 2 | | | | | | | | |
// 35 3 | | | | | | | | |
// ' | | | | | | | | |
// ' | | | | | | | | |
// ' | | | | | | | | |
// 63 31 | | | | | | | | |
// UB - upper byte , LB - lower byte
// To write an LB, UB must wrote first.
// display an icon at position x,y
void d_icon(int x,int y) //display first bit of 8x8 icon at x,y position
{
char i,j;
if (p_x%16 <8) //if x position is on upper byte of 16 bit
{
for (j=0;j<8;j++) //repeat for 8 vertical line
{
lcd_xy(p_x/16,(p_y+j)%64); //go to the location and y is re-adjust after adding j ( > 64 after adding j )
send_char(0); //send upperbyte with shifting according to the x position
send_char(0); //send lowerbyte with shifting according to the x position
}
}
else
{
for (j=0;j<8;j++)
{
lcd_xy(p_x/16,(p_y+j)%64); //go to the location and y is re-adjust after adding j ( > 64 after adding j )
send_char (0); //send dummy data to the upperbyte
send_char(0); //send lowerbyte data with shifting according to the x position
if(p_x/16 == 7) lcd_xy(0,p_y+j);
send_char(0); //send upperbyte of the next 'x' with shifting according to the x position
}
}
if (x%16 <8) //if x position is on upper byte of 16 bit
{
for (j=0;j<8;j++) //repeat for 8 vertical line
{
lcd_xy(x/16,(y+j)%64); //go to the location and y is re-adjust after adding j ( > 64 after adding j )
send_char(icon[j]>> x%8); //send upperbyte with shifting according to the x position
send_char(icon[j]<< (8-x%8)); //send lowerbyte with shifting according to the x position
}
}
else
{
for (j=0;j<8;j++)
{
lcd_xy(x/16,(y+j)%64); //go to the location and y is re-adjust after adding j ( > 64 after adding j )
send_char (0); //send dummy data to the upperbyte
send_char(icon[j]>> x%8); //send lowerbyte data with shifting according to the x position
if(x/16 == 7) lcd_xy(0,y+j);
send_char(icon[j]<< (8-x%8)); //send upperbyte of the next 'x' with shifting according to the x position
}
}
p_x = x; //save as previous location
p_y= y; //save as previous location
}
void lcd_xy(unsigned char x,unsigned char y) //set the xy position for graphic
{
if( y >= 32)
{ //if vertical more or equal 32
send_config(0x80+y-32); //adjust the vertical line
send_config(0x80+x+8); //for more detail refer GDRAM in user manual
}
else
{
send_config(0x80+y); //vertical (Y) max 63
send_config(0x80+x); //horizontal (X) max 8 (horizontal is divided by 16 bit data (represented in 2 bytes))
}
}
// display the picture according to the data array defined
//===============================================================================================================================
void d_graphic(char k)
{
unsigned int i,j,y;
send_config(0b00111100); //set to extention mode nad graphic off
y = 0b10000000; //set y as vertical configuration
for(j = 0; j <32 ; j++) //32 line
{
send_config(y++); //increase line
send_config(0b10000000); //set add back to 0
for(i=0;i<16;i++)send_char(graphic[k][i+j*16]); //display first half
for(i=0;i<16;i++)send_char(graphic[k][i+512+j*16]); //display second half **since the x add is increased more than 7. See CGRAM map above or refer user manual for CGRAM map for more detail.
}
send_config(0b00111110); //set to extention mode and graphic on
}
// clear all the graphic
//===============================================================================================================================
void clr_graphic()
{
unsigned int i,j,y;
send_config (0b00111100); //set to extention mode and graphic off
y = 0b10000000; //set y as vertical configuration
for(j = 0; j <32 ; j++) //32 line
{
send_config(y++); //increase line
send_config(0b10000000); //set add back to 0
for(i=0;i<32;i++)send_char(0); //clear all
}
send_config(0b00111110); //set to extention mode and graphic on
}