Subversion Repositories HomeAutomation

Rev

Rev 357 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. /*********************************************************************
  2.  *
  3.  *                  Graphical LCD routines (LM6038D (ST7565))
  4.  *
  5.  *********************************************************************
  6.  * FileName:        $HeadURL: http://svn.arune.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canLCD/Source/lcd.c $
  7.  * Last changed:    $LastChangedDate: 2006-11-21 10:28:39 +0100 (ti, 21 nov 2006) $
  8.  * By:              $LastChangedBy: johboh $
  9.  * Revision:        $Revision: 140 $
  10.  ********************************************************************/
  11.  
  12. #include <glcd.h>
  13.  
  14. #ifdef USE_GLCD
  15.  
  16. #define FONT_WIDTH 6
  17.  
  18. const rom BYTE Font8x6[][6] = {
  19. {0x00,0x00,0x00,0x00,0x00,0x00},   //   0x 0 0
  20. {0x00,0x64,0x18,0x04,0x64,0x18},   //  0x 1 1
  21. {0x00,0x3c,0x40,0x40,0x20,0x7c},   //  0x 2 2
  22. {0x00,0x0c,0x30,0x40,0x30,0x0c},   //  0x 3 3
  23. {0x00,0x3c,0x40,0x30,0x40,0x3c},   //  0x 4 4
  24. {0x00,0x00,0x3e,0x1c,0x08,0x00},   //  0x 5 5
  25. {0x00,0x04,0x1e,0x1f,0x1e,0x04},   //  0x 6 6
  26. {0x00,0x10,0x3c,0x7c,0x3c,0x10},   //  0x 7 7
  27. {0x00,0x20,0x40,0x3e,0x01,0x02},   //  0x 8 8
  28. {0x00,0x22,0x14,0x08,0x14,0x22},   //   0x 9 9
  29. {0x00,0x00,0x38,0x28,0x38,0x00},   //   0x a 10
  30. {0x00,0x00,0x10,0x38,0x10,0x00},   // 0x b 11
  31. {0x00,0x00,0x00,0x10,0x00,0x00},   // 0x c 12
  32. {0x00,0x08,0x78,0x08,0x00,0x00},   //   0x d 13
  33. {0x00,0x00,0x15,0x15,0x0a,0x00},   //  0x e 14
  34. {0x00,0x7f,0x7f,0x09,0x09,0x01},   //  0x f 15
  35. {0x00,0x10,0x20,0x7f,0x01,0x01},   //  0x10 16
  36. {0x00,0x04,0x04,0x00,0x01,0x1f},   //  0x11 17
  37. {0x00,0x00,0x19,0x15,0x12,0x00},   //  0x12 18
  38. {0x00,0x40,0x60,0x50,0x48,0x44},   //  0x13 19
  39. {0x00,0x06,0x09,0x09,0x06,0x00},   //  0x14 20
  40. {0x00,0x0f,0x02,0x01,0x01,0x00},   //  0x15 21
  41. {0x00,0x00,0x01,0x1f,0x01,0x00},   //  0x16 22
  42. {0x00,0x44,0x44,0x4a,0x4a,0x51},   //  0x17 23
  43. {0x00,0x14,0x74,0x1c,0x17,0x14},   //  0x18 24
  44. {0x00,0x51,0x4a,0x4a,0x44,0x44},   //  0x19 25
  45. {0x00,0x00,0x00,0x04,0x04,0x04},   //   0x1a 26
  46. {0x00,0x00,0x7c,0x54,0x54,0x44},   //  0x1b 27
  47. {0x00,0x08,0x08,0x2a,0x1c,0x08},   //   0x1c 28
  48. {0x00,0x7c,0x00,0x7c,0x44,0x7c},   //   0x1d 29
  49. {0x00,0x04,0x02,0x7f,0x02,0x04},   //   0x1e 30
  50. {0x00,0x10,0x20,0x7f,0x20,0x10},   //   0x1f 31
  51. {0x00,0x00,0x00,0x00,0x00,0x00},   //   0x20 32
  52. {0x00,0x00,0x00,0x6f,0x00,0x00},   // ! 0x21 33
  53. {0x00,0x00,0x07,0x00,0x07,0x00},   // " 0x22 34
  54. {0x00,0x14,0x7f,0x14,0x7f,0x14},   // # 0x23 35
  55. {0x00,0x00,0x07,0x04,0x1e,0x00},   // $ 0x24 36
  56. {0x00,0x23,0x13,0x08,0x64,0x62},   // % 0x25 37
  57. {0x00,0x36,0x49,0x56,0x20,0x50},   // & 0x26 38
  58. {0x00,0x00,0x00,0x07,0x00,0x00},   // ' 0x27 39
  59. {0x00,0x00,0x1c,0x22,0x41,0x00},   // ( 0x28 40
  60. {0x00,0x00,0x41,0x22,0x1c,0x00},   // ) 0x29 41
  61. {0x00,0x14,0x08,0x3e,0x08,0x14},   // * 0x2a 42
  62. {0x00,0x08,0x08,0x3e,0x08,0x08},   // + 0x2b 43
  63. {0x00,0x00,0x50,0x30,0x00,0x00},   // , 0x2c 44
  64. {0x00,0x08,0x08,0x08,0x08,0x08},   // - 0x2d 45
  65. {0x00,0x00,0x60,0x60,0x00,0x00},   // . 0x2e 46
  66. {0x00,0x20,0x10,0x08,0x04,0x02},   // / 0x2f 47
  67. {0x00,0x3e,0x51,0x49,0x45,0x3e},   // 0 0x30 48
  68. {0x00,0x00,0x42,0x7f,0x40,0x00},   // 1 0x31 49
  69. {0x00,0x42,0x61,0x51,0x49,0x46},   // 2 0x32 50
  70. {0x00,0x21,0x41,0x45,0x4b,0x31},   // 3 0x33 51
  71. {0x00,0x18,0x14,0x12,0x7f,0x10},   // 4 0x34 52
  72. {0x00,0x27,0x45,0x45,0x45,0x39},   // 5 0x35 53
  73. {0x00,0x3c,0x4a,0x49,0x49,0x30},   // 6 0x36 54
  74. {0x00,0x01,0x71,0x09,0x05,0x03},   // 7 0x37 55
  75. {0x00,0x36,0x49,0x49,0x49,0x36},   // 8 0x38 56
  76. {0x00,0x06,0x49,0x49,0x29,0x1e},   // 9 0x39 57
  77. {0x00,0x00,0x36,0x36,0x00,0x00},   // : 0x3a 58
  78. {0x00,0x00,0x56,0x36,0x00,0x00},   // ; 0x3b 59
  79. {0x00,0x08,0x14,0x22,0x41,0x00},   // < 0x3c 60
  80. {0x00,0x14,0x14,0x14,0x14,0x14},   // = 0x3d 61
  81. {0x00,0x00,0x41,0x22,0x14,0x08},   // > 0x3e 62
  82. {0x00,0x02,0x01,0x51,0x09,0x06},   // ? 0x3f 63
  83. {0x00,0x3e,0x41,0x5d,0x49,0x4e},   // @ 0x40 64
  84. {0x00,0x7e,0x09,0x09,0x09,0x7e},   // A 0x41 65
  85. {0x00,0x7f,0x49,0x49,0x49,0x36},   // B 0x42 66
  86. {0x00,0x3e,0x41,0x41,0x41,0x22},   // C 0x43 67
  87. {0x00,0x7f,0x41,0x41,0x41,0x3e},   // D 0x44 68
  88. {0x00,0x7f,0x49,0x49,0x49,0x41},   // E 0x45 69
  89. {0x00,0x7f,0x09,0x09,0x09,0x01},   // F 0x46 70
  90. {0x00,0x3e,0x41,0x49,0x49,0x7a},   // G 0x47 71
  91. {0x00,0x7f,0x08,0x08,0x08,0x7f},   // H 0x48 72
  92. {0x00,0x00,0x41,0x7f,0x41,0x00},   // I 0x49 73
  93. {0x00,0x20,0x40,0x41,0x3f,0x01},   // J 0x4a 74
  94. {0x00,0x7f,0x08,0x14,0x22,0x41},   // K 0x4b 75
  95. {0x00,0x7f,0x40,0x40,0x40,0x40},   // L 0x4c 76
  96. {0x00,0x7f,0x02,0x0c,0x02,0x7f},   // M 0x4d 77
  97. {0x00,0x7f,0x04,0x08,0x10,0x7f},   // N 0x4e 78
  98. {0x00,0x3e,0x41,0x41,0x41,0x3e},   // O 0x4f 79
  99. {0x00,0x7f,0x09,0x09,0x09,0x06},   // P 0x50 80
  100. {0x00,0x3e,0x41,0x51,0x21,0x5e},   // Q 0x51 81
  101. {0x00,0x7f,0x09,0x19,0x29,0x46},   // R 0x52 82
  102. {0x00,0x46,0x49,0x49,0x49,0x31},   // S 0x53 83
  103. {0x00,0x01,0x01,0x7f,0x01,0x01},   // T 0x54 84
  104. {0x00,0x3f,0x40,0x40,0x40,0x3f},   // U 0x55 85
  105. {0x00,0x0f,0x30,0x40,0x30,0x0f},   // V 0x56 86
  106. {0x00,0x3f,0x40,0x30,0x40,0x3f},   // W 0x57 87
  107. {0x00,0x63,0x14,0x08,0x14,0x63},   // X 0x58 88
  108. {0x00,0x07,0x08,0x70,0x08,0x07},   // Y 0x59 89
  109. {0x00,0x61,0x51,0x49,0x45,0x43},   // Z 0x5a 90
  110. {0x00,0x3c,0x4a,0x49,0x29,0x1e},   // [ 0x5b 91
  111. {0x00,0x02,0x04,0x08,0x10,0x20},   // \ 0x5c 92
  112. {0x00,0x00,0x41,0x7f,0x00,0x00},   // ] 0x5d 93
  113. {0x00,0x04,0x02,0x01,0x02,0x04},   // ^ 0x5e 94
  114. {0x00,0x40,0x40,0x40,0x40,0x40},   // _ 0x5f 95
  115. {0x00,0x00,0x00,0x03,0x04,0x00},   // ` 0x60 96
  116. {0x00,0x20,0x54,0x54,0x54,0x78},   // a 0x61 97
  117. {0x00,0x7f,0x48,0x44,0x44,0x38},   // b 0x62 98
  118. {0x00,0x38,0x44,0x44,0x44,0x20},   // c 0x63 99
  119. {0x00,0x38,0x44,0x44,0x48,0x7f},   // d 0x64 100
  120. {0x00,0x38,0x54,0x54,0x54,0x18},   // e 0x65 101
  121. {0x00,0x08,0x7e,0x09,0x01,0x02},   // f 0x66 102
  122. {0x00,0x0c,0x52,0x52,0x52,0x3e},   // g 0x67 103
  123. {0x00,0x7f,0x08,0x04,0x04,0x78},   // h 0x68 104
  124. {0x00,0x00,0x44,0x7d,0x40,0x00},   // i 0x69 105
  125. {0x00,0x20,0x40,0x44,0x3d,0x00},   // j 0x6a 106
  126. {0x00,0x00,0x7f,0x10,0x28,0x44},   // k 0x6b 107
  127. {0x00,0x00,0x41,0x7f,0x40,0x00},   // l 0x6c 108
  128. {0x00,0x7c,0x04,0x18,0x04,0x78},   // m 0x6d 109
  129. {0x00,0x7c,0x08,0x04,0x04,0x78},   // n 0x6e 110
  130. {0x00,0x38,0x44,0x44,0x44,0x38},   // o 0x6f 111
  131. {0x00,0x7c,0x14,0x14,0x14,0x08},   // p 0x70 112
  132. {0x00,0x08,0x14,0x14,0x18,0x7c},   // q 0x71 113
  133. {0x00,0x7c,0x08,0x04,0x04,0x08},   // r 0x72 114
  134. {0x00,0x48,0x54,0x54,0x54,0x20},   // s 0x73 115
  135. {0x00,0x04,0x3f,0x44,0x40,0x20},   // t 0x74 116
  136. {0x00,0x3c,0x40,0x40,0x20,0x7c},   // u 0x75 117
  137. {0x00,0x1c,0x20,0x40,0x20,0x1c},   // v 0x76 118
  138. {0x00,0x3c,0x40,0x30,0x40,0x3c},   // w 0x77 119
  139. {0x00,0x44,0x28,0x10,0x28,0x44},   // x 0x78 120
  140. {0x00,0x0c,0x50,0x50,0x50,0x3c},   // y 0x79 121
  141. {0x00,0x44,0x64,0x54,0x4c,0x44},   // z 0x7a 122
  142. {0x00,0x00,0x08,0x36,0x41,0x41},   // { 0x7b 123
  143. {0x00,0x00,0x00,0x7f,0x00,0x00},   // | 0x7c 124
  144. {0x00,0x41,0x41,0x36,0x08,0x00},   // } 0x7d 125
  145. {0x00,0x04,0x02,0x04,0x08,0x04},   // ~ 0x7e 126
  146. {0x00,0x7f,0x6b,0x6b,0x6b,0x7f},   //   0x7f 127
  147. {0x00,0x00,0x7c,0x44,0x7c,0x00},   // ¬ 0x80 128
  148. {0x00,0x00,0x08,0x7c,0x00,0x00},   //  0x81 129
  149. {0x00,0x00,0x64,0x54,0x48,0x00},   // ‚ 0x82 130
  150. {0x00,0x00,0x44,0x54,0x28,0x00},   // ƒ 0x83 131
  151. {0x00,0x00,0x1c,0x10,0x78,0x00},   // „ 0x84 132
  152. {0x00,0x00,0x5c,0x54,0x24,0x00},   // … 0x85 133
  153. {0x00,0x00,0x78,0x54,0x74,0x00},   // † 0x86 134
  154. {0x00,0x00,0x64,0x14,0x0c,0x00},   // ‡ 0x87 135
  155. {0x00,0x00,0x7c,0x54,0x7c,0x00},   // ˆ 0x88 136
  156. {0x00,0x00,0x5c,0x54,0x3c,0x00},   // ‰ 0x89 137
  157. {0x00,0x78,0x24,0x26,0x25,0x78},   // Š 0x8a 138
  158. {0x00,0x78,0x25,0x26,0x24,0x78},   // ‹ 0x8b 139
  159. {0x00,0x70,0x2a,0x29,0x2a,0x70},   // Œ 0x8c 140
  160. {0x00,0x78,0x25,0x24,0x25,0x78},   //  0x8d 141
  161. {0x00,0x20,0x54,0x56,0x55,0x78},   // } 0x8e 142
  162. {0x00,0x20,0x55,0x56,0x54,0x78},   //  0x8f 143
  163. {0x00,0x20,0x56,0x55,0x56,0x78},   //  0x90 144
  164. {0x00,0x20,0x55,0x54,0x55,0x78},   // ‘ 0x91 145
  165. {0x00,0x7c,0x54,0x56,0x55,0x44},   // ’ 0x92 146
  166. {0x00,0x7c,0x55,0x56,0x54,0x44},   // “ 0x93 147
  167. {0x00,0x7c,0x56,0x55,0x56,0x44},   // ” 0x94 148
  168. {0x00,0x7c,0x55,0x54,0x55,0x44},   // • 0x95 149
  169. {0x00,0x38,0x54,0x56,0x55,0x18},   // – 0x96 150
  170. {0x00,0x38,0x55,0x56,0x54,0x18},   // — 0x97 151
  171. {0x00,0x38,0x56,0x55,0x56,0x18},   // ˜ 0x98 152
  172. {0x00,0x38,0x55,0x54,0x55,0x18},   // ™ 0x99 153
  173. {0x00,0x00,0x44,0x7e,0x45,0x00},   // š 0x9a 154
  174. {0x00,0x00,0x45,0x7e,0x44,0x00},   // › 0x9b 155
  175. {0x00,0x00,0x46,0x7d,0x46,0x00},   // œ 0x9c 156
  176. {0x00,0x00,0x45,0x7c,0x45,0x00},   //  0x9d 157
  177. {0x00,0x00,0x48,0x7a,0x41,0x00},   // ~ 0x9e 158
  178. {0x00,0x00,0x49,0x7a,0x40,0x00},   // Ÿ 0x9f 159
  179. {0x00,0x00,0x4a,0x79,0x42,0x00},   //   0xa0 160
  180. {0x00,0x00,0x49,0x78,0x41,0x00},   // ¡ 0xa1 161
  181. {0x00,0x38,0x44,0x46,0x45,0x38},   // ¢ 0xa2 162
  182. {0x00,0x38,0x45,0x46,0x44,0x38},   // £ 0xa3 163
  183. {0x00,0x38,0x46,0x45,0x46,0x38},   // ¤ 0xa4 164
  184. {0x00,0x38,0x45,0x44,0x45,0x38},   // ¥ 0xa5 165
  185. {0x00,0x30,0x48,0x4a,0x49,0x30},   // ¦ 0xa6 166
  186. {0x00,0x30,0x49,0x4a,0x48,0x30},   // § 0xa7 167
  187. {0x00,0x30,0x4a,0x49,0x4a,0x30},   // ¨ 0xa8 168
  188. {0x00,0x30,0x49,0x48,0x49,0x30},   // © 0xa9 169
  189. {0x00,0x3c,0x40,0x42,0x41,0x3c},   // ª 0xaa 170
  190. {0x00,0x3c,0x41,0x42,0x40,0x3c},   // « 0xab 171
  191. {0x00,0x3c,0x42,0x41,0x42,0x3c},   // ¬ 0xac 172
  192. {0x00,0x3c,0x41,0x40,0x41,0x3c},   // ­ 0xad 173
  193. {0x00,0x3c,0x40,0x42,0x21,0x7c},   // ® 0xae 174
  194. {0x00,0x3c,0x41,0x42,0x20,0x7c},   // ¯ 0xaf 175
  195. {0x00,0x38,0x42,0x41,0x22,0x78},   // ° 0xb0 176
  196. {0x00,0x3c,0x41,0x40,0x21,0x7c},   // ± 0xb1 177
  197. {0x00,0x4e,0x51,0x71,0x11,0x0a},   // ² 0xb2 178
  198. {0x00,0x58,0x64,0x64,0x24,0x10},   // ³ 0xb3 179
  199. {0x00,0x7c,0x0a,0x11,0x22,0x7d},   // ´ 0xb4 180
  200. {0x00,0x78,0x12,0x09,0x0a,0x71},   // µ 0xb5 181
  201. {0x00,0x00,0x00,0x04,0x02,0x01},   // ¶ 0xb6 182
  202. {0x00,0x01,0x02,0x04,0x00,0x00},   // · 0xb7 183
  203. {0x00,0x00,0x02,0x00,0x02,0x00},   // ¸ 0xb8 184
  204. {0x00,0x30,0x48,0x45,0x40,0x20},   // ¹ 0xb9 185
  205. {0x00,0x00,0x00,0x7b,0x00,0x00},   // º 0xba 186
  206. {0x00,0x38,0x44,0x44,0x38,0x44},   // » 0xbb 187
  207. {0x00,0x40,0x3e,0x49,0x49,0x36},   // ¼ 0xbc 188
  208. {0x00,0x08,0x04,0x08,0x70,0x0c},   // ½ 0xbd 189
  209. {0x00,0x60,0x50,0x48,0x50,0x60},   // ¾ 0xbe 190
  210. {0x00,0x20,0x52,0x55,0x59,0x30},   // ¿ 0xbf 191
  211. {0x00,0x38,0x54,0x54,0x54,0x00},   // À 0xc0 192
  212. {0x00,0x00,0x00,0x7f,0x41,0x00},   // Á 0xc1 193
  213. {0x00,0x40,0x22,0x14,0x18,0x60},   // Â 0xc2 194
  214. {0x00,0x7c,0x20,0x20,0x1c,0x20},   // Ã 0xc3 195
  215. {0x00,0x44,0x3c,0x04,0x7c,0x44},   // Ä 0xc4 196
  216. {0x00,0x40,0x3c,0x12,0x12,0x0c},   // Å 0xc5 197
  217. {0x00,0x41,0x63,0x55,0x49,0x41},   // Æ 0xc6 198
  218. {0x00,0x38,0x44,0x44,0x3c,0x04},   // Ç 0xc7 199
  219. {0x00,0x08,0x04,0x3c,0x44,0x24},   // È 0xc8 200
  220. {0x00,0x08,0x14,0x7f,0x14,0x08},   // É 0xc9 201
  221. {0x00,0x4e,0x71,0x01,0x71,0x4e},   // Ê 0xca 202
  222. {0x00,0x45,0x29,0x11,0x29,0x45},   // Ë 0xcb 203
  223. {0x00,0x0d,0x51,0x51,0x51,0x3d},   // Ì 0xcc 204
  224. {0x00,0x00,0x00,0x05,0x02,0x05},   // Í 0xcd 205
  225. {0x00,0x40,0x00,0x40,0x00,0x40},   // Î 0xce 206
  226. {0x00,0x00,0x08,0x1c,0x3e,0x00},   // Ï 0xcf 207
  227. {0x00,0x1c,0x1c,0x1c,0x00,0x00},   // Ð 0xd0 208
  228. {0x00,0x00,0x70,0x08,0x07,0x00},   // Ñ 0xd1 209
  229. {0x00,0x00,0x08,0x08,0x08,0x00},   // Ò 0xd2 210
  230. {0x00,0x00,0x1d,0x15,0x17,0x00},   // Ó 0xd3 211
  231. {0x00,0x00,0x07,0x05,0x07,0x00},   // Ô 0xd4 212
  232. {0x00,0x00,0x11,0x15,0x0a,0x00},   // Õ 0xd5 213
  233. {0x00,0x00,0x00,0x00,0x00,0x00},   // Ö 0xd6 214
  234. {0x00,0x04,0x3c,0x41,0x20,0x00},   // × 0xd7 215
  235. {0x00,0x7c,0x16,0x15,0x16,0x08},   // Ø 0xd8 216
  236. {0x00,0x21,0x16,0x08,0x34,0x42},   // Ù 0xd9 217
  237. {0x00,0x7f,0x09,0x1d,0x01,0x03},   // Ú 0xda 218
  238. {0x00,0x38,0x54,0x54,0x14,0x08},   // Û 0xdb 219
  239. {0x00,0x00,0x00,0x7c,0x40,0x40},   // Ü 0xdc 220
  240. {0x00,0x7f,0x0e,0x1c,0x38,0x7f},   // Ý 0xdd 221
  241. {0x00,0x41,0x22,0x5d,0x22,0x1c},   // Þ 0xde 222
  242. {0x00,0x1c,0x3e,0x1c,0x08,0x00},   // ß 0xdf 223
  243. {0x00,0x7f,0x7f,0x7f,0x7f,0x7f},   // à 0xe0 224
  244. {0x00,0x77,0x7b,0x01,0x7b,0x77},   // á 0xe1 225
  245. {0x00,0x7f,0x43,0x75,0x43,0x7f},   // â 0xe2 226
  246. {0x00,0x7f,0x6f,0x55,0x43,0x7f},   // ã 0xe3 227
  247. {0x00,0x40,0x40,0x40,0x40,0x40},   // ä 0xe4 228
  248. {0x00,0x44,0x42,0x5f,0x42,0x44},   // å 0xe5 229
  249. {0x00,0x40,0x5e,0x45,0x5e,0x40},   // æ 0xe6 230
  250. {0x00,0x40,0x48,0x55,0x5e,0x40},   // ç 0xe7 231
  251. {0x00,0x00,0x04,0x08,0x10,0x20},   // è 0xe8 232
  252. {0x00,0x03,0x07,0x0e,0x1c,0x38},   // é 0xe9 233
  253. {0x00,0x01,0x03,0x07,0x0f,0x1f},   // ê 0xea 234
  254. {0x00,0x7c,0x78,0x70,0x60,0x40},   // ë 0xeb 235
  255. {0x00,0x08,0x08,0x1c,0x22,0x1c},   // ì 0xec 236
  256. {0x00,0x00,0x1c,0x22,0x1c,0x00},   // í 0xed 237
  257. {0x00,0x02,0x00,0x08,0x00,0x20},   // î 0xee 238
  258. {0x00,0x04,0x3e,0x3f,0x3e,0x04},   // ï 0xef 239
  259. {0x00,0x10,0x3e,0x7e,0x3e,0x10},   // ð 0xf0 240
  260. {0x00,0x55,0x2a,0x55,0x2a,0x55},   // ñ 0xf1 241
  261. {0x00,0x24,0x2a,0x7f,0x2a,0x12},   // ò 0xf2 242
  262. {0x00,0x04,0x1e,0x1f,0x1e,0x04},   // ó 0xf3 243
  263. {0x00,0x00,0x00,0x00,0x00,0x00},   // ô 0xf4 244
  264. {0x00,0x00,0x00,0x00,0x00,0x00},   // õ 0xf5 245
  265. {0x00,0x00,0x00,0x00,0x00,0x00},   // ö 0xf6 246
  266. {0x00,0x00,0x00,0x00,0x00,0x00},   // ÷ 0xf7 247
  267. {0x00,0x00,0x00,0x00,0x00,0x00},   // ø 0xf8 248
  268. {0x00,0x00,0x00,0x00,0x00,0x00},   // ù 0xf9 249
  269. {0x00,0x00,0x00,0x00,0x00,0x00},   // ú 0xfa 250
  270. {0x00,0x00,0x00,0x00,0x00,0x00},   // û 0xfb 251
  271. {0x00,0x00,0x00,0x00,0x00,0x00},   // ü 0xfc 252
  272. {0x00,0x00,0x00,0x00,0x00,0x00},   // ý 0xfd 253
  273. {0x00,0x00,0x00,0x00,0x00,0x00},   // þ 0xfe 254
  274. {0x00,0x00,0x00,0x00,0x00,0x00}    // ÿ 0xff 255
  275. };
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287. static void glcdCommand(BYTE);
  288. static void glcdDataWrite(BYTE);
  289. static void glcdSetPage(BYTE);
  290. static void glcdSetColumn(BYTE);
  291.  
  292. /*
  293. *   Function: glcdInit
  294. *
  295. *   Input:  none.
  296. *   Output: none
  297. *   Pre-conditions: none
  298. *   Affects: none.
  299. *   Depends: none.
  300. */
  301. void glcdInit(void)
  302. {
  303.     GLCD_RES_TRIS = 0;
  304.     GLCD_CS_TRIS  = 0;
  305.     GLCD_A0_TRIS  = 0;
  306.     GLCD_SCL_TRIS = 0;
  307.     GLCD_SI_TRIS  = 0;
  308.  
  309.     // SPI (one way)
  310.     // /SMP, /CKE, na, na, na, na, na, na
  311.     SSPSTAT = 0b00000000;
  312.     // na, na, SSPEN, CKP, SSPM3:0(FOSC/4)
  313.     SSPCON1 = 0b00110001;
  314.  
  315.     GLCD_RES_IO = 0;
  316.     Delay100TCYx(1);    // 10 us (2.5uS needed)
  317.     GLCD_RES_IO = 1;
  318.  
  319.     glcdCommand(0xA2); // LCD bias = 1/9
  320.     glcdCommand(0xA0); // ADC = normal
  321.     glcdCommand(0xC8); // SHL = reverse
  322.     glcdCommand(0x40); // Init display line = 0
  323.     glcdCommand(0x2C); // PWR VF=0,VR=0,VC=1
  324.     Delay10KTCYx(50);  // delay 50ms
  325.     glcdCommand(0x2E); // PWR VF=0,VR=1,VC=1
  326.     Delay10KTCYx(50);  // delay 50ms
  327.     glcdCommand(0x2F); // PWR VF=1,VR=1,VC=1
  328.     Delay10KTCYx(50);  // delay 50ms
  329.     glcdCommand(0x25); // Regulator resistor select
  330.     glcdCommand(0x81); // Set reference voltage mode
  331.     glcdCommand(0x20); // set reference voltage resistor
  332.     glcdCommand(0xAF); // Display ON
  333.  
  334.  
  335.     /*
  336.     glcdCommand(0xA2); // LCD bias set
  337.     glcdCommand(0xA1); // ADC select
  338.     glcdCommand(0xC0); // Common select
  339.     glcdCommand(0xA6); // Display set
  340.     glcdCommand(0xA4); // point ON/OFF
  341.     glcdCommand(0x81); // ???
  342.     glcdCommand(0x1C); // ???
  343.     glcdCommand(0x2F); // Power set
  344.     glcdCommand(0xF8); // Booster set
  345.     glcdCommand(0x01); // ??
  346.     glcdCommand(0xAF); // Display ON
  347.     */
  348.  
  349.     Delay100TCYx(5); // delay 50us
  350. }
  351.  
  352.  
  353. void glcdCommand(BYTE command)
  354. {
  355.     GLCD_A0_IO = 0;
  356.     PIR1bits.SSPIF=0;
  357.     SSPBUF = command;
  358.     while(!PIR1bits.SSPIF==0);
  359. }
  360.  
  361. void glcdDataWrite(BYTE data)
  362. {
  363.     GLCD_A0_IO = 1;
  364.     PIR1bits.SSPIF=0;
  365.     SSPBUF = data;
  366.     while(!PIR1bits.SSPIF==0);
  367. }
  368.  
  369.  
  370. void glcdSetStartLine(BYTE startline)
  371. {
  372.     glcdCommand((startline & 0x3F) | 0x40);
  373. }
  374.  
  375. void glcdSetPage(BYTE page)
  376. {
  377.     glcdCommand((page & 0x0F) | 0xB0);
  378. }
  379.  
  380. void glcdSetColumn(BYTE column)
  381. {
  382.     glcdCommand((column & 0x0F));
  383.     glcdCommand(((column >> 4) & 0x0F) | 0x10);
  384. }
  385.  
  386. void glcdClearScr()
  387. {
  388.     BYTE i,j;
  389.     for(i=0;i<8;i++)
  390.     {
  391.         glcdSetColumn(0);
  392.         glcdSetPage(i);
  393.         for(j=0;j<128;j++)
  394.         {
  395.             glcdDataWrite(0x00);
  396.         }
  397.     }
  398. }
  399.  
  400. void glcdDisplayPic(BYTE page, BYTE column, const rom BYTE * pic)
  401. {
  402.     BYTE i,j;
  403.     for(i=0;i<8;i++)
  404.     {
  405.         glcdSetPage(page+i);
  406.         glcdSetColumn(column);
  407.         for(j=0;j<128;j++)
  408.         {
  409.             glcdDataWrite(pic[i*128+j]);
  410.         }
  411.     }
  412. }
  413.  
  414. void glcdPutc(BYTE c)
  415. {
  416.     BYTE i;
  417.     for(i=0;i<FONT_WIDTH;i++)
  418.     {
  419.         glcdDataWrite(Font8x6[c][i]);
  420.     }  
  421. }
  422.  
  423. void glcdPutrs(BYTE page, BYTE column, const rom BYTE * s)
  424. {
  425.     glcdSetPage(page);
  426.     glcdSetColumn(column);
  427.     while(*s) glcdPutc(*s++);
  428. }
  429.  
  430. void glcdPuts(BYTE page, BYTE column, BYTE * s)
  431. {
  432.     glcdSetPage(page);
  433.     glcdSetColumn(column);
  434.     while(*s) glcdPutc(*s++);
  435. }
  436.  
  437.  
  438. #endif
  439.  
  440.