#ifndef _KS0108_INCLUDED_ #define _KS0108_INCLUDED_ #include #ifndef GLCDTYPE #define GLCDTYPE KS0108 // Graphic Lcd Controller type #endif #ifndef CPU_FRQ #define CPU_FRQ 8000000UL // CPU frequency #endif // Default Port definition #ifndef DATA #define DATA PORTB #endif #ifndef DATA_DDR #define DATA_DDR DDRB #endif #ifndef CTRL #define CTRL PORTC #endif #ifndef CTRL_DDR #define CTRL_DDR DDRC #endif #ifndef RS #define RS 0 #endif #ifndef RW #define RW 1 #endif #ifndef EN #define EN 2 #endif #ifndef CS1 #define CS1 3 #endif #ifndef CS2 #define CS2 4 #endif #ifndef RST #define RST 5 #endif //--------------------------------------------------------------------------- #define setRS CTRL|= (1< void glcd_Init(); void glcd_DrawBmpF(unsigned char Pat[],unsigned char x, unsigned char y,unsigned char h,unsigned char w); void glcd_DrawBmp(unsigned char Pat[],unsigned char x, unsigned char y,unsigned char h,unsigned char w); void glcd_DrawF(unsigned char Pat[]); void glcd_Draw(unsigned char Pat[]); void glcd_WriteByte(unsigned char x, unsigned char y, unsigned char data);// x: Page ,y: Column void glcd_Putchar(unsigned char x, unsigned char y, unsigned char ch); void glcd_Printf(unsigned char x, unsigned char y,char* str); void glcd_Clear(); // LCD's methods inline void address_right(int x,int y); inline void address_left(int x,int y); inline void write_right(unsigned char x ); inline void write_left(unsigned char x ); const char FontLookup [91][6] PROGMEM = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp { 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00 }, // ! { 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00 }, // " { 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00 }, // # { 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00 }, // $ { 0x23, 0x13, 0x08, 0x64, 0x62, 0x00 }, // % { 0x36, 0x49, 0x55, 0x22, 0x50, 0x00 }, // & { 0x00, 0x05, 0x03, 0x00, 0x00, 0x00 }, // ' { 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00 }, // ( { 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00 }, // ) { 0x08, 0x2A, 0x1C, 0x2A, 0x08, 0x00 }, // * { 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00 }, // + { 0x00, 0x50, 0x30, 0x00, 0x00, 0x00 }, // , { 0x08, 0x08, 0x08, 0x08, 0x08, 0x00 }, // - { 0x00, 0x30, 0x30, 0x00, 0x00, 0x00 }, // . { 0x20, 0x10, 0x08, 0x04, 0x02, 0x00 }, // / { 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00 }, // 0 { 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00 }, // 1 { 0x42, 0x61, 0x51, 0x49, 0x46, 0x00 }, // 2 { 0x21, 0x41, 0x45, 0x4B, 0x31, 0x00 }, // 3 { 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00 }, // 4 { 0x27, 0x45, 0x45, 0x45, 0x39, 0x00 }, // 5 { 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x00 }, // 6 { 0x01, 0x71, 0x09, 0x05, 0x03, 0x00 }, // 7 { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00 }, // 8 { 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00 }, // 9 { 0x00, 0x36, 0x36, 0x00, 0x00, 0x00 }, // : { 0x00, 0x56, 0x36, 0x00, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x14, 0x14, 0x14, 0x14, 0x14, 0x00 }, // = { 0x41, 0x22, 0x14, 0x08, 0x00, 0x00 }, // > { 0x02, 0x01, 0x51, 0x09, 0x06, 0x00 }, // ? { 0x32, 0x49, 0x79, 0x41, 0x3E, 0x00 }, // @ { 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x00 }, // A { 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00 }, // B { 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00 }, // C { 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00 }, // D { 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00 }, // E { 0x7F, 0x09, 0x09, 0x01, 0x01, 0x00 }, // F { 0x3E, 0x41, 0x41, 0x51, 0x32, 0x00 }, // G { 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00 }, // H { 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00 }, // I { 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00 }, // J { 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00 }, // K { 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00 }, // L { 0x7F, 0x02, 0x04, 0x02, 0x7F, 0x00 }, // M { 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00 }, // N { 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00 }, // O { 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00 }, // P { 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00 }, // Q { 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00 }, // R { 0x46, 0x49, 0x49, 0x49, 0x31, 0x00 }, // S { 0x01, 0x01, 0x7F, 0x01, 0x01, 0x00 }, // T { 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00 }, // U { 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00 }, // V { 0x7F, 0x20, 0x18, 0x20, 0x7F, 0x00 }, // W { 0x63, 0x14, 0x08, 0x14, 0x63, 0x00 }, // X { 0x03, 0x04, 0x78, 0x04, 0x03, 0x00 }, // Y { 0x61, 0x51, 0x49, 0x45, 0x43, 0x00 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 }, // 55 { 0x41, 0x41, 0x7F, 0x00, 0x00, 0x00 }, // ] { 0x04, 0x02, 0x01, 0x02, 0x04, 0x00 }, // ^ { 0x40, 0x40, 0x40, 0x40, 0x40, 0x00 }, // _ { 0x00, 0x01, 0x02, 0x04, 0x00, 0x00 }, // ' { 0x20, 0x54, 0x54, 0x54, 0x78, 0x00 }, // a { 0x7F, 0x48, 0x44, 0x44, 0x38, 0x00 }, // b { 0x38, 0x44, 0x44, 0x44, 0x20, 0x00 }, // c { 0x38, 0x44, 0x44, 0x48, 0x7F, 0x00 }, // d { 0x38, 0x54, 0x54, 0x54, 0x18, 0x00 }, // e { 0x08, 0x7E, 0x09, 0x01, 0x02, 0x00 }, // f { 0x08, 0x14, 0x54, 0x54, 0x3C, 0x00 }, // g { 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00 }, // h { 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00 }, // i { 0x20, 0x40, 0x44, 0x3D, 0x00, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00 }, // l { 0x7C, 0x04, 0x18, 0x04, 0x78, 0x00 }, // m { 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00 }, // n { 0x38, 0x44, 0x44, 0x44, 0x38, 0x00 }, // o { 0x7C, 0x14, 0x14, 0x14, 0x08, 0x00 }, // p { 0x08, 0x14, 0x14, 0x18, 0x7C, 0x00 }, // q { 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00 }, // r { 0x48, 0x54, 0x54, 0x54, 0x20, 0x00 }, // s { 0x04, 0x3F, 0x44, 0x40, 0x20, 0x00 }, // t { 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00 }, // u { 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00 }, // v { 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00 }, // w { 0x44, 0x28, 0x10, 0x28, 0x44, 0x00 }, // x { 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x00 }, // y { 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00 } // z }; // Initialize Graphic LCD void glcd_Init() { int i=0,com[4] = {0xc0,0xb8, 0x40, 0x3f}; DATA_DDR=0xFF; CTRL_DDR=0xFF; clearRS; while(i<4) { write_left(com[i]); i++; } i=0; while(i<4) { write_right(com[i]); i++; } } // Clear Lcd screen void glcd_Clear() { unsigned char i,j; for( i= 0; i<8; i++) for( j =0; j<128; j++) glcd_WriteByte(i,j,0); } // Write a byte in Row x{0..7} and Column y{0..127} void glcd_WriteByte(unsigned char x, unsigned char y, unsigned char data) { //unsigned char j; if(y<64) // Left { address_left(((x|0b10111000)&0b10111111) ,((y|0b01000000)&0b01111111)); setRS; write_left(data); } else // Right { y -= 64; address_right(((x|0b10111000)&0b10111111) ,((y|0b01000000)&0b01111111)); setRS; write_right(data); } } // Drawing a pattern that is stored in FLASH memory void glcd_DrawF(unsigned char Pat[]) { unsigned char i,j; unsigned int k=0; for( i= 0; i<8; i++) for( j =0; j<128; j++) glcd_WriteByte(i,j,pgm_read_byte(Pat[k++])); } // Drawing a pattern that is stored in SRAM memory void glcd_Draw(unsigned char Pat[]) { unsigned char i,j; unsigned int k=0; for( i= 0; i<8; i++) for( j =0; j<128; j++) glcd_WriteByte(i,j,Pat[k++]); } // Drawing a pattern that is stored in FLASH memory from dot[x,y] until width w and Height h void glcd_DrawBmpF(unsigned char Pat[], unsigned char x, unsigned char y, unsigned char h,unsigned char w) { unsigned char i,j; unsigned int k=0; for( i= x ; i