waheed
Joined: 19 May 2012 Posts: 26 Location: Pakistan
|
Driver for 96 * 60 KS0713 Family Graphic LCDs |
Posted: Thu May 31, 2012 1:21 am |
|
|
I already have a driver for this GLCD but it has limited capability.
I want to have options like HIGHLIGHTING , SINGLE PIXEL ON/OFF and LINE Drawing.
Driver that i am using is:
Code: |
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
DRIVERS FOR KS0713 Family Graphic LCDs
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdlib.h>
#byte pd =0xF83
#bit dt_cs =pd.7 // RD5
#bit dt_rst =pd.6 // RD4
#bit dt_sclk =pd.5 // RD3
#bit dt_sid =pd.4 // RD2
#bit dt_rs =pd.3 // RD1
#bit dt_bl =pd.2 // RD1
BYTE const TABLE5[48][5]=
{0x00,0x00,0x00,0x00,0x00, // 20 space ASCII table for NOKIA LCD: 96 rows * 5 bytes= 480 bytes
0x00,0x00,0x5f,0x00,0x00, // 21 !
0x00,0x07,0x00,0x07,0x00, // 22 "
0x14,0x7f,0x14,0x7f,0x14, // 23 #
0x24,0x2a,0x7f,0x2a,0x12, // 24 $
0x23,0x13,0x08,0x64,0x62, // 25 %
0x36,0x49,0x55,0x22,0x50, // 26 &
0x00,0x05,0x03,0x00,0x00, // 27 '
0x00,0x1c,0x22,0x41,0x00, // 28 (
0x00,0x41,0x22,0x1c,0x00, // 29 )
0x14,0x08,0x3e,0x08,0x14, // 2a *
0x08,0x08,0x3e,0x08,0x08, // 2b +
0x00,0x50,0x30,0x00,0x00, // 2c ,
0x08,0x08,0x08,0x08,0x08, // 2d -
0x00,0x60,0x60,0x00,0x00, // 2e .
0x20,0x10,0x08,0x04,0x02, // 2f /
0x3e,0x51,0x49,0x45,0x3e, // 30 0
0x00,0x42,0x7f,0x40,0x00, // 31 1
0x42,0x61,0x51,0x49,0x46, // 32 2
0x21,0x41,0x45,0x4b,0x31, // 33 3
0x18,0x14,0x12,0x7f,0x10, // 34 4
0x27,0x45,0x45,0x45,0x39, // 35 5
0x3c,0x4a,0x49,0x49,0x30, // 36 6
0x01,0x71,0x09,0x05,0x03, // 37 7
0x36,0x49,0x49,0x49,0x36, // 38 8
0x06,0x49,0x49,0x29,0x1e, // 39 9
0x00,0x36,0x36,0x00,0x00, // 3a :
0x00,0x56,0x36,0x00,0x00, // 3b ;
0x08,0x14,0x22,0x41,0x00, // 3c <
0x14,0x14,0x14,0x14,0x14, // 3d =
0x00,0x41,0x22,0x14,0x08, // 3e >
0x02,0x01,0x51,0x09,0x06, // 3f ?
0x32,0x49,0x79,0x41,0x3e, // 40 @
0x7e,0x11,0x11,0x11,0x7e, // 41 A
0x7f,0x49,0x49,0x49,0x36, // 42 B
0x3e,0x41,0x41,0x41,0x22, // 43 C
0x7f,0x41,0x41,0x22,0x1c, // 44 D
0x7f,0x49,0x49,0x49,0x41, // 45 E
0x7f,0x09,0x09,0x09,0x01, // 46 F
0x3e,0x41,0x49,0x49,0x7a, // 47 G
0x7f,0x08,0x08,0x08,0x7f, // 48 H
0x00,0x41,0x7f,0x41,0x00, // 49 I
0x20,0x40,0x41,0x3f,0x01, // 4a J
0x7f,0x08,0x14,0x22,0x41, // 4b K
0x7f,0x40,0x40,0x40,0x40, // 4c L
0x7f,0x02,0x0c,0x02,0x7f, // 4d M
0x7f,0x04,0x08,0x10,0x7f, // 4e N
0x3E,0x41,0x41,0x41,0x3E,}; // 4f O
BYTE const TABLE6[48][5]={
0x7f,0x09,0x09,0x09,0x06, // 50 P
0x3e,0x41,0x51,0x21,0x5e, // 51 Q
0x7f,0x09,0x19,0x29,0x46, // 52 R
0x46,0x49,0x49,0x49,0x31, // 53 S
0x01,0x01,0x7f,0x01,0x01, // 54 T
0x3f,0x40,0x40,0x40,0x3f, // 55 U
0x1f,0x20,0x40,0x20,0x1f, // 56 V
0x3f,0x40,0x38,0x40,0x3f, // 57 W
0x63,0x14,0x08,0x14,0x63, // 58 X
0x07,0x08,0x70,0x08,0x07, // 59 Y
0x61,0x51,0x49,0x45,0x43, // 5a Z
0x00,0x7f,0x41,0x41,0x00, // 5b [
0x02,0x04,0x08,0x10,0x20, // 5c
0x00,0x41,0x41,0x7f,0x00, // 5d
0x04,0x02,0x01,0x02,0x04, // 5e
0x40,0x40,0x40,0x40,0x40, // 5f
0x00,0x01,0x02,0x04,0x00, // 60
0x20,0x54,0x54,0x54,0x78, // 61 a
0x7f,0x48,0x44,0x44,0x38, // 62 b
0x38,0x44,0x44,0x44,0x20, // 63 c
0x38,0x44,0x44,0x48,0x7f, // 64 d
0x38,0x54,0x54,0x54,0x18, // 65 e
0x08,0x7e,0x09,0x01,0x02, // 66 f
0x0c,0x52,0x52,0x52,0x3e, // 67 g
0x7f,0x08,0x04,0x04,0x78, // 68 h
0x00,0x44,0x7d,0x40,0x00, // 69 i
0x20,0x40,0x44,0x3d,0x00, // 6a j
0x7f,0x10,0x28,0x44,0x00, // 6b k
0x00,0x41,0x7f,0x40,0x00, // 6c l
0x7c,0x04,0x18,0x04,0x78, // 6d m
0x7c,0x08,0x04,0x04,0x78, // 6e n
0x38,0x44,0x44,0x44,0x38, // 6f o
0x7c,0x14,0x14,0x14,0x08, // 70 p
0x08,0x14,0x14,0x18,0x7c, // 71 q
0x7c,0x08,0x04,0x04,0x08, // 72 r
0x48,0x54,0x54,0x54,0x20, // 73 s
0x04,0x3f,0x44,0x40,0x20, // 74 t
0x3c,0x40,0x40,0x20,0x7c, // 75 u
0x1c,0x20,0x40,0x20,0x1c, // 76 v
0x3c,0x40,0x30,0x40,0x3c, // 77 w
0x44,0x28,0x10,0x28,0x44, // 78 x
0x0c,0x50,0x50,0x50,0x3c, // 79 y
0x44,0x64,0x54,0x4c,0x44, // 7a z
0x00,0x08,0x36,0x41,0x00, // 7b
0x00,0x00,0x7f,0x00,0x00, // 7c
0x00,0x41,0x36,0x08,0x00, // 7d
0x10,0x08,0x08,0x10,0x08, // 7e
0x78,0x46,0x41,0x46,0x78}; // 7f
BYTE const font_bold1 [48][8]={
0, 0, 0, 0, 0, 0, 0, 0, //' '
0, 6, 95, 95, 6, 0, 0, 0, //'!'
0, 7, 7, 0, 7, 7, 0, 0, //'"'
20, 127, 127, 20, 127, 127, 20, 0, //'#'
36, 46, 107, 107, 58, 18, 0, 0, //'$'
70, 102, 48, 24, 12, 102, 98, 0, //'%'
48, 122, 79, 93, 55, 122, 72, 0, //'&'
4, 7, 3, 0, 0, 0, 0, 0, //'''
0, 28, 62, 99, 65, 0, 0, 0, //'('
0, 65, 99, 62, 28, 0, 0, 0, //')'
8, 42, 62, 28, 28, 62, 42, 8, //'*'
8, 8, 62, 62, 8, 8, 0, 0, //'+'
0, 128, 224, 96, 0, 0, 0, 0, //','
8, 8, 8, 8, 8, 8, 0, 0, //'-'
0, 0, 96, 96, 0, 0, 0, 0, //'.'
96, 48, 24, 12, 6, 3, 1, 0, //'/'
62, 127, 113, 89, 77, 127, 62, 0, //'0'
64, 66, 127, 127, 64, 64, 0, 0, //'1'
98, 115, 89, 73, 111, 102, 0, 0, //'2'
34, 99, 73, 73, 127, 54, 0, 0, //'3'
24, 28, 22, 83, 127, 127, 80, 0, //'4'
39, 103, 69, 69, 125, 57, 0, 0, //'5'
60, 126, 75, 73, 121, 48, 0, 0, //'6'
3, 3, 113, 121, 15, 7, 0, 0, //'7'
54, 127, 73, 73, 127, 54, 0, 0, //'8'
6, 79, 73, 105, 63, 30, 0, 0, //'9'
0, 0, 102, 102, 0, 0, 0, 0, //':'
0, 128, 230, 102, 0, 0, 0, 0, //';'
8, 28, 54, 99, 65, 0, 0, 0, //'<'
36, 36, 36, 36, 36, 36, 0, 0, //'='
0, 65, 99, 54, 28, 8, 0, 0, //'>'
2, 3, 81, 89, 15, 6, 0, 0, //'?'
62, 127, 65, 93, 93, 31, 30, 0, //'@'
124, 126, 19, 19, 126, 124, 0, 0, //'A'
65, 127, 127, 73, 73, 127, 54, 0, //'B'
28, 62, 99, 65, 65, 99, 34, 0, //'C'
65, 127, 127, 65, 99, 62, 28, 0, //'D'
65, 127, 127, 73, 93, 65, 99, 0, //'E'
65, 127, 127, 73, 29, 1, 3, 0, //'F'
28, 62, 99, 65, 81, 115, 114, 0, //'G'
127, 127, 8, 8, 127, 127, 0, 0, //'H'
0, 65, 127, 127, 65, 0, 0, 0, //'I'
48, 112, 64, 65, 127, 63, 1, 0, //'J'
65, 127, 127, 8, 28, 119, 99, 0, //'K'
65, 127, 127, 65, 64, 96, 112, 0, //'L'
127, 127, 14, 28, 14, 127, 127, 0, //'M'
127, 127, 6, 12, 24, 127, 127, 0, //'N'
28, 62, 99, 65, 99, 62, 28, 0, //'O'
};
BYTE const font_bold2 [48][8]={
65, 127, 127, 73, 9, 15, 6, 0, //'P'
30, 63, 33, 113, 127, 94, 0, 0, //'Q'
65, 127, 127, 9, 25, 127, 102, 0, //'R'
38, 111, 77, 89, 115, 50, 0, 0, //'S'
3, 65, 127, 127, 65, 3, 0, 0, //'T'
127, 127, 64, 64, 127, 127, 0, 0, //'U'
31, 63, 96, 96, 63, 31, 0, 0, //'V'
127, 127, 48, 24, 48, 127, 127, 0, //'W'
67, 103, 60, 24, 60, 103, 67, 0, //'X'
7, 79, 120, 120, 79, 7, 0, 0, //'Y'
71, 99, 113, 89, 77, 103, 115, 0, //'Z'
0, 127, 127, 65, 65, 0, 0, 0, //'['
1, 3, 6, 12, 24, 48, 96, 0, //'\'
0, 65, 65, 127, 127, 0, 0, 0, //']'
8, 12, 6, 3, 6, 12, 8, 0, //'^'
128, 128, 128, 128, 128, 128, 128, 128, //'_'
0, 0, 3, 7, 4, 0, 0, 0, //'`'
32, 116, 84, 84, 60, 120, 64, 0, //'a'
65, 127, 63, 72, 72, 120, 48, 0, //'b'
56, 124, 68, 68, 108, 40, 0, 0, //'c'
48, 120, 72, 73, 63, 127, 64, 0, //'d'
56, 124, 84, 84, 92, 24, 0, 0, //'e'
72, 126, 127, 73, 3, 2, 0, 0, //'f'
152, 188, 164, 164, 248, 124, 4, 0, //'g'
65, 127, 127, 8, 4, 124, 120, 0, //'h'
0, 68, 125, 125, 64, 0, 0, 0, //'i'
96, 224, 128, 128, 253, 125, 0, 0, //'j'
65, 127, 127, 16, 56, 108, 68, 0, //'k'
0, 65, 127, 127, 64, 0, 0, 0, //'l'
124, 124, 24, 56, 28, 124, 120, 0, //'m'
124, 124, 4, 4, 124, 120, 0, 0, //'n'
56, 124, 68, 68, 124, 56, 0, 0, //'o'
132, 252, 248, 164, 36, 60, 24, 0, //'p'
24, 60, 36, 164, 248, 252, 132, 0, //'q'
68, 124, 120, 76, 4, 28, 24, 0, //'r'
72, 92, 84, 84, 116, 36, 0, 0, //'s'
0, 4, 62, 127, 68, 36, 0, 0, //'t'
60, 124, 64, 64, 60, 124, 64, 0, //'u'
28, 60, 96, 96, 60, 28, 0, 0, //'v'
60, 124, 112, 56, 112, 124, 60, 0, //'w'
68, 108, 56, 16, 56, 108, 68, 0, //'x'
156, 188, 160, 160, 252, 124, 0, 0, //'y'
76, 100, 116, 92, 76, 100, 0, 0, //'z'
8, 8, 62, 119, 65, 65, 0, 0, //'{'
0, 0, 0, 119, 119, 0, 0, 0, //'|'
};
char charsel;
void dt_lcd_init(void);
void dt_lcd_clear_screen(void);
void dt_lcd_write_command(char bytefor_command);
void dt_lcd_write_data(char bytefor_data);
void dt_lcd_write_dorc(char bytefor);
void dt_lcd_gotoxy(byte x_col, byte y_row);
void dt_lcd_printchar(byte cvar);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void dt_lcd_init(void)
{
dt_cs=1;
dt_sclk=1;
dt_rst = 0;
delay_ms(10);
dt_rst = 1;
delay_ms(1);
dt_lcd_write_command(0xe2); // reset
dt_lcd_write_command(0xa0); // ADC select: normal
dt_lcd_write_command(0xFF); // SHL select:
dt_lcd_write_command(0xb2); // LCD bias select:
dt_lcd_write_command(0x2c); // Voltage converter ON
delay_ms(1);
dt_lcd_write_command(0x2e); // Voltage regulator ON
delay_ms(1);
dt_lcd_write_command(0x2f); // Voltage follower ON
dt_lcd_write_command(0x25); // Regulator resistor select 0x20..0x27
dt_lcd_write_command(0x81); // Reference voltage register set
dt_lcd_write_command(0x18); // Reference voltage 0..63
dt_lcd_write_command(0x40); // initial display line 0x40..0x7f
dt_lcd_write_command(0xaf); // display ON
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void dt_lcd_clear_screen(void)
{
char xx,yy;
// RAM set to zero
for (yy=0;yy!=8;yy++){
dt_lcd_gotoxy(0,yy);
printf(dt_lcd_printchar," ");
//printf("yy=%u ",yy);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void dt_lcd_write_command(char bytefor_command)
{
dt_cs=0;
//nop;nop;nop;nop;
dt_rs=0;
dt_lcd_write_dorc(bytefor_command);
dt_cs=1;
}
/////////////////////////////////////////////////////////////////////////////////
void dt_lcd_write_data(char bytefor_data)
{
dt_cs=0;
//nop;nop;nop;nop;
dt_rs=1;
dt_lcd_write_dorc(bytefor_data); // write display data
dt_cs=1;
}
//////////////////////////////////////////////////////////////////////////////////
void dt_lcd_write_dorc(char bytefor) // serial write data or command subroutine
{
char caa;
for (caa=8;caa>0;caa--) {
dt_sclk=0;
// delay_us(2);
if ((bytefor&0x80)==0){dt_sid=0;}
else {dt_sid=1;}
//nop;nop;
dt_sclk=1;
bytefor=bytefor<<1;
//nop;nop;
}
}
//////////////////////////////////////////////////////////////////////////////////
void dt_lcd_gotoxy(byte x_col, byte y_row) // Position cursor
{
char hi_col,lo_col;
//x_col+=0x24;
lo_col= (x_col&0x0f);
//printf(" lo_col=%u ",lo_col);
hi_col= ((x_col>>4)&0x0f)|0x10;
//printf(" hi_col=%u ",hi_col);
dt_lcd_write_command(hi_col); // set higher column address
dt_lcd_write_command(lo_col); // set lower column address
dt_lcd_write_command(0xb0|(y_row&0x0f)); // set GDDRAM page address 0..7 (for 8 rows)
//printf(" y_row=%u ",y_row);
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
void dt_lcd_printchar(byte cvar) // Write 1 character to LCD
{
charsel=cvar;
int i;
for ( i = 0; i < 5; i++ ){
if(charsel<0x50) dt_Lcd_Write_data(TABLE5[charsel - 0x20][i] << 1);
else if(charsel>0x4f) dt_Lcd_Write_data(TABLE6[charsel - 0x50][i] << 1);
} // send data to nokia
dt_lcd_write_data(0x00); // 1 byte (always blank)
}
void lcd_printchar(byte cvar) // Write 1 character to LCD
{
charsel=cvar;
int i;
for ( i = 0; i < 8; i++ ){
if(charsel<0x50) dt_Lcd_Write_data(font_bold1[charsel - 0x20][i] << 1);
else if(charsel>0x4f) dt_Lcd_Write_data(font_bold2[charsel - 0x50][i] << 1);
} // send data to nokia
dt_lcd_write_data(0x00); // 1 byte (always blank)
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|