Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- /*
- Graphic LCD Siemens A50 (LPH7906)
- With Windows-1215 codepage (Russian) (hardware spi mode)
- */
- // ex:
- //
- // ...
- // lph_init();
- // ...
- // lph_gotoxy(0,0);
- // printf(lph_printchar,"Hello, World!");
- // ...
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //#define lph_sclk PIN_C3
- //#define lph_sda PIN_C5
- #define lph_dc PIN_C2
- #define lph_cs PIN_C1
- #define lph_res PIN_C6
- #define lph_vdd PIN_C0
- char char_row,charsel,charpos,chardata; // for lph_7906 lcd
- int16 ddram;
- #use delay ( clock=8000000 )
- BYTE const TABLE5[240]= {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[240]= {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 TABLE7[240]=
- {
- 0x7E, 0x11, 0x11, 0x11, 0x7E,//c0 A 0x80
- 0x7F, 0x49, 0x49, 0x49, 0x30,//c1 Á
- 0x7F, 0x49, 0x49, 0x49, 0x36,//c2 B
- 0x7F, 0x01, 0x01, 0x01, 0x01,//c3 Ã
- 0x60, 0x3E, 0x21, 0x3F, 0x60,//c4 Ä
- 0x7F, 0x49, 0x49, 0x49, 0x41,//c5 Å
- 0x67, 0x18, 0x7F, 0x18, 0x67,//c6 Æ
- 0x22, 0x41, 0x49, 0x49, 0x36,//c7 Ç
- 0x7F, 0x10, 0x08, 0x04, 0x7F,//c8 È
- 0x7F, 0x10, 0x09, 0x04, 0x7F,//c9 É
- 0x7F, 0x08, 0x14, 0x22, 0x41,//ca Ê
- 0x40, 0x3E, 0x01, 0x01, 0x7E,//cb Ë
- 0x7F, 0x02, 0x04, 0x02, 0x7F,//cc Ì
- 0x7F, 0x08, 0x08, 0x08, 0x7F,//cd Í
- 0x3E, 0x41, 0x41, 0x41, 0x3E,//ce Î
- 0x7F, 0x01, 0x01, 0x01, 0x7F,//cf Ï
- 0x7F, 0x09, 0x09, 0x09, 0x06,//d0 Ð
- 0x3E, 0x41, 0x41, 0x41, 0x22,//d1 Ñ
- 0x01, 0x01, 0x7F, 0x01, 0x01,//d2 Ò
- 0x27, 0x48, 0x48, 0x48, 0x3F,//d3 Ó
- 0x1E, 0x21, 0x7F, 0x21, 0x1E,//d4 Ô
- 0x63, 0x14, 0x08, 0x14, 0x63,//d5 Õ
- 0x3F, 0x20, 0x20, 0x3F, 0x40,//d6 Ö
- 0x1F, 0x10, 0x10, 0x10, 0x7F,//d7 ×
- 0x7F, 0x40, 0x7F, 0x40, 0x7F,//d8 Ø
- 0x3F, 0x20, 0x3F, 0x20, 0x7F,//d9 Ù
- 0x01, 0x7F, 0x44, 0x44, 0x38,//da Ú
- 0x7F, 0x44, 0x7C, 0x00, 0x7F,//db Û
- 0x7F, 0x44, 0x44, 0x44, 0x38,//dc Ü
- 0x22, 0x41, 0x49, 0x49, 0x3E,//dd Ý
- 0x7F, 0x08, 0x7F, 0x41, 0x7F,//de Þ
- 0x46, 0x29, 0x19, 0x09, 0x7F,//df ß
- 0x20, 0x54, 0x54, 0x54, 0x78,//e0 à
- 0x3C, 0x4A, 0x4A, 0x4B, 0x30,//e1 á
- 0x7C, 0x54, 0x54, 0x58, 0x20,//e2 â
- 0x7C, 0x04, 0x04, 0x04, 0x04,//e3 ã
- 0x60, 0x38, 0x24, 0x3C, 0x60,//e4 ä
- 0x38, 0x54, 0x54, 0x54, 0x18,//e5 å
- 0x74, 0x08, 0x7C, 0x08, 0x74,//e6 æ
- 0x28, 0x44, 0x54, 0x54, 0x28,//e7 ç
- 0x7C, 0x20, 0x10, 0x08, 0x7C,//e8 è
- 0x7C, 0x21, 0x12, 0x09, 0x7C,//e9 é
- 0x7C, 0x10, 0x10, 0x28, 0x44,//ea ê
- 0x40, 0x78, 0x04, 0x04, 0x7C,//eb ë
- 0x7C, 0x08, 0x10, 0x08, 0x7C,//ec ì
- 0x7C, 0x10, 0x10, 0x10, 0x7C,//ed í
- 0x38, 0x44, 0x44, 0x44, 0x38,//ee î
- 0x7C, 0x04, 0x04, 0x04, 0x7C//ef ï
- };
- BYTE const TABLE8[80]=
- {
- 0x7C, 0x14, 0x14, 0x14, 0x08,//f0 ð
- 0x38, 0x44, 0x44, 0x44, 0x28,//f1 ñ
- 0x04, 0x04, 0x7C, 0x04, 0x04,//f2 ò
- 0x0C, 0x50, 0x50, 0x50, 0x3C,//f3 ó
- 0x18, 0x24, 0x7C, 0x24, 0x18,//f4 ô
- 0x44, 0x28, 0x10, 0x28, 0x44,//f5 õ
- 0x3C, 0x20, 0x20, 0x3C, 0x40,//f6 ö
- 0x1C, 0x20, 0x20, 0x20, 0x7C,//f7 ÷
- 0x7C, 0x40, 0x7C, 0x40, 0x7C,//f8 ø
- 0x3C, 0x20, 0x3C, 0x20, 0x7C,//f9 ù
- 0x04, 0x7C, 0x48, 0x48, 0x30,//fa ú
- 0x7C, 0x48, 0x48, 0x30, 0x7C,//fb û
- 0x7C, 0x48, 0x48, 0x48, 0x30,//fc ü
- 0x28, 0x44, 0x54, 0x54, 0x38,//fd ý
- 0x7C, 0x38, 0x44, 0x44, 0x38,//fe þ
- 0x48, 0x34, 0x14, 0x14, 0x7C,//ff ÿ
- };
- void lph_init(void);
- void lph_write_command(char byteforlph_command);
- void lph_write_data(char byteforlph_data);
- void lph_write_dorc(char byteforlph);
- void lph_gotoxy(int8 xlph, int8 ylph);
- void lph_erase_y(int8 ylph);
- void lph_erase_x(int8 xlph);
- void lph_printchar(int8 cvar);
- void lph_clean_ddram(void);
- void table_to_lphlcd(void);
- //void lph_plot(int8 xlph,int8 plot_value8);
- void lph_write_data_inv(char byteforlph_data_inv);
- void lph_clear_screen(void);
- void lph_clear_xy(int8 xlph, int8 ylph);
- void lph_print_uparrow(void);
- void lph_print_downarrow(void);
- void lph_print_leftarrow(void);
- void lph_print_rightarrow(void);
- void lph_print_degree(void);
- void lph_print_lowbatdegree(void);
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_init(void)
- {
- setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_CLK_DIV_4);
- output_high(lph_dc); // bytes are stored in the display data ram, address counter, incremented automatically
- output_high(lph_cs); // chip disabled
- delay_ms(50);
- output_low(lph_res); // reset chip during 250ms
- delay_ms(50); // works with less.....
- output_high(lph_vdd);
- output_high(lph_res);
- delay_ms(250);
- lph_write_command(0x21); // set extins extended instruction set
- lph_write_command(0x09);
- lph_write_command(0xd0); // Vop ********************************************************************************************************************
- lph_write_command(0x16); // bias
- lph_write_command(0x06);
- lph_write_command(0x20); // horizontal mode from left to right, X axe are incremented automatically , 0x22 for vertical addressing ,back on normal instruction set too
- lph_write_command(0x0c); // all on
- lph_clean_ddram(); // reset DDRAM, otherwise the lcd is blurred with random pixels
- lph_write_command(0x08); // mod control blank change (all off)
- lph_write_command(0x0c); // mod control normal change
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_clean_ddram(void)
- {
- lph_gotoxy(0,0); // 102*8=816 clear LCD
- for (ddram=816;ddram>0;ddram--){lph_write_data(0x00);}
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_write_command(char byteforlph_command)
- {
- output_low(lph_dc); // byte is a command it is read with the eight SCLK pulse
- output_low(lph_cs); // chip enabled
- spi_write(byteforlph_command);
- // lph_write_dorc(byteforlph_command);
- output_high(lph_cs); // chip disabled
- }
- /////////////////////////////////////////////////////////////////////////////////
- void lph_write_data(char byteforlph_data)
- {
- output_high(lph_dc);
- output_low(lph_cs); // chip enabled
- spi_write(byteforlph_data);
- // lph_write_dorc(byteforlph_data);
- output_high(lph_cs); // chip disabled
- }
- //////////////////////////////////////////////////////////////////////////////////
- /*
- void lph_write_dorc(char byteforlph) // serial write data or command subroutine
- {
- char caa;
- for (caa=8;caa>0;caa--) {
- output_low(lph_sclk);
- // delay_us(2);
- if ((byteforlph&0x80)==0){output_low(lph_sda);}
- else {output_high(lph_sda);}
- output_high(lph_sclk);
- byteforlph=byteforlph<<1;
- }
- }
- */
- //////////////////////////////////////////////////////////////////////////////////
- void lph_gotoxy(int8 xlph, int8 ylph) // Siemens LCD A50 Position cursor
- {
- lph_write_command(0x40|(ylph&0x07)); // Y axe initialisation: 0100 0yyy
- lph_write_command(0x80|(xlph&0x7f)); // X axe initialisation: 1xxx xxxx
- }
- //////////////////////////////////////////////////////////////////////////////////
- void lph_erase_y(int8 ylph)
- {
- lph_gotoxy(0,ylph);
- printf(lph_printchar," ");
- }
- //////////////////////////////////////////////////////////////////////////////////
- void lph_erase_x(int8 xlph)
- {
- char column;
- for (column=0;column!=8;column++){
- lph_gotoxy(xlph,column);
- lph_write_data(0x00);
- lph_write_data(0x00);
- lph_write_data(0x00);
- lph_write_data(0x00);
- lph_write_data(0x00);
- lph_write_data(0x00);
- }
- }
- //////////////////////////////////////////////////////////////////////////////////
- void lph_printchar(int8 cvar) // Write 1 character to LCD
- {
- charsel=cvar;
- table_to_lphlcd();
- }
- //////////////////////////////////////////////////////////////////////////////////
- void table_to_lphlcd(void) // extract ascii from tables & write to LCD
- {
- if (charsel<0x20)return;
- if ((charsel<0xc0)&(charsel>0x7f))return;
- for (char_row=0;char_row<5;char_row++) { // 5 bytes
- if (charsel<0x50){charpos=(((charsel&0xff)-0x20)*5);chardata=TABLE5[(charpos+char_row)];} // use TABLE5
- else if (charsel<0x80){charpos=(((charsel&0xff)-0x50)*5);chardata=TABLE6[(charpos+char_row)];} // use TABLE6
- else if (charsel<0xf0){charpos=(((charsel&0xff)-0xc0)*5);chardata=TABLE7[(charpos+char_row)];} // use TABLE6
- else /*if (charsel<=0xff)*/{charpos=(((charsel&0xff)-0xf0)*5);chardata=TABLE8[(charpos+char_row)];} // use TABLE6
- lph_write_data(chardata); // send data to lph
- }
- lph_write_data(0x00); // 1 byte (always blank)
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_clear_screen(void)
- {
- lph_erase_y(0);
- lph_erase_y(1);
- lph_erase_y(2);
- lph_erase_y(3);
- lph_erase_y(4);
- lph_erase_y(5);
- lph_erase_y(6);
- lph_erase_y(7);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_clear_xy(int8 xlph, int8 ylph)
- {
- lph_gotoxy(xlph,ylph);
- lph_printchar(" ");
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- void lph_print_uparrow(void)
- {
- lph_write_data(0x04);
- lph_write_data(0x02);
- lph_write_data(0x7f);
- lph_write_data(0x02);
- lph_write_data(0x04);
- lph_write_data(0x00);
- }
- //
- void lph_print_downarrow(void)
- {
- lph_write_data(0x10);
- lph_write_data(0x20);
- lph_write_data(0x7f);
- lph_write_data(0x20);
- lph_write_data(0x10);
- lph_write_data(0x00);
- }
- //
- void lph_print_leftarrow(void)
- {
- lph_write_data(0x08);
- lph_write_data(0x1c);
- lph_write_data(0x2a);
- lph_write_data(0x08);
- lph_write_data(0x08);
- lph_write_data(0xf8);
- }
- //
- void lph_print_rightarrow(void)
- {
- lph_write_data(0x08);
- lph_write_data(0x08);
- lph_write_data(0x2a);
- lph_write_data(0x1c);
- lph_write_data(0x08);
- lph_write_data(0x00);
- }
- //
- void lph_print_degree(void)
- {
- lph_write_data(0x00);
- lph_write_data(0x06);
- lph_write_data(0x09);
- lph_write_data(0x09);
- lph_write_data(0x06);
- lph_write_data(0x00);
- }
- //
- void lph_print_lowbatdegree(void)
- {
- lph_write_data(0x00);
- lph_write_data(0x06);
- lph_write_data(0x0f);
- lph_write_data(0x0f);
- lph_write_data(0x06);
- lph_write_data(0x00);
- }
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement